uanetstandard-test-suite · v1.2.x
Docs · Getting started

Installation

Bring up the whole suite with one command. Prerequisites, what happens on first start, where certificates land.

Prerequisites

  • Docker with Compose v2 (docker compose ...).
  • Free ports on the host: 4840-4849 (TCP), 4851 (TCP), 14850 (UDP). The discovery server uses 4844 with no resource path.
  • ~500 MB of disk for the image + generated certs.

No language toolchain needed on the host — everything runs in containers.

One command

bash terminal
docker compose up -d

That brings up (per docker-compose.yml):

  • 1 certificate-generator init container (certs-generator, exits with Completed once the cert tree is ready).
  • 10 classic test servers (opcua-no-security, opcua-userpass, opcua-certificate, opcua-all-security, opcua-discovery, opcua-auto-accept, opcua-sign-only, opcua-legacy, opcua-ecc-nist, opcua-ecc-brainpool — host TCP ports 4840-4849).
  • 1 Security Key Service (opcua-sks, port 4851).
  • 1 PubSub publisher (opcua-pubsub) + 1 socat relay (opcua-pubsub-relay, UDP 14850 on the host).

That is 14 compose services total, 13 of which keep running after certs-generator completes.

First start takes 30-60 seconds — most of that is the cert generator producing the CA, server, client, self-signed, and expired certificate sets. Subsequent starts skip cert generation.

What lands on disk

The compose file mounts two host directories:

Host path What's in it Mount mode
./certs/ Generated certificates (CA, server, client, self-signed, expired, trust dirs) rw
./config/ users.json for username/password auth ro

After first start you'll see, on the host:

text filesystem
certs/
├── ca/
│   ├── ca-cert.pem
│   ├── ca-key.pem
│   └── ca-cert.der
├── server/
│   ├── cert.pem  cert.der  key.pem  key.der  server.pfx
├── client/
│   ├── cert.pem  cert.der  key.pem  key.der  client.pfx
├── self-signed/
├── expired/
├── trusted/
└── pki/
    ├── trusted/   ├── issuers/   └── rejected/

config/
└── users.json

The client/* and self-signed/* files are what your tests present as a client identity — see Authentication · Certificate authentication.

Verify it's up

bash terminal
docker compose ps

You should see 13 services with state running (10 classic servers + SKS + PubSub publisher + PubSub relay) and certs-generator reported as Completed — that's expected, it exits after generating. Only opcua-no-security has a Docker healthcheck defined, so it's the only one that will eventually show healthy; the rest just stay at running.

Quick TCP probe:

bash terminal — probe
for port in 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4851; do
  nc -z localhost $port && echo "port $port: OK" || echo "port $port: FAIL"
done

If any port fails, see Troubleshooting.

Stop

bash terminal
docker compose down

Containers stop and are removed. The certs/ directory stays — the next start reuses them.

For a clean slate including certificates:

bash terminal — full reset
docker compose down
rm -rf ./certs
docker compose up -d

Rebuild after source changes

If you've forked the suite and edited C# under src/TestServer/:

bash terminal — rebuild
docker compose build
docker compose up -d

Image source

Both docker-compose.yml and docker-compose.ci.yml build the image from the local Dockerfile (build: .) on every docker compose up --build. The shipped configuration does not consume an OPCUA_SERVER_IMAGE variable. To run against a pre-built registry image, you would need to add a third compose file with image: fields per service. See CI integration · Docker Compose and other CI for the CI-specific differences.

Resource usage

The 11 server processes combined use roughly:

Resource Idle Under load (typical CI run)
RAM 350-500 MB 600-800 MB
CPU < 1% 5-15%
Disk (certs only) ~150 KB

Comfortable on any developer laptop or CI runner.