Files
CST-agent/scripts/docker_parliament_test.sh
T
WHCandCursor de9ee28773 feat: password Realm, single-chair login, shared parliament context (0.9.12)
Derive Realm keys from a user password (Argon2id, no private key on disk).
Login claims the sole chair with handover; peers share parliament context;
--new-project clears it. CLI peer/discover helpers and Docker alpine recipe
included; headless empty-answer retries raised for unattended runs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-28 23:06:51 +08:00

60 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Real Docker smoke: shared Realm volume, chair listens, member dials.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
IMG="${PARLIAMENT_IMAGE:-cst-parliament:local}"
NET="${PARLIAMENT_NET:-cst-parliament-net}"
VOL="${PARLIAMENT_VOL:-cst-parliament-realm}"
LISTEN_PORT=9454
cd "$ROOT"
echo "== docker build (alpine) =="
docker build -f scripts/Dockerfile.parliament -t "$IMG" .
docker network inspect "$NET" >/dev/null 2>&1 || docker network create "$NET"
docker volume inspect "$VOL" >/dev/null 2>&1 || docker volume create "$VOL"
cleanup() {
docker rm -f cst-parl-a cst-parl-b >/dev/null 2>&1 || true
}
trap cleanup EXIT
cleanup
docker volume rm "$VOL" >/dev/null 2>&1 || true
docker volume create "$VOL" >/dev/null
echo "== realm + enroll on shared volume =="
docker run --rm -v "$VOL:/realm-config" -e XDG_CONFIG_HOME=/realm-config "$IMG" --realm-new
docker run --rm -v "$VOL:/realm-config" -e XDG_CONFIG_HOME=/realm-config "$IMG" \
--realm-enroll chair-a --realm-label chair
docker run --rm -v "$VOL:/realm-config" -e XDG_CONFIG_HOME=/realm-config "$IMG" \
--realm-enroll member-b --realm-label member
echo "== chair listens =="
docker run -d --name cst-parl-a --network "$NET" \
-v "$VOL:/realm-config" -e XDG_CONFIG_HOME=/realm-config \
"$IMG" --peer-listen="$LISTEN_PORT" --instance chair-a
for i in $(seq 1 50); do
if docker logs cst-parl-a 2>&1 | grep -q "peer_listen port="; then
break
fi
sleep 0.2
done
docker logs cst-parl-a 2>&1 | tail -8
echo "== member dials =="
docker run --rm --name cst-parl-b --network "$NET" \
-v "$VOL:/realm-config" -e XDG_CONFIG_HOME=/realm-config \
"$IMG" --peer-dial="cst-parl-a:${LISTEN_PORT}" --instance member-b
echo "== chair result =="
for i in $(seq 1 50); do
if docker logs cst-parl-a 2>&1 | grep -q "peer_ok"; then
break
fi
sleep 0.2
done
docker logs cst-parl-a 2>&1 | grep peer_ok
echo "docker_parliament_test: OK"