sync
This commit is contained in:
165
buzzer_tool/smoke_test.sh
Executable file
165
buzzer_tool/smoke_test.sh
Executable file
@@ -0,0 +1,165 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd -- "$SCRIPT_DIR/.." && pwd)"
|
||||
CLI="$ROOT_DIR/buzzer_tool/buzzer.py"
|
||||
|
||||
PORT=""
|
||||
BAUDRATE=""
|
||||
TIMEOUT=""
|
||||
REMOTE_BASE="/lfs/smoke"
|
||||
KEEP_TMP=0
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $(basename "$0") -p <port> [-b baudrate] [-t timeout] [--remote-base /lfs/path] [--keep-tmp]
|
||||
|
||||
Beispiel:
|
||||
$(basename "$0") -p /dev/tty.usbmodem14101 -b 115200 -t 5
|
||||
EOF
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-p|--port)
|
||||
PORT="$2"
|
||||
shift 2
|
||||
;;
|
||||
-b|--baudrate)
|
||||
BAUDRATE="$2"
|
||||
shift 2
|
||||
;;
|
||||
-t|--timeout)
|
||||
TIMEOUT="$2"
|
||||
shift 2
|
||||
;;
|
||||
--remote-base)
|
||||
REMOTE_BASE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--keep-tmp)
|
||||
KEEP_TMP=1
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unbekanntes Argument: $1" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$PORT" ]]; then
|
||||
echo "Fehler: --port ist erforderlich" >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMMON_ARGS=("-p" "$PORT" "--no-auto-info")
|
||||
if [[ -n "$BAUDRATE" ]]; then
|
||||
COMMON_ARGS+=("-b" "$BAUDRATE")
|
||||
fi
|
||||
if [[ -n "$TIMEOUT" ]]; then
|
||||
COMMON_ARGS+=("-t" "$TIMEOUT")
|
||||
fi
|
||||
|
||||
run_cli() {
|
||||
python3 "$CLI" "${COMMON_ARGS[@]}" "$@"
|
||||
}
|
||||
|
||||
TMP_DIR="$(mktemp -d -t buzzer-smoke-XXXXXX)"
|
||||
cleanup() {
|
||||
if [[ "$KEEP_TMP" -eq 0 ]]; then
|
||||
rm -rf "$TMP_DIR"
|
||||
else
|
||||
echo "Temporärer Ordner bleibt erhalten: $TMP_DIR"
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "[1/9] Erzeuge sehr kleine Testdateien mit Nullen in $TMP_DIR"
|
||||
python3 - "$TMP_DIR" <<'PY'
|
||||
import os
|
||||
import sys
|
||||
base = sys.argv[1]
|
||||
files = {
|
||||
"z0.bin": 0,
|
||||
"z1.bin": 1,
|
||||
"z8.bin": 8,
|
||||
"z16.bin": 16,
|
||||
"z64.bin": 64,
|
||||
"z100k.bin": 102400,
|
||||
}
|
||||
for name, size in files.items():
|
||||
with open(os.path.join(base, name), "wb") as f:
|
||||
f.write(b"\x00" * size)
|
||||
print("Created:", ", ".join(f"{k}:{v}B" for k,v in files.items()))
|
||||
PY
|
||||
|
||||
echo "[2/9] Bereinige altes Remote-Testverzeichnis (falls vorhanden)"
|
||||
run_cli rm -r "$REMOTE_BASE" >/dev/null 2>&1 || true
|
||||
|
||||
echo "[3/9] Lege Remote-Verzeichnis an"
|
||||
run_cli mkdir "$REMOTE_BASE"
|
||||
|
||||
echo "[4/9] Upload der kleinen Null-Dateien"
|
||||
run_cli put "$TMP_DIR"/*.bin "$REMOTE_BASE/"
|
||||
|
||||
echo "[5/9] Prüfe remote stat"
|
||||
run_cli stat "$REMOTE_BASE/z0.bin"
|
||||
run_cli stat "$REMOTE_BASE/z64.bin"
|
||||
|
||||
echo "[6/9] Teste rename/mv"
|
||||
run_cli mv "$REMOTE_BASE/z16.bin" "$REMOTE_BASE/z16_renamed.bin"
|
||||
run_cli stat "$REMOTE_BASE/z16_renamed.bin"
|
||||
|
||||
echo "[7/9] Pull + get_file (Alias)"
|
||||
run_cli pull "$REMOTE_BASE/z1.bin" "$TMP_DIR/pull_z1.bin"
|
||||
run_cli get_file "$REMOTE_BASE/z100k.bin" "$TMP_DIR/get_file_z100k.bin"
|
||||
|
||||
echo "[8/9] Vergleiche heruntergeladene Dateien"
|
||||
python3 - "$TMP_DIR" <<'PY'
|
||||
import os
|
||||
import sys
|
||||
|
||||
TAG_MAGIC = b"TAG!"
|
||||
TAG_FOOTER_LEN = 7
|
||||
|
||||
base = sys.argv[1]
|
||||
|
||||
checks = [
|
||||
("z1.bin", "pull_z1.bin"),
|
||||
("z8.bin", "get_file_z8.bin"),
|
||||
]
|
||||
|
||||
for original_name, pulled_name in checks:
|
||||
original_path = os.path.join(base, original_name)
|
||||
pulled_path = os.path.join(base, pulled_name)
|
||||
|
||||
with open(original_path, "rb") as f:
|
||||
original = f.read()
|
||||
with open(pulled_path, "rb") as f:
|
||||
pulled = f.read()
|
||||
|
||||
if len(pulled) < len(original) + TAG_FOOTER_LEN:
|
||||
raise SystemExit(f"Pulled file zu kurz: {pulled_name}")
|
||||
|
||||
if pulled[:len(original)] != original:
|
||||
raise SystemExit(f"Audio-Präfix stimmt nicht: {pulled_name}")
|
||||
|
||||
if pulled[-4:] != TAG_MAGIC:
|
||||
raise SystemExit(f"TAG-Footer fehlt: {pulled_name}")
|
||||
|
||||
print("Vergleich OK (audio + tags)")
|
||||
PY
|
||||
|
||||
echo "[9/9] Rekursives Löschen + Abschlussliste"
|
||||
run_cli rm -r "$REMOTE_BASE"
|
||||
run_cli ls /lfs
|
||||
|
||||
echo "✅ Smoke-Test erfolgreich abgeschlossen"
|
||||
Reference in New Issue
Block a user