test(render): add connected package lifecycle gate

This commit is contained in:
Erik 2026-08-22 13:53:29 +02:00
parent 1f75ce0505
commit f92479ac3e
4 changed files with 507 additions and 12 deletions

View file

@ -10,6 +10,8 @@ public sealed class ConnectedRenderPackGateContractTests
{
private const string LifecycleScript = "run-connected-world-lifecycle-gate.ps1";
private const string SoakScript = "run-connected-r6-soak.ps1";
private const string PackageLifecycleScript =
"run-connected-render-pack-package-lifecycle.ps1";
[Fact]
public void ScreenshotJsonCarriesAuthoritativeCasterClassCounters()
@ -125,7 +127,8 @@ foreach ($name in $script:ConnectedGateEnvironmentNames) {{
}}
[Environment]::SetEnvironmentVariable('ACDREAM_FUTURE_GATE_KNOB', 'sentinel-future', 'Process')
$state = New-ConnectedRenderPackGateState -Root {rootQuoted} -Preset medium
$sessionConfigPath = New-ConnectedGraphicalSessionConfig -State $state -Account 'fixture-account'
$statusFile = Join-Path $state.StateDirectory 'status\fixture.jsonl'
$sessionConfigPath = New-ConnectedGraphicalSessionConfig -State $state -Account 'fixture-account' -Plugins @('fixture.render') -StatusFile $statusFile
$sessionConfig = Get-Content -Raw -LiteralPath $sessionConfigPath | ConvertFrom-Json
$isolated=@($state.PreviousEnvironment.Keys | Where-Object {{
$_ -notin @('ACDREAM_CONFIG_DIR', 'ACDREAM_DATA_DIR', 'ACDREAM_CACHE_DIR') -and
@ -153,6 +156,8 @@ Remove-ConnectedGraphicalSessionConfig -State $state -Path $sessionConfigPath
SessionCharacterIndex=$sessionConfig.sessions[0].character.index;
SessionCredentialProvider=$sessionConfig.sessions[0].credential.provider;
SessionCredentialReference=$sessionConfig.sessions[0].credential.reference;
SessionPlugins=@($sessionConfig.sessions[0].plugins);
SessionStatusFile=$sessionConfig.sessions[0].statusFile;
Settings=(Get-Content -Raw -LiteralPath (Join-Path $state.ConfigDirectory 'settings.json') | ConvertFrom-Json).display.renderPack.presetId
}} | ConvertTo-Json -Compress";
using JsonDocument result = JsonDocument.Parse(RunPowerShell(command));
@ -170,6 +175,13 @@ Remove-ConnectedGraphicalSessionConfig -State $state -Path $sessionConfigPath
Assert.Equal(0, rootElement.GetProperty("SessionCharacterIndex").GetInt32());
Assert.Equal("Environment", rootElement.GetProperty("SessionCredentialProvider").GetString());
Assert.Equal("ACDREAM_TEST_PASS", rootElement.GetProperty("SessionCredentialReference").GetString());
Assert.Equal(
new[] { "fixture.render" },
rootElement.GetProperty("SessionPlugins").EnumerateArray()
.Select(static value => value.GetString()!).ToArray());
Assert.Equal(
Path.GetFullPath(Path.Combine(root, "isolated-state", "status", "fixture.jsonl")),
rootElement.GetProperty("SessionStatusFile").GetString());
Assert.Equal("medium", rootElement.GetProperty("Settings").GetString());
}
finally { Directory.Delete(root, recursive: true); }
@ -192,6 +204,35 @@ Remove-ConnectedGraphicalSessionConfig -State $state -Path $sessionConfigPath
Assert.Contains("reference = $CredentialEnvironmentVariable", common, StringComparison.Ordinal);
}
[Fact]
public void ConnectedPackageLifecycleRunsSixFreshGraphicalHostScenariosFailClosed()
{
string source = ReadTool(PackageLifecycleScript);
Assert.Contains("Get-ConnectedGateBinaryIdentity", source, StringComparison.Ordinal);
Assert.Contains("New-ConnectedRenderPackGateState -Root $root -Preset retail", source, StringComparison.Ordinal);
Assert.Contains("-Plugins @($packageId)", source, StringComparison.Ordinal);
Assert.Contains("-StatusFile $status", source, StringComparison.Ordinal);
Assert.Contains("pluginLoaded", source, StringComparison.Ordinal);
Assert.Contains("pluginFailed", source, StringComparison.Ordinal);
Assert.Contains("'01-installed-v1-selected'", source, StringComparison.Ordinal);
Assert.Contains("'02-updated-v2-stale-selection'", source, StringComparison.Ordinal);
Assert.Contains("'03-updated-v2-selected'", source, StringComparison.Ordinal);
Assert.Contains("'04-package-removed'", source, StringComparison.Ordinal);
Assert.Contains("'05-registration-failed'", source, StringComparison.Ordinal);
Assert.Contains("'06-corrected-and-recovered'", source, StringComparison.Ordinal);
Assert.Contains("BinaryMatchesSource", source, StringComparison.Ordinal);
Assert.Contains("TrackedSourceStatus", source, StringComparison.Ordinal);
Assert.Contains("Restore-ConnectedRenderPackGateEnvironment", source, StringComparison.Ordinal);
string route = ReadTool("connected-render-pack-package-lifecycle.route.txt");
AssertAppearsInOrder(
route,
"wait world-ready 90000",
"wait world-visible 30000",
"screenshot package-lifecycle 15000",
"checkpoint package-lifecycle");
}
[Fact]
public void EveryConnectedScreenshotMustProveExactFailureFreeActivation()
{