b3d1a26f38
0.2.0's AddZbSecretsAkkaReplication never bound its own ISecretReplicator: it called AddZbSecrets first, which TryAdds NoOpSecretReplicator, so the package's own TryAdd was silently discarded. Replication published into a no-op sink and no actor was ever spawned - no exception, no log line. Found by the Task 6 wiring work, which is the first code that ever built a container around that extension. Fixed upstream in 0.2.1. Test consequence worth recording: the replication-enabled registration tests previously passed against a plain ActorSystem only BECAUSE of that bug - the no-op never touched Akka. With 0.2.1 they resolve a real replicator, which spawns the actor, whose PreStart needs DistributedPubSub and therefore a joined cluster, so provider-based assertions hang. Standing a real cluster up inside this test assembly was attempted and did not work, so these assertions are now made against the ServiceCollection, which is precisely where the defect lives. Actor creation and convergence remain covered upstream by the library's TwoNodeClusterReplication tests against a genuine 2-node cluster. 7 registration tests pass in 23ms. Full solution builds 0 errors; no warnings originate from these files.
ZB.MOM.WW.OtOpcUa.Host.IntegrationTests
Two-node Akka cluster integration tests on top of TwoNodeClusterHarness.
Default mode (no infra required)
dotnet test tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests
Uses Microsoft.EntityFrameworkCore.InMemory for ConfigDb and a stub ILdapAuthService that
accepts any username when the password is valid-password. Each harness instance creates a
unique in-memory database scoped to its lifetime. This is the mode CI runs by default.
Real-infra mode (SQL Server + OpenLDAP)
When you need to exercise EF behaviors that diverge between providers (index uniqueness,
RowVersion concurrency, JSON columns, migration application) or a real LDAP bind, bring up
the bundled compose stack and set the env-var switches:
docker compose -f tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests/docker-compose.yml up -d
export OTOPCUA_HARNESS_USE_SQL=1
export OTOPCUA_HARNESS_USE_LDAP=1
dotnet test tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests
docker compose -f tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests/docker-compose.yml down -v
SQL Server mode (OTOPCUA_HARNESS_USE_SQL=1)
- Container:
mcr.microsoft.com/mssql/server:2022-latestonlocalhost:14331 - Each
TwoNodeClusterHarness.StartAsync()creates a unique databaseOtOpcUa_Harness_{guid}viaDatabase.EnsureCreatedAsync()and drops it onDisposeAsync()(best-effort). - Port
14331chosen to avoid colliding with thedocker-dev/fleet (which uses14330).
LDAP mode (OTOPCUA_HARNESS_USE_LDAP=1)
- Container:
bitnami/openldap:2.6onlocalhost:3894 - Users
alice/alice123andbob/bob123, all underou=FleetAdmin. - Port
3894chosen to avoid colliding with thedocker-dev/fleet (which uses3893).
Local-dev caveat
This dev VM (DESKTOP-6JL3KKO) does not run Docker locally. Real-infra mode runs on the
shared Linux Docker host (10.100.0.35) per docs/v2/dev-environment.md, or in CI on Linux.