5.1 KiB
Gateway Testing
Gateway tests run without installed MXAccess by using fake workers, fake transports, and in-process gRPC service fakes. Live MXAccess verification belongs in opt-in integration tests because it depends on installed COM components and provider state.
Fake Worker Harness
FakeWorkerHarness in src/MxGateway.Tests/Gateway/Workers/Fakes/ provides an
in-process worker side for named-pipe IPC tests. It uses the same
WorkerFrameReader, WorkerFrameWriter, and WorkerEnvelope contract as the
gateway so tests exercise real frame validation and worker-client state changes.
Use the harness when a gateway or session test needs worker behavior without
starting MxGateway.Worker.exe or loading MXAccess COM. The harness scripts:
WorkerHelloandWorkerReadystartup,- command replies with matching correlation ids,
- ordered
WorkerEventframes, WorkerHeartbeatframes,WorkerFaultframes,- shutdown acknowledgements,
- malformed protobuf payloads and oversized frame headers,
- slow or hung workers by withholding a reply.
Session-level tests can connect the harness to the pipe created by
SessionWorkerClientFactory with ConnectToGatewayPipeAsync. Lower-level
WorkerClient tests can use CreateConnectedPairAsync to create both pipe ends
inside the test.
GatewayEndToEndFakeWorkerSmokeTests composes the real gRPC service,
SessionManager, SessionWorkerClientFactory, WorkerClient, and
EventStreamService with a scripted fake worker launcher. The smoke test covers
OpenSession, Register, AddItem, Advise, one streamed OnDataChange
event, and CloseSession without loading MXAccess COM.
Live MXAccess Smoke
WorkerLiveMxAccessSmokeTests in src/MxGateway.IntegrationTests/ composes the
real gRPC service, SessionManager, SessionWorkerClientFactory,
WorkerClient, WorkerProcessLauncher, and MxGateway.Worker.exe. It is
skipped unless MXGATEWAY_RUN_LIVE_MXACCESS_TESTS=1 is set because it creates
the installed MXAccess COM object and depends on live provider state.
The live smoke opens a gateway session, launches the x86 worker, runs
Register, AddItem, and Advise, waits a bounded time for one
OnDataChange, and closes the session in a finally block so the worker gets a
graceful shutdown request even when a command or event assertion fails.
Build the worker before running the smoke:
dotnet build src/MxGateway.Worker/MxGateway.Worker.csproj -p:Platform=x86
Run the smoke explicitly:
$env:MXGATEWAY_RUN_LIVE_MXACCESS_TESTS = "1"
dotnet test src/MxGateway.IntegrationTests/MxGateway.IntegrationTests.csproj --filter FullyQualifiedName~WorkerLiveMxAccessSmokeTests
Optional live smoke variables:
| Variable | Default | Description |
|---|---|---|
MXGATEWAY_LIVE_MXACCESS_WORKER_EXE |
First existing MxGateway.Worker.exe under src/MxGateway.Worker/bin/... |
Worker executable path. Set this when running against a packaged worker or a non-default build output. |
MXGATEWAY_LIVE_MXACCESS_ITEM |
TestChildObject.TestInt |
MXAccess item reference used by AddItem. |
MXGATEWAY_LIVE_MXACCESS_CLIENT_NAME |
MxGateway.IntegrationTests |
Client name passed to Register. |
MXGATEWAY_LIVE_MXACCESS_EVENT_TIMEOUT_SECONDS |
15 |
Maximum wait for the first OnDataChange. |
The test output includes session id, worker process id, command status, HRESULT/status diagnostics, event sequence and handles, close status, and worker stdout/stderr lines emitted during the run.
Focused Commands
Run the cross-language smoke matrix tests after changing the documented client smoke command list:
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~CrossLanguageSmokeMatrixTests
Run the parity fixture matrix tests after changing the integration parity scenario list:
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~ParityFixtureMatrixTests
Run the fake worker tests after changing gateway worker IPC, session startup, or event streaming behavior:
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~FakeWorkerHarnessTests
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~SessionWorkerClientFactoryFakeWorkerTests
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~GatewayEndToEndFakeWorkerSmokeTests
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter FullyQualifiedName~WorkerClientTests
dotnet test src/MxGateway.Worker.Tests/MxGateway.Worker.Tests.csproj -p:Platform=x86 --filter FullyQualifiedName~WorkerPipeSessionTests
Run the gateway test project after shared gateway test infrastructure changes:
dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj