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.
49 lines
2.0 KiB
Markdown
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.
|