From a7b18364cdab718e54cce3081dc1b8e4f5bf6c05 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 22 Aug 2026 14:06:57 +0200 Subject: [PATCH] fix(gates): support a second account for remote shadows --- .../ConnectedRenderPackGateContractTests.cs | 4 +++ ...nnected-render-pack-remote-player-gate.ps1 | 34 ++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/tests/AcDream.App.Tests/Diagnostics/ConnectedRenderPackGateContractTests.cs b/tests/AcDream.App.Tests/Diagnostics/ConnectedRenderPackGateContractTests.cs index fdc8ccbd..3fb9e5ec 100644 --- a/tests/AcDream.App.Tests/Diagnostics/ConnectedRenderPackGateContractTests.cs +++ b/tests/AcDream.App.Tests/Diagnostics/ConnectedRenderPackGateContractTests.cs @@ -241,11 +241,15 @@ Remove-ConnectedGraphicalSessionConfig -State $state -Path $sessionConfigPath string source = ReadTool(RemotePlayerScript); Assert.Contains("PrimaryCharacterIndex = 0", source, StringComparison.Ordinal); Assert.Contains("ObserverCharacterIndex = 1", source, StringComparison.Ordinal); + Assert.Contains("[string]$ObserverAccount", source, StringComparison.Ordinal); + Assert.Contains("[string]$ObserverPassword", source, StringComparison.Ordinal); Assert.Contains("Primary and observer character indexes must differ", source, StringComparison.Ordinal); Assert.Contains("Get-ConnectedGateBinaryIdentity", source, StringComparison.Ordinal); Assert.Contains("-CharacterIndex $ObserverCharacterIndex", source, StringComparison.Ordinal); Assert.Contains("-CharacterIndex $PrimaryCharacterIndex", source, StringComparison.Ordinal); Assert.Contains("[int]$classes.RemotePlayers -lt 1", source, StringComparison.Ordinal); + Assert.Contains("live: session failed:", source, StringComparison.Ordinal); + Assert.Contains("DistinctAccountsConfigured", source, StringComparison.Ordinal); Assert.Contains("both clients entered world with the same character identity", source, StringComparison.Ordinal); Assert.Contains("Restore-ConnectedRenderPackGateEnvironment $primaryState", source, StringComparison.Ordinal); Assert.Contains("Restore-ConnectedRenderPackGateEnvironment $observerState", source, StringComparison.Ordinal); diff --git a/tools/run-connected-render-pack-remote-player-gate.ps1 b/tools/run-connected-render-pack-remote-player-gate.ps1 index 0db7562e..803833e9 100644 --- a/tools/run-connected-render-pack-remote-player-gate.ps1 +++ b/tools/run-connected-render-pack-remote-player-gate.ps1 @@ -3,6 +3,8 @@ param( [string]$Repository = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path, [string]$Account = $env:ACDREAM_TEST_USER, [string]$Password = $env:ACDREAM_TEST_PASS, + [string]$ObserverAccount, + [string]$ObserverPassword, [ValidateRange(0, [int]::MaxValue)][int]$PrimaryCharacterIndex = 0, [ValidateRange(0, [int]::MaxValue)][int]$ObserverCharacterIndex = 1, [switch]$SkipBuild, @@ -15,6 +17,8 @@ $ErrorActionPreference = 'Stop' if ([string]::IsNullOrWhiteSpace($Account)) { $Account = 'testaccount' } if ([string]::IsNullOrWhiteSpace($Password)) { $Password = 'testpassword' } +if ([string]::IsNullOrWhiteSpace($ObserverAccount)) { $ObserverAccount = $Account } +if ([string]::IsNullOrWhiteSpace($ObserverPassword)) { $ObserverPassword = $Password } if ($PrimaryCharacterIndex -eq $ObserverCharacterIndex) { throw 'Primary and observer character indexes must differ.' } @@ -45,7 +49,9 @@ function Set-ClientEnvironment { param( [Parameter(Mandatory = $true)][object]$State, [Parameter(Mandatory = $true)][string]$ArtifactDirectory, - [Parameter(Mandatory = $true)][string]$Route + [Parameter(Mandatory = $true)][string]$Route, + [Parameter(Mandatory = $true)][string]$SessionAccount, + [Parameter(Mandatory = $true)][string]$SessionPassword ) $env:ACDREAM_CONFIG_DIR = $State.ConfigDirectory $env:ACDREAM_DATA_DIR = $State.DataDirectory @@ -54,8 +60,8 @@ function Set-ClientEnvironment { $env:ACDREAM_LIVE = '1' $env:ACDREAM_TEST_HOST = '127.0.0.1' $env:ACDREAM_TEST_PORT = '9000' - $env:ACDREAM_TEST_USER = $Account - $env:ACDREAM_TEST_PASS = $Password + $env:ACDREAM_TEST_USER = $SessionAccount + $env:ACDREAM_TEST_PASS = $SessionPassword $env:ACDREAM_RETAIL_UI = '1' $env:ACDREAM_DEVTOOLS = '0' $env:ACDREAM_UI_PROBE_DUMP = '0' @@ -77,9 +83,15 @@ function Wait-ForLogPattern { if ($Client.HasExited) { throw "client exited with code $($Client.ExitCode) while waiting for '$Pattern'" } - if ((Test-Path -LiteralPath $Path) -and - (Select-String -LiteralPath $Path -SimpleMatch $Pattern -Quiet)) { - return + if (Test-Path -LiteralPath $Path) { + $sessionFailure = Select-String -LiteralPath $Path ` + -SimpleMatch 'live: session failed:' | Select-Object -Last 1 + if ($null -ne $sessionFailure) { + throw "client session failed while waiting for '$Pattern': $($sessionFailure.Line)" + } + if (Select-String -LiteralPath $Path -SimpleMatch $Pattern -Quiet) { + return + } } Start-Sleep -Milliseconds 250 } @@ -210,7 +222,7 @@ try { $observerStatus = Join-Path $observerState.StateDirectory 'status\observer.jsonl' $primaryStatus = Join-Path $primaryState.StateDirectory 'status\primary.jsonl' $observerConfig = New-ConnectedGraphicalSessionConfig ` - -State $observerState -Account $Account ` + -State $observerState -Account $ObserverAccount ` -CharacterIndex $ObserverCharacterIndex -Plugins @() ` -StatusFile $observerStatus $primaryConfig = New-ConnectedGraphicalSessionConfig ` @@ -220,7 +232,8 @@ try { $observerStdout = Join-Path $observerRoot 'client.stdout.log' $observerStderr = Join-Path $observerRoot 'client.stderr.log' - Set-ClientEnvironment $observerState $observerRoot $observerRoute + Set-ClientEnvironment $observerState $observerRoot $observerRoute ` + $ObserverAccount $ObserverPassword $observer = Start-Process -FilePath $exe -WorkingDirectory $Repository ` -ArgumentList @('--session-config', ('"' + $observerConfig + '"')) ` -RedirectStandardOutput $observerStdout ` @@ -230,7 +243,8 @@ try { $primaryStdout = Join-Path $primaryRoot 'client.stdout.log' $primaryStderr = Join-Path $primaryRoot 'client.stderr.log' - Set-ClientEnvironment $primaryState $primaryRoot $primaryRoute + Set-ClientEnvironment $primaryState $primaryRoot $primaryRoute ` + $Account $Password $primary = Start-Process -FilePath $exe -WorkingDirectory $Repository ` -ArgumentList @('--session-config', ('"' + $primaryConfig + '"')) ` -RedirectStandardOutput $primaryStdout ` @@ -299,6 +313,8 @@ finally { TrackedSourceStatus = if ($null -eq $binaryIdentity) { @() } else { @($binaryIdentity.SourceTrackedStatus) } PrimaryCharacterIndex = $PrimaryCharacterIndex ObserverCharacterIndex = $ObserverCharacterIndex + DistinctAccountsConfigured = -not [string]::Equals( + $Account, $ObserverAccount, [StringComparison]::OrdinalIgnoreCase) Result = $result Failure = $failure }