72 lines
2 KiB
Bash
Executable file
72 lines
2 KiB
Bash
Executable file
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 3 ]; then
|
|
echo "usage: $0 GEM FAKE_SERVER FAKE_HAX" >&2
|
|
exit 1
|
|
fi
|
|
|
|
gem=$1
|
|
server=$2
|
|
hax=$3
|
|
port=$((20000 + $$ % 20000))
|
|
pid_file=$(mktemp /private/tmp/gem-agent-server-pid.XXXXXX)
|
|
occupied_pid=
|
|
cleanup() {
|
|
if [ -n "$occupied_pid" ]; then
|
|
kill "$occupied_pid" 2>/dev/null || true
|
|
wait "$occupied_pid" 2>/dev/null || true
|
|
fi
|
|
rm -f "$pid_file"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
GEM_TEST_PORT=$port GEM_FAKE_SERVER_PID_FILE=$pid_file \
|
|
"$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server "$server" \
|
|
--hax "$hax" --port "$port" --startup-timeout 5
|
|
|
|
[ -s "$pid_file" ]
|
|
server_pid=$(sed -n '1p' "$pid_file")
|
|
if kill -0 "$server_pid" 2>/dev/null; then
|
|
echo "gem: managed server remained alive after hax exited: $server_pid" >&2
|
|
exit 1
|
|
fi
|
|
|
|
set +e
|
|
GEM_TEST_PORT=$port GEM_TEST_HAX_EXIT=7 GEM_FAKE_SERVER_PID_FILE=$pid_file \
|
|
"$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server "$server" \
|
|
--hax "$hax" --port "$port" --startup-timeout 5
|
|
hax_status=$?
|
|
set -e
|
|
[ "$hax_status" -eq 7 ]
|
|
server_pid=$(sed -n '1p' "$pid_file")
|
|
if kill -0 "$server_pid" 2>/dev/null; then
|
|
echo "gem: managed server remained alive after failing hax: $server_pid" >&2
|
|
exit 1
|
|
fi
|
|
|
|
"$server" --port "$port" &
|
|
occupied_pid=$!
|
|
ready=false
|
|
for _attempt in 1 2 3 4 5 6 7 8 9 10; do
|
|
if curl --fail --silent "http://127.0.0.1:$port/health" >/dev/null; then
|
|
ready=true
|
|
break
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
[ "$ready" = true ]
|
|
if GEM_TEST_PORT=$port "$gem" agent --model /tmp/gemma-4-31b.gguf \
|
|
--llama-server "$server" --hax "$hax" --port "$port" --startup-timeout 1; then
|
|
echo "gem: agent accepted a port owned by another server" >&2
|
|
exit 1
|
|
fi
|
|
kill "$occupied_pid"
|
|
wait "$occupied_pid" 2>/dev/null || true
|
|
occupied_pid=
|
|
|
|
if "$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server /usr/bin/false \
|
|
--hax "$hax" --port "$port" --startup-timeout 1; then
|
|
echo "gem: agent accepted a server that exited before readiness" >&2
|
|
exit 1
|
|
fi
|