#!/usr/bin/env bash # lib9p/tests/runtest - Test harness for the 9P `test_server` # # Copyright (C) 2025 Luke T. Shumaker # SPDX-License-Identifier: AGPL-3.0-or-later set -euE -o pipefail build_aux=$(realpath --canonicalize-missing -- "${BASH_SOURCE[0]}/../../../build-aux") if [[ $# != 2 ]]; then echo >&2 "Usage: $0 CLIENTSCRIPT EXPLOG" exit 2 fi clientscript="$1" explog="$2" cleanup=() cleanup() { { set +x; } &>/dev/null local i for ((i = ${#cleanup[@]} - 1; i >= 0; i--)); do eval "set -x; ${cleanup[$i]}" { set +x; } &>/dev/null done } trap cleanup EXIT logfile=$(mktemp -t lib9p-log.XXXXXXXXXX) cleanup+=("rm -f -- ${logfile@Q}") port=$(python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()') set -x "${build_aux}/valgrind" ./tests/test_server/test_server "$port" "$logfile" & server_pid=$! cleanup+=("kill $server_pid || true; wait $server_pid || true") while [[ -d /proc/$server_pid ]] && ! (readlink /proc/$server_pid/fd/* 2>/dev/null | grep -q ^socket:); do sleep 0.1; done if [[ "$(head -c2 -- "$clientscript")" == '#!' ]]; then "$clientscript" "$port" else "${build_aux}/valgrind" "$clientscript" "$port" fi wait "$server_pid" cleanup=("${cleanup[@]::1}") diff -u -- <(grep -e '^[<>]' -- "$explog") "$logfile"