#!/usr/bin/env bash # Orchestrate the secs4java8 interop harness against our C++ server. # # Boots secs_server on the docker bridge, then runs the Java harness # in its own container against it. Wired into CI via a separate # job (see .gitea/workflows/ci.yml). # # Usage: bash interop/secs4j_validate.sh # Exit codes: # 0 — every check the harness defines passed # 1 — one or more checks failed # 2 — script / orchestration error set -euo pipefail PORT=${PORT:-5099} cd "$(dirname "$0")/.." # Ensure the secs4j-interop image is built (idempotent). echo "ensuring secs4j-interop image is built..." docker build -t secsgem-secs4j-interop -f interop/secs4j/Dockerfile interop/secs4j \ >/dev/null 2>&1 # Ensure the harness is compiled. echo "compiling Secs4jHostHarness.java..." docker run --rm -v "$PWD/interop/secs4j:/work" secsgem-secs4j-interop \ bash -c "cd /work && javac -cp /opt/secs4java8/Export.jar Secs4jHostHarness.java" \ || { echo "FAIL: javac"; exit 2; } # Start the C++ server in background on the compose bridge network so # the secs4j container can DNS-resolve it. echo "starting secs_server (compose)..." docker compose up -d server >/dev/null 2>&1 trap 'docker compose stop server >/dev/null 2>&1 || true' EXIT # Give the server a moment to bind. sleep 1 # Run the harness on the same compose network as the server, against # the compose-defined hostname "server" on port 5000 (the demo # server's default). echo "running Secs4jHostHarness..." docker run --rm \ --network secs-gem_secs \ -v "$PWD/interop/secs4j:/work" \ secsgem-secs4j-interop \ java -cp /opt/secs4java8/Export.jar:/work Secs4jHostHarness server 5000 # trap handles teardown.