AtlatestRepositoryapiary

apiary / tree / test / harnessenv-up.sh

1#!/usr/bin/env bash
2#
3# Stand up a throwaway enclave-server + seeded DB for the apiary
4# transport harness. Writes state to $HARNESS_RUN/state.env so the
5# python drivers can read it.
6#
7# ./env-up.sh -> seeds, starts server, prints the run dir
8# ./env-down.sh -> kills the server by RECORDED PID, never pkill
9#
10# NEVER stop this server with a pattern match. See README.md --
11# concurrent enclave harnesses on one host are normal, and a pattern
12# kill takes somebody else's server AND the killing session with it.
13set -u
15RUN=${HARNESS_RUN:-/tmp/apiary-harness}
16PORT=${HARNESS_PORT:-49771}
17ENCLAVE_BIN=${ENCLAVE_BIN:-}
18DB="$RUN/harness.db"
20OWNER=${HARNESS_OWNER:-owner-1}
21OWNER_PASS=${HARNESS_OWNER_PASS:-harness-admin}
22LEADER=${HARNESS_LEADER:-leader-1}
23CHANNEL=${HARNESS_CHANNEL:-#coord}
24GROUP=${HARNESS_GROUP:-test-workers}
26if [ -z "$ENCLAVE_BIN" ]; then
27 echo "FATAL: set ENCLAVE_BIN to an enclave-server binary." >&2
28 echo " e.g. ENCLAVE_BIN=/path/to/enclave ./env-up.sh" >&2
29 exit 1
30fi
31if [ ! -x "$ENCLAVE_BIN" ]; then
32 echo "FATAL: enclave binary not found/executable at $ENCLAVE_BIN" >&2
33 exit 1
34fi
36mkdir -p "$RUN"
37rm -f "$DB" "$DB-shm" "$DB-wal"
39ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" user add "$OWNER" \
40 --password "$OWNER_PASS" --role admin >/dev/null \
41 || { echo "FATAL: user add failed" >&2; exit 1; }
42ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" group create "$GROUP" >/dev/null 2>&1 || true
44LEADER_OUT=$(ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" \
45 bot register "$LEADER" --owner "$OWNER" --allow-services yes \
46 --auto-join "$CHANNEL")
47LEADER_TOKEN=$(echo "$LEADER_OUT" | grep -oE '[a-f0-9]{64}' | head -1)
48if [ -z "$LEADER_TOKEN" ]; then
49 echo "FATAL: no leader token in bot-register output" >&2
50 echo "$LEADER_OUT" >&2
51 exit 1
52fi
54ENCLAVE_LOG_LEVEL=${ENCLAVE_LOG_LEVEL:-info} ENCLAVE_PORT="$PORT" \
55 ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" serve > "$RUN/server.log" 2>&1 &
56SERVER=$!
57sleep 2
58if ! kill -0 "$SERVER" 2>/dev/null; then
59 echo "FATAL: server died on startup" >&2
60 cat "$RUN/server.log" >&2
61 exit 1
62fi
64cat > "$RUN/state.env" <<EOF
65RUN=$RUN
66PORT=$PORT
67DB=$DB
68SERVER_PID=$SERVER
69ENCLAVE_BIN=$ENCLAVE_BIN
70LEADER_TOKEN=$LEADER_TOKEN
71LEADER_NICK=$LEADER
72OWNER=$OWNER
73CHANNEL=$CHANNEL
74EOF
76echo "RUN=$RUN PORT=$PORT SERVER_PID=$SERVER"
77echo "leader token: ${LEADER_TOKEN:0:8}...(${#LEADER_TOKEN} chars)"
78echo "stop with: HARNESS_RUN=$RUN $(dirname "$0")/env-down.sh"