#!/usr/bin/env bash # Start two TCP and two UDP mock backends for RustProxy Stream tests. # Usage: ./start_stream_backends.sh [bind-host] # Defaults to loopback for safety. Use 0.0.0.0 only on a controlled test network. set -euo pipefail DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" HOST="${1:-127.0.0.1}" PYTHON="${PYTHON:-python3}" pids=() for file in test_stream_tcp.py test_stream_udp.py; do if [[ ! -f "$DIR/$file" ]]; then echo "Missing $DIR/$file (place the launcher next to the two test scripts)" >&2 exit 1 fi done cleanup() { trap - EXIT INT TERM if ((${#pids[@]})); then kill "${pids[@]}" 2>/dev/null || true wait "${pids[@]}" 2>/dev/null || true fi } trap cleanup EXIT trap 'exit 130' INT trap 'exit 143' TERM "$PYTHON" "$DIR/test_stream_tcp.py" server --host "$HOST" --port 9101 --backend-id tcp-a & pids+=("$!") "$PYTHON" "$DIR/test_stream_tcp.py" server --host "$HOST" --port 9102 --backend-id tcp-b & pids+=("$!") "$PYTHON" "$DIR/test_stream_udp.py" server --host "$HOST" --port 9201 --backend-id udp-a & pids+=("$!") "$PYTHON" "$DIR/test_stream_udp.py" server --host "$HOST" --port 9202 --backend-id udp-b & pids+=("$!") printf '\nMock backends for RustProxy (bind: %s):\n' "$HOST" printf 'TCP: %s:9101 (tcp-a), %s:9102 (tcp-b)\n' "$HOST" "$HOST" printf 'UDP: %s:9201 (udp-a), %s:9202 (udp-b)\n' "$HOST" "$HOST" printf 'UDP health probe: PING => PONG\n' printf 'Stop: Ctrl+C\n\n' # Stop the group if any backend exits unexpectedly (e.g., port conflict). wait -n "${pids[@]}" echo 'A backend stopped; stopping all mock backends.' >&2 exit 1