89 lines
5.8 KiB
Markdown
89 lines
5.8 KiB
Markdown
# OPC UA Client test fixture
|
|
|
|
This is the fixture and command map for the driver/browser upgrade from SDK
|
|
**1.5.378.182** to exact **2.0.1** (#782). It describes available tests; execution,
|
|
counts, skips and release decisions belong in [#782](https://gitea.dohertylan.com/dohertj2/lmxopcua/issues/782)
|
|
and the linked [execution evidence](../plans/2026-11-10-opcua-sdk-2-evidence.md).
|
|
A listed test or historical run is not candidate release evidence.
|
|
|
|
## Fixture layers
|
|
|
|
| Layer | Repository location | Scope and limitation |
|
|
|---|---|---|
|
|
| Driver unit | `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Tests/` | Faked session contracts: lifecycle/generations, value conversion, per-item errors, policy selection, credentials, namespace remapping, subscription cleanup, discovery, alarms and host-owned reinitialization. No real secure channel. |
|
|
| Browser unit | `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.Tests/` | Browse attributes/pagination and certificate-identity ownership, including failure cleanup. No external server. |
|
|
| In-process wire | `tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests/` | Real driver against OtOpcUa: `OpcUaClientDriverWireTests`, `OpcUaClientDriverStallWireTests`, `OpcUaClientDriverReconnectWireTests`. Real channels but both sides use this repository's SDK. |
|
|
| External simulator | `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.IntegrationTests/` | `OpcUaClientSmokeTests`: real read, varied-type batch read and subscription against opc-plc. Does not prove all upstream products, secured authentication, write or alarm compatibility. |
|
|
| Browser integration | `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.IntegrationTests/` | Separate fixture-backed browser tests; inspect fixture availability and individual results. |
|
|
|
|
The SDK 2 unit boundary cases include `OpcUaClientSdkValueBoundaryTests` and
|
|
`OpcUaClientContinuationPointReleaseTests`. They preserve CLR value types and
|
|
null/empty buffers, reject unsupported matrix items without shifting batch results,
|
|
and release abandoned browse points. Certificate tests cover lifetime through
|
|
session close; unit mocks alone do not establish trust-chain interoperability.
|
|
|
|
The in-process stall proxy holds bytes without closing the session, then resumes;
|
|
its hard-close case refuses connections. These exercise stale notification rejection,
|
|
quality transitions and explicit host reinitialization. The driver does not use
|
|
`SessionReconnectHandler` or `TransferSubscriptions`; historical transfer-based
|
|
coverage descriptions do not apply to the current lifecycle (#670/#676).
|
|
|
|
The driver has **no upstream HistoryRead capability** (#655). Its tags can be
|
|
recorded into the local server-wide historian; backend conformance and aggregate
|
|
oracles are documented in [Historian.md](../Historian.md).
|
|
|
|
## Running locally
|
|
|
|
Run from the repository root. Build first and use a fresh result directory for
|
|
**each** project. The [runbook](../plans/2026-11-10-opcua-sdk-2-rollout.md#verification-commands)
|
|
provides the result helper that preserves test exit status and rejects all-skipped
|
|
runs. For example, after defining that helper:
|
|
|
|
```bash
|
|
opc_test tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Tests/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Tests.csproj
|
|
opc_test tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.Tests/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.Tests.csproj
|
|
opc_test tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests.csproj
|
|
```
|
|
|
|
The simulator compose file is
|
|
`tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.IntegrationTests/Docker/docker-compose.yml`.
|
|
It launches `mcr.microsoft.com/iotedge/opc-plc:2.14.10` with `--ut --aa --alm --pn=50000`.
|
|
Use the shared-host procedure in [infra/README.md](../../infra/README.md); coordinate
|
|
shared fixture use before restarting containers. These dev flags do not establish
|
|
production trust or secure-policy coverage.
|
|
|
|
`OpcPlcFixture` probes `OPCUA_SIM_ENDPOINT` (default `opc.tcp://10.100.0.35:50000`)
|
|
and skips when unavailable. With an available, reserved fixture:
|
|
|
|
```bash
|
|
export OPCUA_SIM_ENDPOINT=opc.tcp://10.100.0.35:50000
|
|
opc_test tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.IntegrationTests/ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.IntegrationTests.csproj
|
|
```
|
|
|
|
A nonzero suite count does not prove every required scenario ran: inspect individual
|
|
TRX results and record required skips separately. No tests were run by preparing
|
|
this documentation.
|
|
|
|
## Required compatibility evidence
|
|
|
|
Release validation must identify both application builds and SDK versions, endpoint
|
|
policy, token kind, certificate chain, configuration and executed capabilities.
|
|
Use the baseline client against the candidate server and candidate client against
|
|
the baseline server, plus the actual ScadaBridge adapter and external upstreams.
|
|
For secured paths include trusted SignAndEncrypt, API-key allow/deny/revocation,
|
|
certificate rejection and restart/rebind. Apply only operations the peer implements;
|
|
a simulator need not implement OtOpcUa's API-key or historian contract.
|
|
|
|
For alarms verify typed EventFilter select clauses, result-field indexes, actual
|
|
ConditionType/SourceNode/EventId identity, refresh, acknowledgements and no replay
|
|
after an ambiguous transport failure. For all supported paths preserve existing
|
|
operation statuses, locale behavior and null/empty filter meaning. Constructing an
|
|
empty SDK 2 `ContentFilter` is an API adaptation, not evidence of a changed filter
|
|
contract. Record any stricter protocol response and consumer impact before acceptance.
|
|
|
|
opc-plc uses the OPC Foundation stack too. Independent upstream behavior, secured
|
|
authentication variants, large publish queues, real alarm products, packet-loss
|
|
windows and performance require separate evidence. The rollout runbook links the
|
|
pending gates; no simulator run substitutes for ScadaBridge, live gateway, Windows,
|
|
Linux or mixed-version cluster validation.
|