Files
lmxopcua/tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests/README.md
Joseph Doherty b0a2bb037d test(integration): F21 — docker-compose + env-driven SQL/LDAP harness mode
Adds a real-infra mode for the integration test harness alongside the default
in-memory mode. Drops the previously-untested code paths (EF SqlServer
behaviors, real LDAP bind) under env-var control without breaking the
zero-infra default that CI runs.

- docker-compose.yml — minimal SQL 2022 (14331) + OpenLDAP (3894) stack
  (ports chosen to coexist with docker-dev/ on 14330/3893)
- HarnessMode record reads OTOPCUA_HARNESS_USE_SQL=1 / USE_LDAP=1 from env
- SQL mode: per-harness unique DB OtOpcUa_Harness_{guid}, EnsureCreated
  at startup, EnsureDeleted on dispose (best-effort)
- LDAP mode: drops StubLdapAuthService and configures real LdapAuthService
  against the compose'd OpenLDAP via Authentication:Ldap:* config keys
- Microsoft.EntityFrameworkCore.SqlServer added to the test project
- README documents both modes + the macOS no-Docker caveat

Default in-memory mode unchanged — all 9 existing tests still pass.
2026-05-26 07:25:16 -04:00

49 lines
2.0 KiB
Markdown

# ZB.MOM.WW.OtOpcUa.Host.IntegrationTests
Two-node Akka cluster integration tests on top of `TwoNodeClusterHarness`.
## Default mode (no infra required)
```bash
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:
```bash
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-latest` on `localhost:14331`
- Each `TwoNodeClusterHarness.StartAsync()` creates a unique database
`OtOpcUa_Harness_{guid}` via `Database.EnsureCreatedAsync()` and drops it on
`DisposeAsync()` (best-effort).
- Port `14331` chosen to avoid colliding with the `docker-dev/` fleet (which uses `14330`).
### LDAP mode (`OTOPCUA_HARNESS_USE_LDAP=1`)
- Container: `bitnami/openldap:2.6` on `localhost:3894`
- Users `alice` / `alice123` and `bob` / `bob123`, all under `ou=FleetAdmin`.
- Port `3894` chosen to avoid colliding with the `docker-dev/` fleet (which uses `3893`).
## 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.