Files
uno-q-audio-synth/scripts/test-e2e.sh
T
david 163ad4145b add prometheus exporter + test suite
- prometheus-exporter.py: stdlib-only HTTP metrics on :9090/metrics
- Exposes: ALSA status, hw_ptr rate, service health, mixer controls
- MIDI counters: notes_on, notes_off, errors
- test-unit.py: 10-test suite covering full MIDI→Pd→Audio pipeline
- test-tone.pd, test-midi-log.pd: minimal debug patches
- systemd service for exporter
- install.sh/deploy updated to include exporter
2026-06-24 02:22:05 -07:00

62 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# test-e2e.sh — End-to-end: send MIDI note → Pd → audio output
# Usage: ./scripts/test-e2e.sh [board_ip] [note] [duration]
set -euo pipefail
BOARD="${1:-192.168.9.167}"
NOTE="${2:-60}"
DURATION="${3:-3}"
SSH_KEY="/home/david/.ssh/unoq_deploy_key"
SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i $SSH_KEY"
echo "=== End-to-End Test: MIDI → Pd → Audio ==="
echo "Board: $BOARD"
echo "Note: $NOTE, Duration: ${DURATION}s"
# 1. Check Pd is running
echo ""
echo "--- Step 1: Verify Pd is running ---"
PID=$(ssh $SSH_OPTS "arduino@$BOARD" "pgrep -f 'pd.*synth.pd' | head -1 || true")
if [ -z "$PID" ]; then
echo "[FAIL] Pd is not running!"
exit 1
fi
echo "[OK] Pd running (PID: $PID)"
# 2. Check audio device status before
echo ""
echo "--- Step 2: ALSA status before MIDI ---"
ssh $SSH_OPTS "arduino@$BOARD" "cat /proc/asound/card0/pcm0p/sub0/status 2>/dev/null || echo 'No status'"
# 3. Send MIDI note-on
echo ""
echo "--- Step 3: Send MIDI note-on ---"
python3 -c "import socket; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.sendto(b'midi 144 $NOTE 100;', ('$BOARD', 8081)); s.close()"
echo "[OK] Note-on sent"
# 4. Monitor audio device during note
echo ""
echo "--- Step 4: Monitor ALSA during note (${DURATION}s) ---"
for i in $(seq 1 "$DURATION"); do
STATUS=$(ssh $SSH_OPTS "arduino@$BOARD" "cat /proc/asound/card0/pcm0p/sub0/status 2>/dev/null | head -1 || echo 'unknown'")
echo " [${i}/${DURATION}s] $STATUS"
sleep 1
done
# 5. Send note-off
echo ""
echo "--- Step 5: Send MIDI note-off ---"
python3 -c "import socket; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.sendto(b'midi 128 $NOTE 0;', ('$BOARD', 8081)); s.close()"
echo "[OK] Note-off sent"
# 6. Check ALSA after
sleep 0.5
echo ""
echo "--- Step 6: ALSA status after note-off ---"
ssh $SSH_OPTS "arduino@$BOARD" "cat /proc/asound/card0/pcm0p/sub0/status 2>/dev/null || echo 'No status'"
echo ""
echo "=== E2E Test Complete ==="
echo "If ALSA showed 'RUNNING' during step 4, the MIDI→Pd→Audio pipeline works."
echo "Connect headphones to JMISC: GND=35, HPH_L=36, HPH_R=38"