Phase 3 PR 32 — Multi-driver integration test #31
Reference in New Issue
Block a user
Delete Branch "phase-3-pr32-multi-driver-integration"
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 LMX follow-up #6. Exercises two
IDriverinstances on oneDriverHostend-to-end through the OPC UA server.What it proves
Server.Tests/MultipleDriverInstancesIntegrationTests.csregisters twoStubDriverinstances (alpha+beta) with distinctDriverInstanceIds, boots the fullOpcUaApplicationHost, and connects a real OPC UA client:urn:OtOpcUa:alpha/urn:OtOpcUa:beta) resolves to a distinct index in the client'sNamespaceUris. ProvesDriverNodeManager's per-drivernamespaceUriswiring actually produces two separateINodeManagerregistrations.alpha's root returnsAlphaFolderand does NOT leakBetaFolder, and vice versa. This is the assertion that catches a cross-driver routing regression the v1 single-driver code path couldn't surface. If a future refactor flattens both drivers into a shared namespace,shouldNotContainfails cleanly.ReadAsyncreturns 42 while beta's returns 99. A misroute would surface as 99 showing up on an alpha node id or vice versa — concrete failure mode, not abstract.Design
StubDriveris parameterized on(DriverInstanceId, folderName, readValue)so the same class constructs both instances without copy-paste. Each driver exposes a single folder with one variable.Test posture
OpcUaServerIntegrationTestsstays green (single-driver case still exercised there).Deferred
Multi-driver alarm-event case (two drivers each raising
GalaxyAlarmEvent, assert each condition lands on its owning instance's condition node). Needs a stubIAlarmSourceand is scoped for a separate PR.