#!/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). The image # COPYs Secs4jHostHarness.java in and compiles it at build time, so # no bind mount is needed at run time — important because docker- # in-docker (CI runners with a mounted /var/run/docker.sock) can't # bind-mount paths from the container's filesystem to the daemon's. echo "ensuring secs4j-interop image is built..." docker build -t secsgem-secs4j-interop -f interop/secs4j/Dockerfile interop/secs4j \ >/dev/null 2>&1 # 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 \ secsgem-secs4j-interop \ java -cp /opt/secs4java8/Export.jar:/work Secs4jHostHarness server 5000 # trap handles teardown.