Stand up local dev infrastructure (OPC UA, LDAP, MS SQL) with Docker Compose, Python CLI tools for service interaction, and teardown script. Fix GLAuth config mount, OPC PLC node format, and document actual DN/namespace behavior discovered during testing. Resolve Q1-Q8,Q10: .NET 10, Akka.NET 1.5.x, monorepo with slnx, appsettings JWT, Windows Server 2022 site target.
88 lines
2.9 KiB
Markdown
88 lines
2.9 KiB
Markdown
# Test Infrastructure
|
|
|
|
This document describes the local Docker-based test infrastructure for ScadaLink development. Three services provide the external dependencies needed to run and test the system locally.
|
|
|
|
## Services
|
|
|
|
| Service | Image | Port(s) | Config |
|
|
|---------|-------|---------|--------|
|
|
| OPC UA Server | `mcr.microsoft.com/iotedge/opc-plc:latest` | 50000 (OPC UA), 8080 (web) | `infra/opcua/nodes.json` |
|
|
| LDAP Server | `glauth/glauth:latest` | 3893 | `infra/glauth/config.toml` |
|
|
| MS SQL 2022 | `mcr.microsoft.com/mssql/server:2022-latest` | 1433 | `infra/mssql/setup.sql` |
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
cd infra
|
|
docker compose up -d
|
|
```
|
|
|
|
After the first startup, run the SQL setup script to create databases and the application user:
|
|
|
|
```bash
|
|
docker exec -i scadalink-mssql /opt/mssql-tools18/bin/sqlcmd \
|
|
-S localhost -U sa -P 'ScadaLink_Dev1!' -C \
|
|
-i /docker-entrypoint-initdb.d/setup.sql
|
|
```
|
|
|
|
## Per-Service Documentation
|
|
|
|
Each service has a dedicated document with configuration details, verification steps, and troubleshooting:
|
|
|
|
- [test_infra_opcua.md](test_infra_opcua.md) — OPC UA test server (Azure IoT OPC PLC)
|
|
- [test_infra_ldap.md](test_infra_ldap.md) — LDAP test server (GLAuth)
|
|
- [test_infra_db.md](test_infra_db.md) — MS SQL 2022 database
|
|
|
|
## Connection Strings
|
|
|
|
For use in `appsettings.Development.json`:
|
|
|
|
```json
|
|
{
|
|
"ConnectionStrings": {
|
|
"ScadaLinkConfig": "Server=localhost,1433;Database=ScadaLinkConfig;User Id=scadalink_app;Password=ScadaLink_Dev1!;TrustServerCertificate=true",
|
|
"ScadaLinkMachineData": "Server=localhost,1433;Database=ScadaLinkMachineData;User Id=scadalink_app;Password=ScadaLink_Dev1!;TrustServerCertificate=true"
|
|
},
|
|
"Ldap": {
|
|
"Server": "localhost",
|
|
"Port": 3893,
|
|
"BaseDN": "dc=scadalink,dc=local",
|
|
"UseSsl": false
|
|
},
|
|
"OpcUa": {
|
|
"EndpointUrl": "opc.tcp://localhost:50000"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Stopping & Teardown
|
|
|
|
```bash
|
|
cd infra
|
|
docker compose down # stop containers, preserve SQL data volume
|
|
docker compose stop opcua # stop a single service (also: ldap, mssql)
|
|
```
|
|
|
|
**Full teardown** (removes volumes, optionally images and venv):
|
|
```bash
|
|
cd infra
|
|
./teardown.sh # stop containers + delete SQL data volume
|
|
./teardown.sh --images # also remove downloaded Docker images
|
|
./teardown.sh --all # also remove the Python venv
|
|
```
|
|
|
|
After a full teardown, the next `docker compose up -d` starts fresh — re-run the SQL setup script.
|
|
|
|
## Files
|
|
|
|
```
|
|
infra/
|
|
docker-compose.yml # All three services
|
|
teardown.sh # Teardown script (volumes, images, venv)
|
|
glauth/config.toml # LDAP users and groups
|
|
mssql/setup.sql # Database and user creation
|
|
opcua/nodes.json # Custom OPC UA tag definitions
|
|
tools/ # Python CLI tools (opcua, ldap, mssql)
|
|
README.md # Quick-start for the infra folder
|
|
```
|