chore(infra): remove LmxFakeProxy — replaced by real LmxProxy v2 instances on windev
LmxFakeProxy is no longer needed now that two real LmxProxy v2 instances are available for testing. Added remote test infra section to test_infra.md documenting the windev instances. Removed tagsim (never committed).
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Test Infrastructure
|
||||
|
||||
This document describes the local Docker-based test infrastructure for ScadaLink development. Eight services provide the external dependencies needed to run and test the system locally. The first eight run in `infra/docker-compose.yml`; Traefik runs alongside the cluster nodes in `docker/docker-compose.yml`.
|
||||
This document describes the local Docker-based test infrastructure for ScadaLink development. Seven services provide the external dependencies needed to run and test the system locally. The first seven run in `infra/docker-compose.yml`; Traefik runs alongside the cluster nodes in `docker/docker-compose.yml`.
|
||||
|
||||
## Services
|
||||
|
||||
@@ -12,7 +12,6 @@ This document describes the local Docker-based test infrastructure for ScadaLink
|
||||
| MS SQL 2022 | `mcr.microsoft.com/mssql/server:2022-latest` | 1433 | `infra/mssql/setup.sql` | `infra/` |
|
||||
| SMTP (Mailpit) | `axllent/mailpit:latest` | 1025 (SMTP), 8025 (web) | Environment vars | `infra/` |
|
||||
| REST API (Flask) | Custom build (`infra/restapi/Dockerfile`) | 5200 | `infra/restapi/app.py` | `infra/` |
|
||||
| LmxFakeProxy | Custom build (`infra/lmxfakeproxy/Dockerfile`) | 50051 (gRPC) | Environment vars | `infra/` |
|
||||
| Playwright | `mcr.microsoft.com/playwright:v1.58.2-noble` | 3000 (WebSocket) | Command args | `infra/` |
|
||||
| Traefik LB | `traefik:v3.4` | 9000 (proxy), 8180 (dashboard) | `docker/traefik/` | `docker/` |
|
||||
|
||||
@@ -44,10 +43,27 @@ Each service has a dedicated document with configuration details, verification s
|
||||
- [test_infra_db.md](test_infra_db.md) — MS SQL 2022 database
|
||||
- [test_infra_smtp.md](test_infra_smtp.md) — SMTP test server (Mailpit)
|
||||
- [test_infra_restapi.md](test_infra_restapi.md) — REST API test server (Flask)
|
||||
- [test_infra_lmxfakeproxy.md](test_infra_lmxfakeproxy.md) — LmxProxy fake server (OPC UA bridge)
|
||||
- [test_infra_playwright.md](test_infra_playwright.md) — Playwright browser server (Central UI testing)
|
||||
- Traefik LB — see `docker/README.md` and `docker/traefik/` (runs with the cluster, not in `infra/`)
|
||||
|
||||
## Remote Test Infrastructure
|
||||
|
||||
In addition to the local Docker services, the following remote services are available for testing against real AVEVA System Platform hardware.
|
||||
|
||||
### LmxProxy v2 (windev — 10.100.0.48)
|
||||
|
||||
Two LmxProxy v2 instances run as Windows services on windev, both connected to the same AVEVA System Platform via MxAccess COM. These provide the primary/backup pair for Data Connection Layer testing.
|
||||
|
||||
| | Instance A | Instance B |
|
||||
|---|---|---|
|
||||
| **gRPC Endpoint** | `10.100.0.48:50100` | `10.100.0.48:50101` |
|
||||
| **HTTP Status** | `http://10.100.0.48:8081` | `http://10.100.0.48:8082` |
|
||||
| **Service Name** | `ZB.MOM.WW.LmxProxy.Host.V2` | `ZB.MOM.WW.LmxProxy.Host.V2B` |
|
||||
|
||||
API key (ReadWrite): `c4559c7c6acc60a997135c1381162e3c30f4572ece78dd933c1a626e6fd933b4`
|
||||
|
||||
Full details: [`lmxproxy/instances_config.md`](../../lmxproxy/instances_config.md)
|
||||
|
||||
## Connection Strings
|
||||
|
||||
For use in `appsettings.Development.json`:
|
||||
@@ -117,7 +133,6 @@ infra/
|
||||
opcua/nodes.json # Custom OPC UA tag definitions
|
||||
restapi/app.py # Flask REST API server
|
||||
restapi/Dockerfile # REST API container build
|
||||
lmxfakeproxy/ # .NET gRPC proxy bridging LmxProxy protocol to OPC UA
|
||||
tools/ # Python CLI tools (opcua, ldap, mssql, smtp, restapi)
|
||||
README.md # Quick-start for the infra folder
|
||||
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
# Test Infrastructure: LmxFakeProxy
|
||||
|
||||
## Overview
|
||||
|
||||
LmxFakeProxy is a .NET gRPC server that implements the `scada.ScadaService` proto (full parity with the real LmxProxy server) but bridges to the OPC UA test server instead of System Platform MXAccess. This enables end-to-end testing of `RealLmxProxyClient` and the LmxProxy DCL adapter.
|
||||
|
||||
## Image & Ports
|
||||
|
||||
- **Image**: Custom build (`infra/lmxfakeproxy/Dockerfile`)
|
||||
- **gRPC endpoint**: `localhost:50051`
|
||||
|
||||
## Configuration
|
||||
|
||||
| Environment Variable | Default | Description |
|
||||
|---------------------|---------|-------------|
|
||||
| `PORT` | `50051` | gRPC listen port |
|
||||
| `OPC_ENDPOINT` | `opc.tcp://localhost:50000` | Backend OPC UA server |
|
||||
| `OPC_PREFIX` | `ns=3;s=` | Prefix prepended to LMX tags to form OPC UA NodeIds |
|
||||
| `API_KEY` | *(none)* | If set, enforces API key on all gRPC calls |
|
||||
|
||||
## Tag Address Mapping
|
||||
|
||||
LMX-style flat addresses are mapped to OPC UA NodeIds by prepending the configured prefix:
|
||||
|
||||
| LMX Tag | OPC UA NodeId |
|
||||
|---------|--------------|
|
||||
| `Motor.Speed` | `ns=3;s=Motor.Speed` |
|
||||
| `Pump.FlowRate` | `ns=3;s=Pump.FlowRate` |
|
||||
| `Tank.Level` | `ns=3;s=Tank.Level` |
|
||||
|
||||
## Supported RPCs
|
||||
|
||||
Full parity with the `scada.ScadaService` proto:
|
||||
|
||||
- **Connect / Disconnect / GetConnectionState** — Session management
|
||||
- **Read / ReadBatch** — Read tag values via OPC UA
|
||||
- **Write / WriteBatch / WriteBatchAndWait** — Write values via OPC UA
|
||||
- **Subscribe** — Server-streaming subscriptions via OPC UA MonitoredItems
|
||||
- **CheckApiKey** — API key validation
|
||||
|
||||
## Verification
|
||||
|
||||
1. Ensure the OPC UA test server is running:
|
||||
```bash
|
||||
docker ps --filter name=scadalink-opcua
|
||||
```
|
||||
|
||||
2. Start the fake proxy:
|
||||
```bash
|
||||
docker compose up -d lmxfakeproxy
|
||||
```
|
||||
|
||||
3. Check logs:
|
||||
```bash
|
||||
docker logs scadalink-lmxfakeproxy
|
||||
```
|
||||
|
||||
4. Test with the ScadaLink CLI or a gRPC client.
|
||||
|
||||
## Running Standalone (without Docker)
|
||||
|
||||
```bash
|
||||
cd infra/lmxfakeproxy
|
||||
dotnet run -- --opc-endpoint opc.tcp://localhost:50000 --opc-prefix "ns=3;s="
|
||||
```
|
||||
|
||||
With API key enforcement:
|
||||
```bash
|
||||
dotnet run -- --api-key my-secret-key
|
||||
```
|
||||
|
||||
## Relevance to ScadaLink Components
|
||||
|
||||
- **Data Connection Layer** — Test `RealLmxProxyClient` and `LmxProxyDataConnection` against real OPC UA data
|
||||
- **Site Runtime** — Deploy instances with LmxProxy data connections pointing at this server
|
||||
- **Integration Tests** — End-to-end tests of the LmxProxy protocol path
|
||||
Reference in New Issue
Block a user