From 827e90e0daabe32e058e08dd2a253425898a7e7a Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Tue, 17 Feb 2026 19:06:22 +0100 Subject: Replace ClientFindServers with unified Client, use trust store directories Replace the single-purpose ClientFindServers program with a unified Client that supports three operations via CLI: find-servers, get-endpoints, and read-time. This simplifies the architecture by using one client binary with a single config file instead of a monolithic program that did everything in one run. Split the ServerRegister config into separate server and client config files so the LDS-registration credentials are isolated from the server's own settings. The discovery URL moves from config to a CLI argument. Replace repeated trustList config entries with a single trustStore directory path. Each program now points to a directory under certs/trust/ containing .der files, so adding or removing trust is a file-copy operation rather than editing every config file. Add loadTrustStore()/freeTrustStore() to common.c and remove the now-unused configGetAll() from the config parser. Simplify the test matrix from 6 to 4 cases (security and auth are orthogonal, so the full 3x2 matrix is unnecessary). Update run_test.sh to invoke the new Client three times and use port-polling instead of sleep. --- tests/aes128_anon/client_find_servers.conf | 20 ----- tests/aes128_anon/server_lds.conf | 12 --- tests/aes128_anon/server_register.conf | 21 ----- tests/aes128_user/client.conf | 11 +++ tests/aes128_user/client_find_servers.conf | 24 ------ tests/aes128_user/server_lds.conf | 3 +- tests/aes128_user/server_register.conf | 25 ++---- tests/aes128_user/server_register_client.conf | 14 ++++ tests/basic256sha256_anon/client.conf | 9 +++ tests/basic256sha256_anon/client_find_servers.conf | 20 ----- tests/basic256sha256_anon/server_lds.conf | 3 +- tests/basic256sha256_anon/server_register.conf | 19 ++--- .../server_register_client.conf | 12 +++ tests/basic256sha256_user/client_find_servers.conf | 24 ------ tests/basic256sha256_user/server_lds.conf | 14 ---- tests/basic256sha256_user/server_register.conf | 25 ------ tests/none_anon/client.conf | 9 +++ tests/none_anon/client_find_servers.conf | 20 ----- tests/none_anon/server_lds.conf | 3 +- tests/none_anon/server_register.conf | 19 ++--- tests/none_anon/server_register_client.conf | 12 +++ tests/none_user/client.conf | 11 +++ tests/none_user/client_find_servers.conf | 24 ------ tests/none_user/server_lds.conf | 3 +- tests/none_user/server_register.conf | 25 ++---- tests/none_user/server_register_client.conf | 14 ++++ tests/run_test.sh | 94 ++++++++++++++-------- 27 files changed, 180 insertions(+), 310 deletions(-) delete mode 100644 tests/aes128_anon/client_find_servers.conf delete mode 100644 tests/aes128_anon/server_lds.conf delete mode 100644 tests/aes128_anon/server_register.conf create mode 100644 tests/aes128_user/client.conf delete mode 100644 tests/aes128_user/client_find_servers.conf create mode 100644 tests/aes128_user/server_register_client.conf create mode 100644 tests/basic256sha256_anon/client.conf delete mode 100644 tests/basic256sha256_anon/client_find_servers.conf create mode 100644 tests/basic256sha256_anon/server_register_client.conf delete mode 100644 tests/basic256sha256_user/client_find_servers.conf delete mode 100644 tests/basic256sha256_user/server_lds.conf delete mode 100644 tests/basic256sha256_user/server_register.conf create mode 100644 tests/none_anon/client.conf delete mode 100644 tests/none_anon/client_find_servers.conf create mode 100644 tests/none_anon/server_register_client.conf create mode 100644 tests/none_user/client.conf delete mode 100644 tests/none_user/client_find_servers.conf create mode 100644 tests/none_user/server_register_client.conf (limited to 'tests') diff --git a/tests/aes128_anon/client_find_servers.conf b/tests/aes128_anon/client_find_servers.conf deleted file mode 100644 index 2cc096d..0000000 --- a/tests/aes128_anon/client_find_servers.conf +++ /dev/null @@ -1,20 +0,0 @@ -# ClientFindServers — test: aes128_anon - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = SignAndEncrypt -discoverySecurityPolicy = Aes128_Sha256_RsaOaep -discoveryAuthMode = anonymous -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = SignAndEncrypt -serverSecurityPolicy = Aes128_Sha256_RsaOaep -serverAuthMode = anonymous -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/aes128_anon/server_lds.conf b/tests/aes128_anon/server_lds.conf deleted file mode 100644 index e8601d0..0000000 --- a/tests/aes128_anon/server_lds.conf +++ /dev/null @@ -1,12 +0,0 @@ -# ServerLDS — test: aes128_anon - -port = 14840 -applicationUri = urn:bobink.ServerLDS -certificate = certs/ServerLDS_cert.der -privateKey = certs/ServerLDS_key.der -cleanupTimeout = 60 - -authMode = anonymous - -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der diff --git a/tests/aes128_anon/server_register.conf b/tests/aes128_anon/server_register.conf deleted file mode 100644 index 8a8d1d1..0000000 --- a/tests/aes128_anon/server_register.conf +++ /dev/null @@ -1,21 +0,0 @@ -# ServerRegister — test: aes128_anon - -port = 14841 -applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der - -discoveryEndpoint = opc.tcp://localhost:14840 -registerInterval = 10 - -securityMode = SignAndEncrypt -securityPolicy = Aes128_Sha256_RsaOaep - -serverAuthMode = anonymous - -clientAuthMode = anonymous - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der diff --git a/tests/aes128_user/client.conf b/tests/aes128_user/client.conf new file mode 100644 index 0000000..026cd99 --- /dev/null +++ b/tests/aes128_user/client.conf @@ -0,0 +1,11 @@ +# Client — test: aes128_user + +applicationUri = urn:bobink.ClientFindServers +certificate = certs/ClientFindServers_cert.der +privateKey = certs/ClientFindServers_key.der +securityMode = SignAndEncrypt +securityPolicy = Aes128_Sha256_RsaOaep +authMode = user +username = user +password = password +trustStore = certs/trust/client diff --git a/tests/aes128_user/client_find_servers.conf b/tests/aes128_user/client_find_servers.conf deleted file mode 100644 index 4ecff56..0000000 --- a/tests/aes128_user/client_find_servers.conf +++ /dev/null @@ -1,24 +0,0 @@ -# ClientFindServers — test: aes128_user - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = SignAndEncrypt -discoverySecurityPolicy = Aes128_Sha256_RsaOaep -discoveryAuthMode = user -discoveryUsername = user -discoveryPassword = password -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = SignAndEncrypt -serverSecurityPolicy = Aes128_Sha256_RsaOaep -serverAuthMode = user -serverUsername = user -serverPassword = password -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/aes128_user/server_lds.conf b/tests/aes128_user/server_lds.conf index 484512a..c440ea4 100644 --- a/tests/aes128_user/server_lds.conf +++ b/tests/aes128_user/server_lds.conf @@ -10,5 +10,4 @@ authMode = user username = user password = password -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_lds diff --git a/tests/aes128_user/server_register.conf b/tests/aes128_user/server_register.conf index e100129..b0ce271 100644 --- a/tests/aes128_user/server_register.conf +++ b/tests/aes128_user/server_register.conf @@ -1,25 +1,14 @@ -# ServerRegister — test: aes128_user +# ServerRegister server config — test: aes128_user port = 14841 applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der +certificate = certs/ServerRegister_cert.der +privateKey = certs/ServerRegister_key.der -discoveryEndpoint = opc.tcp://localhost:14840 registerInterval = 10 -securityMode = SignAndEncrypt -securityPolicy = Aes128_Sha256_RsaOaep +authMode = user +username = user +password = password -serverAuthMode = user -serverUsername = user -serverPassword = password - -clientAuthMode = user -clientUsername = user -clientPassword = password - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_register diff --git a/tests/aes128_user/server_register_client.conf b/tests/aes128_user/server_register_client.conf new file mode 100644 index 0000000..c919f7e --- /dev/null +++ b/tests/aes128_user/server_register_client.conf @@ -0,0 +1,14 @@ +# ServerRegister client config — test: aes128_user + +applicationUri = urn:bobink.ServerRegister +certificate = certs/ServerRegisterClient_cert.der +privateKey = certs/ServerRegisterClient_key.der + +securityMode = SignAndEncrypt +securityPolicy = Aes128_Sha256_RsaOaep + +authMode = user +username = user +password = password + +trustStore = certs/trust/server_register_client diff --git a/tests/basic256sha256_anon/client.conf b/tests/basic256sha256_anon/client.conf new file mode 100644 index 0000000..e46bb4c --- /dev/null +++ b/tests/basic256sha256_anon/client.conf @@ -0,0 +1,9 @@ +# Client — test: basic256sha256_anon + +applicationUri = urn:bobink.ClientFindServers +certificate = certs/ClientFindServers_cert.der +privateKey = certs/ClientFindServers_key.der +securityMode = SignAndEncrypt +securityPolicy = Basic256Sha256 +authMode = anonymous +trustStore = certs/trust/client diff --git a/tests/basic256sha256_anon/client_find_servers.conf b/tests/basic256sha256_anon/client_find_servers.conf deleted file mode 100644 index 332c3da..0000000 --- a/tests/basic256sha256_anon/client_find_servers.conf +++ /dev/null @@ -1,20 +0,0 @@ -# ClientFindServers — test: basic256sha256_anon - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = SignAndEncrypt -discoverySecurityPolicy = Basic256Sha256 -discoveryAuthMode = anonymous -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = SignAndEncrypt -serverSecurityPolicy = Basic256Sha256 -serverAuthMode = anonymous -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/basic256sha256_anon/server_lds.conf b/tests/basic256sha256_anon/server_lds.conf index 7da2fd6..add5f46 100644 --- a/tests/basic256sha256_anon/server_lds.conf +++ b/tests/basic256sha256_anon/server_lds.conf @@ -8,5 +8,4 @@ cleanupTimeout = 60 authMode = anonymous -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_lds diff --git a/tests/basic256sha256_anon/server_register.conf b/tests/basic256sha256_anon/server_register.conf index 798bf31..a5f904c 100644 --- a/tests/basic256sha256_anon/server_register.conf +++ b/tests/basic256sha256_anon/server_register.conf @@ -1,21 +1,12 @@ -# ServerRegister — test: basic256sha256_anon +# ServerRegister server config — test: basic256sha256_anon port = 14841 applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der +certificate = certs/ServerRegister_cert.der +privateKey = certs/ServerRegister_key.der -discoveryEndpoint = opc.tcp://localhost:14840 registerInterval = 10 -securityMode = SignAndEncrypt -securityPolicy = Basic256Sha256 +authMode = anonymous -serverAuthMode = anonymous - -clientAuthMode = anonymous - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_register diff --git a/tests/basic256sha256_anon/server_register_client.conf b/tests/basic256sha256_anon/server_register_client.conf new file mode 100644 index 0000000..3a80d21 --- /dev/null +++ b/tests/basic256sha256_anon/server_register_client.conf @@ -0,0 +1,12 @@ +# ServerRegister client config — test: basic256sha256_anon + +applicationUri = urn:bobink.ServerRegister +certificate = certs/ServerRegisterClient_cert.der +privateKey = certs/ServerRegisterClient_key.der + +securityMode = SignAndEncrypt +securityPolicy = Basic256Sha256 + +authMode = anonymous + +trustStore = certs/trust/server_register_client diff --git a/tests/basic256sha256_user/client_find_servers.conf b/tests/basic256sha256_user/client_find_servers.conf deleted file mode 100644 index 403dfa4..0000000 --- a/tests/basic256sha256_user/client_find_servers.conf +++ /dev/null @@ -1,24 +0,0 @@ -# ClientFindServers — test: basic256sha256_user - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = SignAndEncrypt -discoverySecurityPolicy = Basic256Sha256 -discoveryAuthMode = user -discoveryUsername = user -discoveryPassword = password -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = SignAndEncrypt -serverSecurityPolicy = Basic256Sha256 -serverAuthMode = user -serverUsername = user -serverPassword = password -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/basic256sha256_user/server_lds.conf b/tests/basic256sha256_user/server_lds.conf deleted file mode 100644 index 6841bb6..0000000 --- a/tests/basic256sha256_user/server_lds.conf +++ /dev/null @@ -1,14 +0,0 @@ -# ServerLDS — test: basic256sha256_user - -port = 14840 -applicationUri = urn:bobink.ServerLDS -certificate = certs/ServerLDS_cert.der -privateKey = certs/ServerLDS_key.der -cleanupTimeout = 60 - -authMode = user -username = user -password = password - -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der diff --git a/tests/basic256sha256_user/server_register.conf b/tests/basic256sha256_user/server_register.conf deleted file mode 100644 index 636edd8..0000000 --- a/tests/basic256sha256_user/server_register.conf +++ /dev/null @@ -1,25 +0,0 @@ -# ServerRegister — test: basic256sha256_user - -port = 14841 -applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der - -discoveryEndpoint = opc.tcp://localhost:14840 -registerInterval = 10 - -securityMode = SignAndEncrypt -securityPolicy = Basic256Sha256 - -serverAuthMode = user -serverUsername = user -serverPassword = password - -clientAuthMode = user -clientUsername = user -clientPassword = password - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der diff --git a/tests/none_anon/client.conf b/tests/none_anon/client.conf new file mode 100644 index 0000000..32eea7c --- /dev/null +++ b/tests/none_anon/client.conf @@ -0,0 +1,9 @@ +# Client — test: none_anon + +applicationUri = urn:bobink.ClientFindServers +certificate = certs/ClientFindServers_cert.der +privateKey = certs/ClientFindServers_key.der +securityMode = None +securityPolicy = None +authMode = anonymous +trustStore = certs/trust/client diff --git a/tests/none_anon/client_find_servers.conf b/tests/none_anon/client_find_servers.conf deleted file mode 100644 index 6ea7d2d..0000000 --- a/tests/none_anon/client_find_servers.conf +++ /dev/null @@ -1,20 +0,0 @@ -# ClientFindServers — test: none_anon - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = None -discoverySecurityPolicy = None -discoveryAuthMode = anonymous -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = None -serverSecurityPolicy = None -serverAuthMode = anonymous -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/none_anon/server_lds.conf b/tests/none_anon/server_lds.conf index 705b51f..cf1ae45 100644 --- a/tests/none_anon/server_lds.conf +++ b/tests/none_anon/server_lds.conf @@ -8,5 +8,4 @@ cleanupTimeout = 60 authMode = anonymous -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_lds diff --git a/tests/none_anon/server_register.conf b/tests/none_anon/server_register.conf index 349b6c7..e89fd59 100644 --- a/tests/none_anon/server_register.conf +++ b/tests/none_anon/server_register.conf @@ -1,21 +1,12 @@ -# ServerRegister — test: none_anon +# ServerRegister server config — test: none_anon port = 14841 applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der +certificate = certs/ServerRegister_cert.der +privateKey = certs/ServerRegister_key.der -discoveryEndpoint = opc.tcp://localhost:14840 registerInterval = 10 -securityMode = None -securityPolicy = None +authMode = anonymous -serverAuthMode = anonymous - -clientAuthMode = anonymous - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_register diff --git a/tests/none_anon/server_register_client.conf b/tests/none_anon/server_register_client.conf new file mode 100644 index 0000000..83bf961 --- /dev/null +++ b/tests/none_anon/server_register_client.conf @@ -0,0 +1,12 @@ +# ServerRegister client config — test: none_anon + +applicationUri = urn:bobink.ServerRegister +certificate = certs/ServerRegisterClient_cert.der +privateKey = certs/ServerRegisterClient_key.der + +securityMode = None +securityPolicy = None + +authMode = anonymous + +trustStore = certs/trust/server_register_client diff --git a/tests/none_user/client.conf b/tests/none_user/client.conf new file mode 100644 index 0000000..18419f0 --- /dev/null +++ b/tests/none_user/client.conf @@ -0,0 +1,11 @@ +# Client — test: none_user + +applicationUri = urn:bobink.ClientFindServers +certificate = certs/ClientFindServers_cert.der +privateKey = certs/ClientFindServers_key.der +securityMode = None +securityPolicy = None +authMode = user +username = user +password = password +trustStore = certs/trust/client diff --git a/tests/none_user/client_find_servers.conf b/tests/none_user/client_find_servers.conf deleted file mode 100644 index b538952..0000000 --- a/tests/none_user/client_find_servers.conf +++ /dev/null @@ -1,24 +0,0 @@ -# ClientFindServers — test: none_user - -discoveryEndpoint = opc.tcp://localhost:14840 -applicationUri = urn:bobink.ClientFindServers - -# Discovery (LDS) side -discoveryCertificate = certs/ClientFindServers_cert.der -discoveryPrivateKey = certs/ClientFindServers_key.der -discoverySecurityMode = None -discoverySecurityPolicy = None -discoveryAuthMode = user -discoveryUsername = user -discoveryPassword = password -discoveryTrustList = certs/ServerLDS_cert.der - -# Server side -serverCertificate = certs/ClientFindServers_cert.der -serverPrivateKey = certs/ClientFindServers_key.der -serverSecurityMode = None -serverSecurityPolicy = None -serverAuthMode = user -serverUsername = user -serverPassword = password -serverTrustList = certs/ServerRegister_cert.der diff --git a/tests/none_user/server_lds.conf b/tests/none_user/server_lds.conf index eb6c2ff..12b2e4d 100644 --- a/tests/none_user/server_lds.conf +++ b/tests/none_user/server_lds.conf @@ -10,5 +10,4 @@ authMode = user username = user password = password -trustList = certs/ServerRegisterClient_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_lds diff --git a/tests/none_user/server_register.conf b/tests/none_user/server_register.conf index 890790e..81cf046 100644 --- a/tests/none_user/server_register.conf +++ b/tests/none_user/server_register.conf @@ -1,25 +1,14 @@ -# ServerRegister — test: none_user +# ServerRegister server config — test: none_user port = 14841 applicationUri = urn:bobink.ServerRegister -serverCertificate = certs/ServerRegister_cert.der -serverPrivateKey = certs/ServerRegister_key.der -clientCertificate = certs/ServerRegisterClient_cert.der -clientPrivateKey = certs/ServerRegisterClient_key.der +certificate = certs/ServerRegister_cert.der +privateKey = certs/ServerRegister_key.der -discoveryEndpoint = opc.tcp://localhost:14840 registerInterval = 10 -securityMode = None -securityPolicy = None +authMode = user +username = user +password = password -serverAuthMode = user -serverUsername = user -serverPassword = password - -clientAuthMode = user -clientUsername = user -clientPassword = password - -trustList = certs/ServerLDS_cert.der -trustList = certs/ClientFindServers_cert.der +trustStore = certs/trust/server_register diff --git a/tests/none_user/server_register_client.conf b/tests/none_user/server_register_client.conf new file mode 100644 index 0000000..14f409b --- /dev/null +++ b/tests/none_user/server_register_client.conf @@ -0,0 +1,14 @@ +# ServerRegister client config — test: none_user + +applicationUri = urn:bobink.ServerRegister +certificate = certs/ServerRegisterClient_cert.der +privateKey = certs/ServerRegisterClient_key.der + +securityMode = None +securityPolicy = None + +authMode = user +username = user +password = password + +trustStore = certs/trust/server_register_client diff --git a/tests/run_test.sh b/tests/run_test.sh index 8a87824..ef359ef 100755 --- a/tests/run_test.sh +++ b/tests/run_test.sh @@ -5,7 +5,8 @@ # Usage: tests/run_test.sh # # config_dir — directory containing server_lds.conf, -# server_register.conf, client_find_servers.conf +# server_register.conf, server_register_client.conf, +# client.conf # expected_policy — security-policy string that must appear in # the client's endpoint listing (e.g. # "Basic256Sha256", "Aes128_Sha256_RsaOaep", @@ -35,6 +36,24 @@ cleanup() { } trap cleanup EXIT +# ── helpers ──────────────────────────────────────────────────── +wait_for_port() { + local port="$1" pid="$2" label="$3" i=0 + while [ $i -lt 50 ]; do + if ! kill -0 "$pid" 2>/dev/null; then + echo "FAIL: $label exited prematurely" + exit 1 + fi + if ss -tlnp 2>/dev/null | grep -q ":${port} "; then + return 0 + fi + sleep 0.1 + i=$((i + 1)) + done + echo "FAIL: $label did not listen on port $port within 5 s" + exit 1 +} + # ── port check ───────────────────────────────────────────────── for port in $LDS_PORT $SR_PORT; do if ss -tlnp 2>/dev/null | grep -q ":${port} "; then @@ -46,29 +65,14 @@ done # ── start LDS ────────────────────────────────────────────────── build/ServerLDS "$CONFIG_DIR/server_lds.conf" >/dev/null 2>&1 & LDS_PID=$! -sleep 2 -if ! kill -0 "$LDS_PID" 2>/dev/null; then - echo "FAIL: ServerLDS exited prematurely" - exit 1 -fi +wait_for_port "$LDS_PORT" "$LDS_PID" "ServerLDS" # ── start ServerRegister ─────────────────────────────────────── -build/ServerRegister "$CONFIG_DIR/server_register.conf" >/dev/null 2>&1 & +build/ServerRegister "$CONFIG_DIR/server_register.conf" "$CONFIG_DIR/server_register_client.conf" "opc.tcp://localhost:$LDS_PORT" >/dev/null 2>&1 & SR_PID=$! -sleep 3 -if ! kill -0 "$SR_PID" 2>/dev/null; then - echo "FAIL: ServerRegister exited prematurely" - exit 1 -fi +wait_for_port "$SR_PORT" "$SR_PID" "ServerRegister" -# ── run client ───────────────────────────────────────────────── -TMPFILE=$(mktemp) -# UA_Log_Stdout writes to stdout; capture both stdout and stderr. -build/ClientFindServers "$CONFIG_DIR/client_find_servers.conf" >"$TMPFILE" 2>&1 -CLIENT_RC=$? -CLIENT_OUTPUT=$(<"$TMPFILE") - -# ── validation checks ───────────────────────────────────────── +# ── validation helper ───────────────────────────────────────── check() { local label="$1" result="$2" if [ "$result" -eq 0 ]; then @@ -79,27 +83,49 @@ check() { fi } -# 1. Exit code -[ "$CLIENT_RC" -eq 0 ] -check "client exit code is 0 (got $CLIENT_RC)" $? +# ── FindServers ─────────────────────────────────────────────── +TMPFILE=$(mktemp) +build/Client "$CONFIG_DIR/client.conf" find-servers "opc.tcp://localhost:$LDS_PORT" >"$TMPFILE" 2>&1 +FS_RC=$? +FS_OUTPUT=$(<"$TMPFILE") + +[ "$FS_RC" -eq 0 ] +check "find-servers exit code is 0 (got $FS_RC)" $? + +echo "$FS_OUTPUT" | grep -q "urn:bobink.ServerRegister" +check "find-servers contains urn:bobink.ServerRegister" $? + +# ── GetEndpoints ────────────────────────────────────────────── +build/Client "$CONFIG_DIR/client.conf" get-endpoints "opc.tcp://localhost:$SR_PORT" >"$TMPFILE" 2>&1 +GE_RC=$? +GE_OUTPUT=$(<"$TMPFILE") + +[ "$GE_RC" -eq 0 ] +check "get-endpoints exit code is 0 (got $GE_RC)" $? + +echo "$GE_OUTPUT" | grep -q "$EXPECTED_POLICY" +check "get-endpoints contains $EXPECTED_POLICY" $? -# 2. FindServers returned the registered server -echo "$CLIENT_OUTPUT" | grep -q "urn:bobink.ServerRegister" -check "FindServers contains urn:bobink.ServerRegister" $? +# ── ReadTime ────────────────────────────────────────────────── +build/Client "$CONFIG_DIR/client.conf" read-time "opc.tcp://localhost:$SR_PORT" >"$TMPFILE" 2>&1 +RT_RC=$? +RT_OUTPUT=$(<"$TMPFILE") -# 3. Client read the current time -echo "$CLIENT_OUTPUT" | grep -q "date is:" -check "client read current time" $? +[ "$RT_RC" -eq 0 ] +check "read-time exit code is 0 (got $RT_RC)" $? -# 4. Endpoint lists expected security policy -echo "$CLIENT_OUTPUT" | grep -q "$EXPECTED_POLICY" -check "endpoint contains $EXPECTED_POLICY" $? +echo "$RT_OUTPUT" | grep -q "date is:" +check "read-time output contains 'date is:'" $? # ── result ───────────────────────────────────────────────────── if [ "$FAILURES" -ne 0 ]; then echo "" - echo "--- client output ---" - echo "$CLIENT_OUTPUT" + echo "--- find-servers output ---" + echo "$FS_OUTPUT" + echo "--- get-endpoints output ---" + echo "$GE_OUTPUT" + echo "--- read-time output ---" + echo "$RT_OUTPUT" echo "--- end ---" exit 1 fi -- cgit v1.2.3