AtlatestRepositorysigil-wm

sigil-wm / tree / scriptstest-repl

1#!/usr/bin/env bash
2set -euo pipefail
3cd "$(dirname "$0")/.."
4make -j2 all
5bash scripts/run-sigil --version
6runtime="$PWD/build/runtime/sigil-linux-amd64.runnable"
7modules="$PWD/src"
8export SIGIL_WM_LIBRARY="$PWD/build/libsigil-wm.so"
9mkdir -p build/receipts/repl
10idle_dir=$(mktemp -d /tmp/sigil-wm-repl-idle.XXXXXX)
11REPL_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.log
14 rm -rf "$idle_dir"
15 exit 1
17cat build/receipts/repl/idle.log
18rm -rf "$idle_dir"
19cd build/receipts/repl
20runtime_dir=$(mktemp -d /tmp/sigil-wm-repl-concurrency.XXXXXX)
21export SIGIL_WM_REPL="$runtime_dir/repl"
22server_pid=
23clients=()
24cleanup() {
25 for child in "${clients[@]}" "$server_pid"; do
26 [[ -z $child ]] || kill "$child" 2>/dev/null || true
27 [[ -z $child ]] || wait "$child" 2>/dev/null || true
28 done
29 rm -rf "$runtime_dir"
31trap cleanup EXIT
32timeout 120 "$runtime" -L "$modules" eval -f "$modules/../test/repl-concurrency.sgl" > server.log 2>&1 &
33server_pid=$!
34for ((attempt=0; attempt<600; attempt++)); do
35 grep -q '^REPL_CONCURRENCY=READY' server.log && break
36 sleep 0.05
37done
38grep -q '^REPL_CONCURRENCY=READY' server.log
39for ((index=0; index<8; index++)); do
40 SIGIL_WM_CLIENT_ID=$index timeout 90 "$runtime" -L "$modules" eval -f "$modules/../test/repl-client.sgl" > "client-$index.log" 2>&1 &
41 clients+=($!)
42done
43result=0
44for child in "${clients[@]}"; do wait "$child" || result=1; done
45clients=()
46cat client-*.log
47[[ $result == 0 ]]
48"$runtime" -L "$modules" eval '(import (sigil process) (sigil wm repl)) (repl-request (getenv "SIGIL_WM_REPL") "(begin (set! stopped? #t) #t)")'
49wait "$server_pid"
50server_pid=
51grep -q '^REPL_CONCURRENCY_HOST=PASS' server.log
52echo 'REPL_CONCURRENCY=PASS eight clients ninety-six yielding replies correctly routed'