Files
romanett 1fb1134974 Tests: scope MeterListeners to the meter under test (fix flaky ClientBaseTests metrics test) (#4708)
## Problem

`ClientBaseTests.ActivityTraceFlags_Metrics_ShouldRecordMetricsOnly`
failed intermittently in full-suite runs:

```
Expected: "opc.ua.client.request.duration"
But was:  "opc.ua.channel.reconnect.duration"
```

`TelemetryContextBase.CreateMeter()` returns a new `Meter` per call,
named after the calling assembly, so `ClientBase`'s meter and
`ClientChannelManagerMetrics`' meter are both named `Opc.Ua.Core`.
`TestMeterListener` enabled every instrument whose `Meter.Name` matched,
so reconnect-duration measurements from `[Parallelizable]` channel
manager fixtures were recorded and could precede the request duration.

## Fix (test-only)

- `ClientBaseTests.TestMeterListener`: enable instruments only when
`ReferenceEquals(instrument.Meter, meter)`, i.e. the meter instance the
client under test created. Assertions unchanged.
- `CryptoProviderModelTests.AuditorPublishesAProviderMetric`: same flaw
— it enabled every `opc.ua.crypto*` instrument process-wide (fixture is
`ParallelScope.All`), so another auditor's uncertified gauge could
overwrite the observed count. Now scoped to the auditor's own meter
(read via reflection, as `ClientBaseTests` already does for
`ClientBase`).

Other `MeterListener` users reviewed and left as-is: `NodeCacheTests` /
`AdapterMetricsTests` are non-parallel fixtures; channel manager
listeners only assert existence and filter by endpoint tag.

## Verification

- `ClientBaseTests` + `CryptoProviderModelTests`: 4× consecutive, 25/25.
- `FullyQualifiedName~Opc.Ua.Core.Tests.Stack` (net10.0): 2 clean
passes, 3548 passed / 80 skipped. One attempt hung in unrelated
`ClientChannelManagerManagedTests` async tests
(`ReconnectAsyncNotifiesAttachedParticipantsAsync` /
`ReleasingOneLeaseKeepsChannelAliveForOtherAsync`) and was rerun — a
separate intermittent hang.
- net48 build of `Opc.Ua.Core.Tests`: 0 warnings, 0 errors; `dotnet
format whitespace` clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:07:46 +02:00
..