Phase 3 PR 37 — End-to-end live-stack Galaxy smoke test #36
Reference in New Issue
Block a user
Delete Branch "phase-3-pr37-live-stack-smoke"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes the code side of LMX follow-up #5. Once
OtOpcUaGalaxyHostis installed + started on a box, this exercises the full topology end-to-end:GalaxyProxyDriverin-process → named-pipe IPC → running service →MxAccessGalaxyBackend→ live MXAccess runtime → real deployed Galaxy objects.Never spawns the Host
Connects to the already-running
OtOpcUaGalaxyHostWindows service, per the memory captured after the user clarified the production topology. Spawning a second Host process would bypass the COM-apartment + service-account + pipe-ACL setup and fail differently than production.Shared-secret resolution
LiveStackConfig.Resolve()checks, in order:OTOPCUA_GALAXY_PIPE+OTOPCUA_GALAXY_SECRETenv vars (CI / benchwork overrides).HKLM\SYSTEM\CurrentControlSet\Services\OtOpcUaGalaxyHost\Environment) — whatInstall-Services.ps1writes at install time. Requires elevated test host on most boxes; the skip message says so explicitly.No hard-coded secrets — installer generates 32 fresh random bytes per install; a committed secret would diverge from production the moment the service is re-installed.
Fixture flow
LiveStackFixture(xUnitIAsyncLifetime, consumed byLiveStackCollection):AvevaPrerequisites.CheckAllAsync(from PR 36). Captures aPrerequisiteReport; if notIsLivetestReady,SkipReasonis the full operator-facing list.LiveStackConfig.Resolve. Skip with a clear 'set env var OR run elevated' message when absent.GalaxyProxyDriver.InitializeAsync. On exception, skip with the error detail plus common-cause hints (secret mismatch, SID not in pipe ACL, Host's ZB connection broken).SkipIfUnavailabletranslates the captured reason intoAssert.Skipat the top of every fact — no NullRef cascades.Tests (Category=LiveGalaxy)
Fixture_initialized_successfully— cheapest end-to-end check; IPC handshake worked.Driver_reports_Healthy_after_IPC_handshake—DriverHealth.Statepost-connect.DiscoverAsync_returns_at_least_one_variable_from_live_galaxy— flattens everyVariable()call viaCapturingAddressSpaceBuilder, asserts > 0.GetHostStatuses_reports_at_least_one_platform—IHostConnectivityProbesurface.Can_read_a_discovered_variable_from_live_galaxy— reads the first discovered attribute's full reference, asserts status != BadInternalError (Galaxy's Uncertain-until-first-Engine-scan is intentionally not treated as failure).Read-only by design
Writes need an agreed scratch tag or test-only UDA to avoid mutating a process-critical attribute. Deferred to a follow-up PR that reuses this fixture.
Test run on THIS box (
OtOpcUaGalaxyHostnot installed)Each skip message surfaces
• [OtOpcUaService] service:OtOpcUaGalaxyHost — Not installed (...). Once the service is installed + started (scripts\install\Install-Services.ps1), the 5 facts execute against live Galaxy.LMX #5
Updated to 'IN PROGRESS' across PRs 36 + 37. Remaining: install + start services, subscribe-and-receive-data-change test, write round-trip test.