50 lines
1.4 KiB
Bash
Executable file
50 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "usage: $0 SCORE_TILE8_GATE" >&2
|
|
exit 2
|
|
fi
|
|
runner=$1
|
|
fixture=$(mktemp -d /private/tmp/gem-score-tile8-overlap.XXXXXX)
|
|
server_pid=
|
|
cleanup()
|
|
{
|
|
if [ -n "$server_pid" ] && kill -0 "$server_pid" 2>/dev/null; then
|
|
kill "$server_pid"
|
|
wait "$server_pid" 2>/dev/null || true
|
|
fi
|
|
rm -rf "$fixture"
|
|
}
|
|
trap cleanup EXIT INT TERM HUP
|
|
|
|
mkdir -p "$fixture/build"
|
|
printf 'fixture model\n' > "$fixture/model.gguf"
|
|
printf '%s\n' '#!/bin/sh' 'while :; do sleep 1; done' > "$fixture/build/gem"
|
|
chmod +x "$fixture/build/gem"
|
|
"$fixture/build/gem" serve &
|
|
server_pid=$!
|
|
|
|
attempt=0
|
|
while ! pgrep -f "$fixture/build/gem serve" >/dev/null 2>&1; do
|
|
attempt=$((attempt + 1))
|
|
if [ "$attempt" -ge 50 ]; then
|
|
echo "fixture production process did not become visible" >&2
|
|
exit 1
|
|
fi
|
|
sleep 0.02
|
|
done
|
|
|
|
set +e
|
|
GEM_MODEL_SHA256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
|
|
GEM_SCORE_TILE8_BUILD="$fixture/missing-build" \
|
|
"$runner" "$fixture/model.gguf" "$fixture/output" \
|
|
> "$fixture/stdout" 2> "$fixture/stderr"
|
|
exit_code=$?
|
|
set -e
|
|
if [ "$exit_code" -ne 1 ] ||
|
|
! grep -q 'refusing to overlap a production server Metal workload' "$fixture/stderr" ||
|
|
[ -e "$fixture/output" ]; then
|
|
echo "score-tile gate did not fail closed around a production workload" >&2
|
|
exit 1
|
|
fi
|