E2E test script — Galaxy (MXAccess) driver: read / write / subscribe / alarms / history #224
Reference in New Issue
Block a user
Delete Branch "task-galaxy-e2e"
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?
Seven-stage e2e script covering every Galaxy-specific capability surface: IReadable + IWritable + ISubscribable + IAlarmSource + IHistoryProvider. Unlike the other drivers there is no per-protocol CLI — Galaxy's proxy lives in-process with the server + talks to OtOpcUaGalaxyHost over a named pipe (MXAccess COM is 32-bit-only), so every stage runs through
otopcua-cliagainst the published OPC UA address space.Stages
otopcua-cli readon the source NodeId; success proves the whole pipe → proxy → server → client chain is up.CachedTagUpstreamSource— the seam most likely to silently stop working.BadUserAccessDenied/BadNotWritable) — not every Galaxy attribute is writable for an anonymous session.Activestate when source crosses the seeded threshold (> 50).historyreadreturns samples from the Aveva Historian →IHistoryProviderdispatch path.Two new helpers in
_common.ps1Test-AlarmFiresOnThreshold— startsotopcua-cli alarms --refreshin the background on a Condition NodeId, drives the source change, asserts captured stdout contains bothALARMandActive. Same Start-Process + temp-file pattern asTest-SubscribeSeesChangesince the alarms command runs until Ctrl+C.Test-HistoryHasSamples— callsotopcua-cli historyreadover a configurable lookback window, parses theN values returned.marker, fails belowMinSamples. Works for driver-sourced, virtual, or scripted-alarm historized nodes.Wiring
test-all.ps1picks up an optionalgalaxysidecar section and runs the script with configured NodeIds + wait windows.e2e-config.sample.jsonadds agalaxysection seeded with Phase 7 defaults (p7-smoke-tag-source/-vt-derived/-al-overtemp) — matchesscripts/smoke/seed-phase-7-smoke.sql.scripts/e2e/README.mdexpected-matrix gains a Galaxy row.Prereqs
seed-phase-7-smoke.sqlapplied with a live Galaxy attribute substituted intodbo.Tag.TagConfigp7-smokeclusterTest plan
??+-AsHashtablepaths unchanged)p7-smokeclusterSeven-stage e2e script covering every Galaxy-specific capability surface: IReadable + IWritable + ISubscribable + IAlarmSource + IHistoryProvider. Unlike the other drivers there is no per-protocol CLI — Galaxy's proxy lives in-process with the server + talks to OtOpcUaGalaxyHost over a named pipe (MXAccess COM is 32-bit-only), so every stage runs through `otopcua-cli` against the published OPC UA address space. ## Stages 1. Probe — otopcua-cli read on the source NodeId 2. Source read — capture value for downstream comparison 3. Virtual-tag bridge — Phase 7 VirtualTag (source × 2) through CachedTagUpstreamSource 4. Subscribe-sees-change — data-change events propagate 5. Reverse bridge — opc-ua write → Galaxy; soft-passes if the attribute's Galaxy-side ACL forbids writes (`BadUserAccessDenied` / `BadNotWritable`) 6. Alarm fires — scripted-alarm Condition fires with Active state when source crosses threshold 7. History read — historyread returns samples from the Aveva Historian → IHistoryProvider path ## Two new helpers in _common.ps1 - `Test-AlarmFiresOnThreshold` — start `otopcua-cli alarms --refresh` in the background on a Condition NodeId, drive the source change, assert captured stdout contains `ALARM` + `Active`. Uses the same Start-Process + temp-file pattern as `Test-SubscribeSeesChange` since the alarms command runs until Ctrl+C (no built-in --duration). - `Test-HistoryHasSamples` — call `otopcua-cli historyread` over a configurable lookback window, parse `N values returned.` marker, fail if below MinSamples. Works for driver-sourced, virtual, or scripted- alarm historized nodes. ## Wiring - `test-all.ps1` picks up the optional `galaxy` sidecar section and runs the script with the configured NodeIds + wait windows. - `e2e-config.sample.json` adds a `galaxy` section seeded with the Phase 7 defaults (`p7-smoke-tag-source` / `-vt-derived` / `-al-overtemp`) — matches `scripts/smoke/seed-phase-7-smoke.sql`. - `scripts/e2e/README.md` expected-matrix gains a Galaxy row. ## Prereqs - OtOpcUaGalaxyHost running (NSSM-wrapped) with the Galaxy + MXAccess runtime available - `seed-phase-7-smoke.sql` applied with a live Galaxy attribute substituted into `dbo.Tag.TagConfig` - OtOpcUa server running against the `p7-smoke` cluster - Non-elevated shell (Galaxy.Host pipe ACL denies Admins) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Pull request closed