#!/bin/sh
# DF-5720 — one A/B experiment cycle: boot socket-serial guest, enter ddb
# via root sysctl, run experiment.py <delay> <battery>, then probe whether
# userland resumed (ssh + serial echo). Prints VERDICT line.
# usage: ab_cycle.sh <delay_seconds> <battery> <tag>
set -eu
cd "$(dirname "$0")"
DELAY="$1"; BATTERY="$2"; TAG="$3"

./serial_vm.sh down >/dev/null 2>&1 || true
./serial_vm.sh up >/dev/null
: > /tmp/opencode/df-5720-drain.log

ssh -F ../../../dfbsd-qemu/config -o BatchMode=yes dfbsd \
    'sysctl debug.enter_debugger=ddb' >/dev/null 2>&1 &
SSHPID=$!
sleep 6
python3 experiment.py "$DELAY" "$BATTERY"
kill $SSHPID 2>/dev/null || true

# probe userland: serial echo first (getty), then ssh
sleep 4
python3 - <<'EOF'
import socket, time
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
    s.connect("/tmp/opencode/df-5720-ser.sock")
    s.sendall(b"\r\n")
    time.sleep(3)
    s.setblocking(False)
    try:
        b = s.recv(4096)
        print("SERIAL_ECHO=YES")
    except BlockingIOError:
        print("SERIAL_ECHO=NO")
except OSError:
    print("SERIAL_ECHO=NOCONN")
EOF
if timeout 25 ssh -F ../../../dfbsd-qemu/config -o ConnectTimeout=20 \
        -o BatchMode=yes dfbsd 'echo SSH_OK' 2>/dev/null | grep -q SSH_OK; then
    echo "SSH_OK=YES"
else
    echo "SSH_OK=NO"
fi
cp /tmp/opencode/df-5720-drain.log "exp.$TAG.drain.log" 2>/dev/null || true
tail -n 8 "exp.$TAG.drain.log" || true
