proper tests
This commit is contained in:
116
ctrl/e2e_test.sh
Executable file
116
ctrl/e2e_test.sh
Executable file
@@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
# E2E benchmark test — fully automated, run from the SENDER machine.
|
||||
#
|
||||
# Starts everything via SSH, captures test video, collects results.
|
||||
#
|
||||
# Usage:
|
||||
# ctrl/e2e_test.sh --python [--duration 30]
|
||||
# ctrl/e2e_test.sh --rust [--duration 30]
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
DURATION=30
|
||||
INTERVAL=5
|
||||
RECEIVER="mcrndeb"
|
||||
RDIR="wdir/cht"
|
||||
MODE="python"
|
||||
PLAY_DELAY=3
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--python) MODE="python"; shift ;;
|
||||
--rust) MODE="rust"; shift ;;
|
||||
--duration) DURATION="$2"; shift 2 ;;
|
||||
--interval) INTERVAL="$2"; shift 2 ;;
|
||||
--receiver) RECEIVER="$2"; shift 2 ;;
|
||||
--play-delay) PLAY_DELAY="$2"; shift 2 ;;
|
||||
*) echo "Unknown arg: $1"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
VIDEO="tests/fixtures/test_scene_${DURATION}s.mp4"
|
||||
GROUND_TRUTH="tests/fixtures/test_scene_${DURATION}s_ground_truth.json"
|
||||
|
||||
# Generate test video if needed
|
||||
if [ ! -f "$VIDEO" ]; then
|
||||
echo "=== Generating test video ==="
|
||||
python3 ctrl/gen_test_video.py --duration "$DURATION" --interval "$INTERVAL"
|
||||
fi
|
||||
|
||||
# PIDs to clean up
|
||||
PIDS=()
|
||||
cleanup() {
|
||||
echo "=== Cleaning up ==="
|
||||
for pid in "${PIDS[@]}"; do
|
||||
kill "$pid" 2>/dev/null || true
|
||||
done
|
||||
# Kill sudo'd client
|
||||
sudo pkill -f "stream_av\|cht-client" 2>/dev/null || true
|
||||
# Stop remote processes
|
||||
ssh "$RECEIVER" "pkill -f 'cht-server|cht.app' 2>/dev/null" || true
|
||||
wait 2>/dev/null
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
echo "=== E2E test: $MODE mode, ${DURATION}s ==="
|
||||
|
||||
# Step 1: Start receiver side (on mcrndeb via SSH)
|
||||
if [ "$MODE" = "rust" ]; then
|
||||
echo "--- Starting Rust server on $RECEIVER ---"
|
||||
ssh -tt "$RECEIVER" "cd $RDIR && ctrl/server.sh" &
|
||||
PIDS+=($!)
|
||||
sleep 2
|
||||
|
||||
echo "--- Starting app on $RECEIVER (rust transport, auto-connect) ---"
|
||||
ssh -tt "$RECEIVER" "cd $RDIR && CHT_AUTO_CONNECT=1 CHT_RUST_TRANSPORT=1 ctrl/app.sh" &
|
||||
PIDS+=($!)
|
||||
sleep 3
|
||||
else
|
||||
echo "--- Starting app on $RECEIVER (python transport, auto-connect) ---"
|
||||
ssh -tt "$RECEIVER" "cd $RDIR && CHT_AUTO_CONNECT=1 CHT_RUST_TRANSPORT=0 ctrl/app.sh" &
|
||||
PIDS+=($!)
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
# Step 2: Play test video fullscreen on sender
|
||||
echo "--- Playing test video fullscreen ---"
|
||||
mpv --fullscreen --loop-file=inf --no-terminal "$VIDEO" &
|
||||
PIDS+=($!)
|
||||
sleep "$PLAY_DELAY"
|
||||
|
||||
# Step 3: Start client (sender)
|
||||
echo "--- Starting $MODE client → $RECEIVER ---"
|
||||
if [ "$MODE" = "rust" ]; then
|
||||
ctrl/client.sh --rust "${RECEIVER}:4447" &
|
||||
else
|
||||
ctrl/client.sh --python "$RECEIVER" &
|
||||
fi
|
||||
PIDS+=($!)
|
||||
|
||||
# Step 4: Wait for capture + processing
|
||||
WAIT=$(( DURATION + 15 ))
|
||||
echo "--- Waiting ${WAIT}s for capture + processing ---"
|
||||
sleep "$WAIT"
|
||||
|
||||
# Step 5: Stop sender side
|
||||
echo "--- Stopping sender ---"
|
||||
sudo pkill -f "stream_av\|cht-client" 2>/dev/null || true
|
||||
kill "${PIDS[-1]}" 2>/dev/null || true # mpv
|
||||
sleep 2
|
||||
|
||||
# Step 6: Stop receiver side
|
||||
echo "--- Stopping receiver ---"
|
||||
ssh "$RECEIVER" "pkill -f 'cht.app' 2>/dev/null" || true
|
||||
sleep 2
|
||||
ssh "$RECEIVER" "pkill -f 'cht-server' 2>/dev/null" || true
|
||||
sleep 1
|
||||
|
||||
# Step 7: Benchmark
|
||||
echo ""
|
||||
echo "=== Benchmark results ($MODE) ==="
|
||||
ssh "$RECEIVER" "cd $RDIR && python3 ctrl/bench.py --latest --ground-truth $GROUND_TRUTH"
|
||||
|
||||
echo ""
|
||||
echo "JSON: ssh $RECEIVER 'cd $RDIR && python3 ctrl/bench.py --latest --json --ground-truth $GROUND_TRUTH'"
|
||||
Reference in New Issue
Block a user