AtlatestRepositorysigil-wm
1
#!/usr/bin/env bash2
set -euo pipefail3
cd "$(dirname "$0")/.."4
make -j2 all5
bash scripts/run-sigil --version6
runtime="$PWD/build/runtime/sigil-linux-amd64.runnable"7
modules="$PWD/src"8
export SIGIL_WM_LIBRARY="$PWD/build/libsigil-wm.so"9
mkdir -p build/receipts/repl10
idle_dir=$(mktemp -d /tmp/sigil-wm-repl-idle.XXXXXX)11
REPL_ENDPOINT_TEST_ROOT=$idle_dir timeout 15 "$runtime" -L "$modules" \12
eval -f test/repl-idle.sgl > build/receipts/repl/idle.log 2>&1 || {13
cat build/receipts/repl/idle.log14
rm -rf "$idle_dir"15
exit 116
}17
cat build/receipts/repl/idle.log18
rm -rf "$idle_dir"19
cd build/receipts/repl20
runtime_dir=$(mktemp -d /tmp/sigil-wm-repl-concurrency.XXXXXX)21
export SIGIL_WM_REPL="$runtime_dir/repl"22
server_pid=23
clients=()24
cleanup() {25
for child in "${clients[@]}" "$server_pid"; do26
[[ -z $child ]] || kill "$child" 2>/dev/null || true27
[[ -z $child ]] || wait "$child" 2>/dev/null || true28
done29
rm -rf "$runtime_dir"30
}31
trap cleanup EXIT32
timeout 120 "$runtime" -L "$modules" eval -f "$modules/../test/repl-concurrency.sgl" > server.log 2>&1 &33
server_pid=$!34
for ((attempt=0; attempt<600; attempt++)); do35
grep -q '^REPL_CONCURRENCY=READY' server.log && break36
sleep 0.0537
done38
grep -q '^REPL_CONCURRENCY=READY' server.log39
for ((index=0; index<8; index++)); do40
SIGIL_WM_CLIENT_ID=$index timeout 90 "$runtime" -L "$modules" eval -f "$modules/../test/repl-client.sgl" > "client-$index.log" 2>&1 &41
clients+=($!)42
done43
result=044
for child in "${clients[@]}"; do wait "$child" || result=1; done45
clients=()46
cat client-*.log47
[[ $result == 0 ]]48
"$runtime" -L "$modules" eval '(import (sigil process) (sigil wm repl)) (repl-request (getenv "SIGIL_WM_REPL") "(begin (set! stopped? #t) #t)")'49
wait "$server_pid"50
server_pid=51
grep -q '^REPL_CONCURRENCY_HOST=PASS' server.log52
echo 'REPL_CONCURRENCY=PASS eight clients ninety-six yielding replies correctly routed'