24 KiB
Cluster 10 — Testing
Docs audited: docs/GatewayTesting.md, docs/ClientBehaviorFixtures.md,
docs/ParityFixtureMatrix.md, docs/CrossLanguageSmokeMatrix.md,
docs/ToolchainLinks.md.
Verified against: src/ZB.MOM.WW.MxGateway.Tests/**, src/ZB.MOM.WW.MxGateway.Worker.Tests/**,
src/ZB.MOM.WW.MxGateway.IntegrationTests/**, scripts/run-client-e2e-tests.ps1,
scripts/validate-client-behavior-fixtures.ps1, scripts/discover-testmachine-tags.ps1,
clients/proto/fixtures/**.
DOC / LINES / GatewayTesting.md / 322–324
CLAIM / "the script builds the .NET CLI (dotnet build) and installs the Java CLI (gradle :mxgateway-cli:installDist) once"
CLAIM_TYPE / command
VERDICT / wrong
EVIDENCE / scripts/run-client-e2e-tests.ps1:542 — actual invocation is gradle :zb-mom-ww-mxgateway-cli:installDist; clients/java/settings.gradle:26 — the Gradle subproject is named zb-mom-ww-mxgateway-cli, not mxgateway-cli
CODE_AREA / test.cmd
SEVERITY / high
PROPOSED_FIX / Replace :mxgateway-cli:installDist with :zb-mom-ww-mxgateway-cli:installDist in GatewayTesting.md line 323.
DOC / LINES / clients/proto/fixtures/smoke/cross-language-smoke-matrix.json / multiple Java command entries
CLAIM / Java bundled and optional commands use gradle :mxgateway-cli:run (e.g. gradle :mxgateway-cli:run --args="close-session ...")
CLAIM_TYPE / command
VERDICT / wrong
EVIDENCE / clients/java/settings.gradle:26 — Gradle subproject name is zb-mom-ww-mxgateway-cli; the :mxgateway-cli:run task does not exist and would fail. scripts/run-client-e2e-tests.ps1:542 uses the correct :zb-mom-ww-mxgateway-cli:installDist
CODE_AREA / test.cmd
SEVERITY / high
PROPOSED_FIX / Replace every :mxgateway-cli:run in the smoke matrix JSON with :zb-mom-ww-mxgateway-cli:run. Also update the installDist reference in any bundled command if present.
DOC / LINES / GatewayTesting.md / 40–44
CLAIM / "WorkerLiveMxAccessSmokeTests in src/ZB.MOM.WW.MxGateway.IntegrationTests/ … It is skipped unless MXGATEWAY_RUN_LIVE_MXACCESS_TESTS=1 is set"
CLAIM_TYPE / path, config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/WorkerLiveMxAccessSmokeTests.cs:25 ([LiveMxAccessFact]); src/ZB.MOM.WW.MxGateway.IntegrationTests/IntegrationTestEnvironment.cs:13 (LiveMxAccessVariableName = GatewayContractInfo.LiveMxAccessOptInVariableName); src/ZB.MOM.WW.MxGateway.Contracts/GatewayContractInfo.cs:28 ("MXGATEWAY_RUN_LIVE_MXACCESS_TESTS")
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 76
CLAIM / "All six tests are gated by the same MXGATEWAY_RUN_LIVE_MXACCESS_TESTS=1 opt-in variable"
CLAIM_TYPE / term, config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/WorkerLiveMxAccessSmokeTests.cs — exactly 6 [LiveMxAccessFact] attributes at lines 33, 122, 238, 296, 440, 571
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 82–83
CLAIM / Worker build command: dotnet build src/ZB.MOM.WW.MxGateway.Worker/ZB.MOM.WW.MxGateway.Worker.csproj -p:Platform=x86
CLAIM_TYPE / command, path
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Worker/ZB.MOM.WW.MxGateway.Worker.csproj exists; PlatformTarget=x86 is set in the Worker.Tests csproj (src/ZB.MOM.WW.MxGateway.Worker.Tests/ZB.MOM.WW.MxGateway.Worker.Tests.csproj:6)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 89
CLAIM / Live MXAccess smoke run: dotnet test src/ZB.MOM.WW.MxGateway.IntegrationTests/ZB.MOM.WW.MxGateway.IntegrationTests.csproj --filter FullyQualifiedName~WorkerLiveMxAccessSmokeTests
CLAIM_TYPE / command, path
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/ZB.MOM.WW.MxGateway.IntegrationTests.csproj exists; class name WorkerLiveMxAccessSmokeTests confirmed at src/ZB.MOM.WW.MxGateway.IntegrationTests/WorkerLiveMxAccessSmokeTests.cs:25
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 94–101
CLAIM / Optional live smoke variables table: MXGATEWAY_LIVE_MXACCESS_WORKER_EXE, MXGATEWAY_LIVE_MXACCESS_ITEM, MXGATEWAY_LIVE_MXACCESS_CLIENT_NAME, MXGATEWAY_LIVE_MXACCESS_EVENT_TIMEOUT_SECONDS with stated defaults
CLAIM_TYPE / config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/IntegrationTestEnvironment.cs:14–17 — all four constant names match exactly; defaults match (TestChildObject.TestInt line 39, ZB.MOM.WW.MxGateway.IntegrationTests line 45, 15 seconds line 51)
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 100–101
CLAIM / Optional variables MXGATEWAY_LIVE_MXACCESS_WRITE_SECURED_USER (default admin) and MXGATEWAY_LIVE_MXACCESS_WRITE_SECURED_PASSWORD (default admin123) "are gated by the same opt-in variable"
CLAIM_TYPE / config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/WorkerLiveMxAccessSmokeTests.cs:974–977 — variable names and defaults exactly match; note these constants are NOT in IntegrationTestEnvironment (they live inline in ResolveLiveMxAccessSecuredCredentials), which is an internal code organisation matter not a doc error
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 10–16
CLAIM / "FakeWorkerHarness in src/ZB.MOM.WW.MxGateway.Tests/Gateway/Workers/Fakes/ … uses the same WorkerFrameReader, WorkerFrameWriter, and WorkerEnvelope contract"
CLAIM_TYPE / path, term
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Gateway/Workers/Fakes/FakeWorkerHarness.cs:55 (CreateConnectedPairAsync) and :90 (ConnectToGatewayPipeAsync) confirm both methods exist
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 22–26 CLAIM / FakeWorkerHarness scripts: WorkerHello, WorkerReady, command replies, ordered WorkerEvent frames, WorkerHeartbeat frames, WorkerFault frames, shutdown acknowledgements, malformed payloads, oversized frame headers, slow/hung workers CLAIM_TYPE / behavior-rule VERDICT / accurate EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Gateway/Workers/Fakes/FakeWorkerHarness.cs:208 (SendWorkerHelloAsync), :233 (SendWorkerReadyAsync), :317 (WorkerEvent), :329 (WorkerFault), :353 (SendHeartbeatAsync), :373 (shutdown ack), :394 (malformed payload), :412 (oversized frame header) CODE_AREA / test.cmd SEVERITY / low PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 109–113
CLAIM / "src/ZB.MOM.WW.MxGateway.Worker.Tests/Probes/ partitions runtime probes … ZB.MOM.WW.MxGateway.Worker.Tests.Probes namespace so a discovery filter … can target or exclude them"
CLAIM_TYPE / path, term
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Worker.Tests/Probes/ contains AlarmsLiveSmokeTests.cs, AlarmClientWmProbeTests.cs, WnWrapConsumerProbeTests.cs; namespace confirmed at AlarmsLiveSmokeTests.cs:9
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 118–131
CLAIM / Three probes: AlarmsLiveSmokeTests, AlarmClientWmProbeTests, WnWrapConsumerProbeTests, all [Fact(Skip = "...")] by default
CLAIM_TYPE / term
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Worker.Tests/Probes/AlarmsLiveSmokeTests.cs:47 ([Fact(Skip = "Live dev-rig smoke test …")]); all three classes confirmed in directory listing
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 139–143
CLAIM / "GalaxyRepositoryLiveTests in src/ZB.MOM.WW.MxGateway.IntegrationTests/Galaxy/ … skipped unless MXGATEWAY_RUN_LIVE_GALAXY_TESTS=1"
CLAIM_TYPE / path, config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/Galaxy/GalaxyRepositoryLiveTests.cs:6; src/ZB.MOM.WW.MxGateway.IntegrationTests/Galaxy/LiveGalaxyRepositoryFactAttribute.cs:9 ("MXGATEWAY_RUN_LIVE_GALAXY_TESTS")
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 145–148
CLAIM / GalaxyRepositoryLiveTests covers TestConnectionAsync, GetLastDeployTimeAsync, GetHierarchyAsync, GetAttributesAsync; hierarchy/attributes assert non-empty
CLAIM_TYPE / term
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/Galaxy/GalaxyRepositoryLiveTests.cs:10 (TestConnection), :20 (GetLastDeployTime), :31 (GetHierarchy, Assert.NotEmpty), :50 (GetAttributes, Assert.NotEmpty)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 154
CLAIM / Galaxy live tests run: dotnet test src/ZB.MOM.WW.MxGateway.IntegrationTests/ZB.MOM.WW.MxGateway.IntegrationTests.csproj --filter FullyQualifiedName~GalaxyRepositoryLiveTests
CLAIM_TYPE / command, path
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/ZB.MOM.WW.MxGateway.IntegrationTests.csproj exists; class GalaxyRepositoryLiveTests at Galaxy/GalaxyRepositoryLiveTests.cs:7
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 161
CLAIM / MXGATEWAY_LIVE_GALAXY_CONN default: Server=localhost;Database=ZB;Integrated Security=True;TrustServerCertificate=True;Encrypt=False;
CLAIM_TYPE / config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Server/Galaxy/GalaxyRepositoryOptions.cs:16–17 — exact string match; LiveGalaxyRepositoryFactAttribute.cs:32 falls back to this constant
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 168–199
CLAIM / "GalaxyFilterInputSafetyTests in src/ZB.MOM.WW.MxGateway.Tests/Galaxy/" exercises GalaxyGlobMatcher and GalaxyHierarchyProjector with described adversarial inputs; GalaxyGlobMatcher applies a 100 ms regex timeout
CLAIM_TYPE / path, term, behavior-rule
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Galaxy/GalaxyFilterInputSafetyTests.cs:33 (class), :60–91 (adversarial cases); src/ZB.MOM.WW.MxGateway.Server/Galaxy/GalaxyGlobMatcher.cs:69 (TimeSpan.FromMilliseconds(100))
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 172–174
CLAIM / "re-frames the original 'Galaxy SQL injection' concern (Tests-002 in code-reviews/Tests/findings.md)"
CLAIM_TYPE / cross-ref
VERDICT / accurate
EVIDENCE / code-reviews/Tests/findings.md exists; src/ZB.MOM.WW.MxGateway.Tests/Galaxy/GalaxyFilterInputSafetyTests.cs:16 references finding Tests-002
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 174–178
CLAIM / GalaxyRepository issues only four constant SQL statements: HierarchySql, AttributesSql, SELECT 1, SELECT time_of_last_deploy FROM galaxy
CLAIM_TYPE / behavior-rule
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Server/Galaxy/GalaxyRepository.cs:26 (SELECT 1), :40 (SELECT time_of_last_deploy FROM galaxy), :117 (HierarchySql), :176 (AttributesSql)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 203–206
CLAIM / "DashboardLdapLiveTests in src/ZB.MOM.WW.MxGateway.IntegrationTests/ … skipped unless MXGATEWAY_RUN_LIVE_LDAP_TESTS=1"
CLAIM_TYPE / path, config-key
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/DashboardLdapLiveTests.cs:14; LiveLdapFactAttribute.cs:5 ("MXGATEWAY_RUN_LIVE_LDAP_TESTS")
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 230
CLAIM / LDAP live tests run: dotnet test src/ZB.MOM.WW.MxGateway.IntegrationTests/ZB.MOM.WW.MxGateway.IntegrationTests.csproj --filter FullyQualifiedName~DashboardLdapLiveTests
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/DashboardLdapLiveTests.cs:14 — class name matches filter
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 237–243
CLAIM / scripts/discover-testmachine-tags.ps1 queries TestMachine_001–TestMachine_020 for attributes: ProtectedValue, TestChangingInt, TestBoolArray, TestIntArray, TestDateTimeArray, TestStringArray
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / scripts/discover-testmachine-tags.ps1:5–11 — param $Attributes default matches exactly
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 370–372
CLAIM / Cross-language smoke matrix filter: dotnet test src/ZB.MOM.WW.MxGateway.Tests/ZB.MOM.WW.MxGateway.Tests.csproj --filter FullyQualifiedName~CrossLanguageSmokeMatrixTests
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Contracts/CrossLanguageSmokeMatrixTests.cs:5 — class name matches
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 374–378
CLAIM / Parity fixture matrix filter: dotnet test src/ZB.MOM.WW.MxGateway.Tests/ZB.MOM.WW.MxGateway.Tests.csproj --filter FullyQualifiedName~ParityFixtureMatrixTests
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Contracts/ParityFixtureMatrixTests.cs:6 — class name matches
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / 380–390
CLAIM / Fake worker test filters: FakeWorkerHarnessTests, SessionWorkerClientFactoryFakeWorkerTests, GatewayEndToEndFakeWorkerSmokeTests, WorkerClientTests all in the main tests project; WorkerPipeSessionTests in Worker.Tests with -p:Platform=x86
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / FakeWorkerHarnessTests.cs:9, SessionWorkerClientFactoryFakeWorkerTests.cs:13, GatewayEndToEndFakeWorkerSmokeTests.cs:19, WorkerClientTests.cs:11; src/ZB.MOM.WW.MxGateway.Worker.Tests/Ipc/WorkerPipeSessionTests.cs:17; Worker.Tests.csproj:6 (<PlatformTarget>x86</PlatformTarget>)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ClientBehaviorFixtures.md / 8–11
CLAIM / "The fixture manifest is clients/proto/fixtures/behavior/manifest.json. clients/proto/proto-inputs.json references the fixture root through behaviorFixtureRoot"
CLAIM_TYPE / path
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/behavior/manifest.json exists; clients/proto/proto-inputs.json:23 ("behaviorFixtureRoot": "clients/proto/fixtures/behavior")
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ClientBehaviorFixtures.md / 31–36
CLAIM / Command reply fixtures in clients/proto/fixtures/behavior/command-replies/ parsing as mxaccess_gateway.v1.MxCommandReply
CLAIM_TYPE / path
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/behavior/command-replies/register.ok.reply.json and write.mxaccess-failure.reply.json exist
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ClientBehaviorFixtures.md / 48–60
CLAIM / Event stream fixtures in clients/proto/fixtures/behavior/event-streams/; event families: OnDataChange, OnWriteComplete, OperationComplete, OnBufferedDataChange
CLAIM_TYPE / path, term
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/behavior/event-streams/session-event-stream.json exists
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ClientBehaviorFixtures.md / 94–96
CLAIM / Validation: powershell -ExecutionPolicy Bypass -File scripts/validate-client-behavior-fixtures.ps1; "The script runs the focused C# contract tests that parse all protobuf JSON fixtures"
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / scripts/validate-client-behavior-fixtures.ps1:10–15 — runs dotnet test on ZB.MOM.WW.MxGateway.Tests.csproj with filter ClientBehaviorFixtureTests; src/ZB.MOM.WW.MxGateway.Tests/Contracts/ClientBehaviorFixtureTests.cs:11 class exists
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ParityFixtureMatrix.md / 8–11
CLAIM / "The matrix lives in clients/proto/fixtures/parity/parity-fixture-matrix.json. It references the local MXAccess capture set under C:/Users/dohertj2/Desktop/mxaccess/captures"
CLAIM_TYPE / path
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/parity/parity-fixture-matrix.json exists; host-specific path is unverifiable from this repo
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ParityFixtureMatrix.md / 37–40
CLAIM / "WriteSecured remains a documented gap because the current captures show 0x80004021 before MXAccess emits a value-bearing write body. OperationComplete and public OnBufferedDataChange batches also remain documented gaps"
CLAIM_TYPE / behavior-rule
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/parity/parity-fixture-matrix.json:280–291 (WriteSecured documented_gap), :369 (OperationComplete documented_gap), :382 (OnBufferedDataChange documented_gap)
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ParityFixtureMatrix.md / 91
CLAIM / Validation: dotnet test src/ZB.MOM.WW.MxGateway.Tests/ZB.MOM.WW.MxGateway.Tests.csproj --filter FullyQualifiedName~ParityFixtureMatrixTests
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Contracts/ParityFixtureMatrixTests.cs:6 — class name matches
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 8–9
CLAIM / "The matrix lives in clients/proto/fixtures/smoke/cross-language-smoke-matrix.json"
CLAIM_TYPE / path
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/smoke/cross-language-smoke-matrix.json exists
CODE_AREA / test.matrix
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 38–39
CLAIM / Integration gate: $env:MXGATEWAY_INTEGRATION = "1"
CLAIM_TYPE / config-key
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/smoke/cross-language-smoke-matrix.json:6 ("variable": "MXGATEWAY_INTEGRATION"); src/ZB.MOM.WW.MxGateway.Tests/Contracts/CrossLanguageSmokeMatrixTests.cs:18 asserts this exact value
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 43–49
CLAIM / Shared inputs table: MXGATEWAY_ENDPOINT (default localhost:5000), MXGATEWAY_API_KEY, MXGATEWAY_TEST_ITEM (TestChildObject.TestInt), MXGATEWAY_TEST_WRITE_VALUE
CLAIM_TYPE / config-key
VERDICT / accurate
EVIDENCE / clients/proto/fixtures/smoke/cross-language-smoke-matrix.json:10–16 — all four variable names and the localhost:5000 fallback match exactly; CrossLanguageSmokeMatrixTests.cs:23–25 asserts these
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 99–101
CLAIM / Validation: dotnet test src/ZB.MOM.WW.MxGateway.Tests/ZB.MOM.WW.MxGateway.Tests.csproj --filter FullyQualifiedName~CrossLanguageSmokeMatrixTests
CLAIM_TYPE / command
VERDICT / accurate
EVIDENCE / src/ZB.MOM.WW.MxGateway.Tests/Contracts/CrossLanguageSmokeMatrixTests.cs:5 — class name matches
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 58–65
CLAIM / "the Rust CLI, which is pin-only and needs --ca-file or --require-certificate-validation"
CLAIM_TYPE / term
VERDICT / accurate
EVIDENCE / clients/rust/crates/mxgw-cli/src/main.rs:426 (ca_file: Option<PathBuf>), :433 (require_certificate_validation: bool)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / CrossLanguageSmokeMatrix.md / 64
CLAIM / "Python uses trust-on-first-use"
CLAIM_TYPE / behavior-rule
VERDICT / accurate
EVIDENCE / clients/python/tests/test_tls.py:114 (test_default_tls_connects_via_tofu) and :5 (doc string confirms TOFU default)
CODE_AREA / test.cmd
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ToolchainLinks.md / 61
CLAIM / "Go | 1.26.2 windows/amd64"
CLAIM_TYPE / version
VERDICT / unverifiable
EVIDENCE / clients/go/go.mod:3 specifies go 1.26 (minimum requirement); ToolchainLinks records the installed binary version (1.26.2) which is a host-specific measurement not assertable from the repo. The go.mod minimum (1.26) is consistent with the stated installed version (1.26.2). Mark unverifiable — host install path.
CODE_AREA / test.toolchain
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ToolchainLinks.md / 84–86
CLAIM / "rustc | 1.95.0" and "cargo | 1.95.0"
CLAIM_TYPE / version
VERDICT / unverifiable
EVIDENCE / clients/rust/Cargo.toml:4 — edition 2021; no rust-version field pins a minimum; host install version is not assertable from the repo.
CODE_AREA / test.toolchain
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ToolchainLinks.md / 107–113
CLAIM / Python packages table: grpcio==1.80.0, grpcio-tools==1.80.0, protobuf==6.33.6, pytest==9.0.3, pytest-asyncio==1.3.0, click==8.3.3, typer==0.25.0
CLAIM_TYPE / version
VERDICT / unverifiable
EVIDENCE / clients/python/pyproject.toml:42 specifies "pytest-asyncio>=1.3,<2" (range constraint, not a pinned version); the == version pins in ToolchainLinks reflect the installed state of the host machine at time of writing, not a locked requirement file committed to the repo. Internally consistent for their stated purpose (documenting installed versions).
CODE_AREA / test.toolchain
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / ToolchainLinks.md / 123
CLAIM / "Gradle | 9.4.1 | C:\Tools\gradle-9.4.1\bin\gradle.bat"
CLAIM_TYPE / version
VERDICT / unverifiable
EVIDENCE / clients/java/settings.gradle:23 — no Gradle wrapper or toolchain version constraint committed. Host-specific install; unverifiable from the repo.
CODE_AREA / test.toolchain
SEVERITY / low
PROPOSED_FIX / flag only
DOC / LINES / GatewayTesting.md / (gap)
CLAIM / (undocumented) IntegrationTestEnvironment.ResolveRepositoryRoot uses a parent-walk that accepts either .git marker or *.sln/*.slnx files, with an optional stopBoundary parameter added for test isolation (IntegrationTests-025). No prose in GatewayTesting.md explains this behaviour or what to do when the walk fails.
CLAIM_TYPE / behavior-rule
VERDICT / gap
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/IntegrationTestEnvironment.cs:100–157 — ResolveRepositoryRoot with stopBoundary, throws InvalidOperationException on failure with actionable message. Gap: the doc mentions only MXGATEWAY_LIVE_MXACCESS_WORKER_EXE as an escape hatch; the error message itself (line 155) explains what to do, but the docs omit the root-not-found failure mode.
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / Add a short note under "Live MXAccess Smoke" explaining that if the worker path resolver cannot locate the repository root it throws with a descriptive message; set MXGATEWAY_LIVE_MXACCESS_WORKER_EXE to bypass.
DOC / LINES / GatewayTesting.md / (gap)
CLAIM / (undocumented) LiveGalaxyRepositoryFactAttribute exposes MXGATEWAY_LIVE_GALAXY_CONN as its own constant (ConnectionStringVariableName) separate from IntegrationTestEnvironment. This is not the same pattern as the MXAccess variables (which are centralised in IntegrationTestEnvironment). A developer running from CLAUDE.md's test table might look for this constant in the wrong class.
CLAIM_TYPE / config-key
VERDICT / gap
EVIDENCE / src/ZB.MOM.WW.MxGateway.IntegrationTests/Galaxy/LiveGalaxyRepositoryFactAttribute.cs:11 — ConnectionStringVariableName lives here, not in IntegrationTestEnvironment
CODE_AREA / test.envgate
SEVERITY / low
PROPOSED_FIX / flag only — the table in GatewayTesting.md correctly names the variable; the inconsistent home is a code-organisation note not a doc error.
Summary
Verdict counts
| Verdict | Count |
|---|---|
| accurate | 26 |
| wrong | 2 |
| stale | 0 |
| unverifiable | 4 |
| gap | 2 |
Severity counts
| Severity | Count |
|---|---|
| high | 2 |
| medium | 0 |
| low | 30 |
High-severity findings
-
GatewayTesting.md line 323 — wrong Gradle task name: The prose says the e2e script installs the Java CLI via
gradle :mxgateway-cli:installDist, but the script actually uses:zb-mom-ww-mxgateway-cli:installDist(matching the actual Gradle subproject namezb-mom-ww-mxgateway-cliinclients/java/settings.gradle). A developer copying the documented command would get a Gradle "task not found" error. -
clients/proto/fixtures/smoke/cross-language-smoke-matrix.json— wrong Java Gradle task in all Java command entries: Every Java command in the smoke fixture usesgradle :mxgateway-cli:runbut the Gradle subproject is named:zb-mom-ww-mxgateway-cli. Running any Java smoke command from the fixture verbatim would fail. The unit tests that validate the matrix shape (CrossLanguageSmokeMatrixTests) do not check the literal Gradle task name, so this error passes CI undetected.