dashcam-transfer/tests/test_mount_script.sh
Eddy de Vink 8cc04ea409 feat: harden dashcam transfer tegen flakke SD-lezer + stale-mount cleanup
- dashcam-transfer.py: log echte OSError (shutil.copy2 i.p.v. cp), pre-flight
  leesbaarheidscheck voor ruimte-wissen, retry (3x) + early-abort (5x), guards
  op bestandssysteem-calls, WhatsApp GESTOPT bij defecte kaart
- dashcam-transfer-mount.sh: skip als service al draait, read-only fsck.exfat
  health check, %k device-naam doorgeven
- dashcam-transfer-cleanup.sh: nieuw - ruimt stale mount op bij udev REMOVE
- udev/99-dashcam-trigger.rules: ADD + REMOVE regels met %k
- tests: 20 python + 7 mount + 12 cleanup checks
- README: architectuur, robuustheid, deploy-instructies
2026-08-11 20:37:48 +02:00

98 lines
2.3 KiB
Shell
Executable file

#!/bin/bash
# Functional test for dashcam-transfer-mount.sh using fake tools on PATH.
set -u
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/dashcam-transfer-mount.sh"
WORK=$(mktemp -d)
trap 'rm -rf "$WORK"' EXIT
FAKEBIN="$WORK/bin"
mkdir -p "$FAKEBIN"
LOGGER_FILE="$WORK/logger.log"
MOUNT_LOG="$WORK/mount.log"
FSCK_LOG="$WORK/fsck.log"
MOUNT_MARKER="$WORK/mounted"
START_MARKER="$WORK/started"
export LOGGER_FILE MOUNT_LOG FSCK_LOG MOUNT_MARKER START_MARKER
cat > "$FAKEBIN/logger" <<'EOF'
#!/bin/bash
echo "logger: $*" >> "$LOGGER_FILE"
EOF
cat > "$FAKEBIN/systemctl" <<'EOF'
#!/bin/bash
if [ "$1" = "is-active" ]; then
case "$2" in
--quiet) ;;
*) echo "$SYSTEMCTL_STATE" ;;
esac
[ "$SYSTEMCTL_STATE" = "active" ]
elif [ "$1" = "start" ]; then
touch "$START_MARKER"
fi
EOF
cat > "$FAKEBIN/mount" <<'EOF'
#!/bin/bash
echo "mount $*" >> "$MOUNT_LOG"
touch "$MOUNT_MARKER"
exit 0
EOF
cat > "$FAKEBIN/umount" <<'EOF'
#!/bin/bash
exit 0
EOF
cat > "$FAKEBIN/mountpoint" <<'EOF'
#!/bin/bash
exit 1
EOF
cat > "$FAKEBIN/fsck.exfat" <<'EOF'
#!/bin/bash
echo "fsck $*" >> "$FSCK_LOG"
exit 0
EOF
cat > "$FAKEBIN/lsblk" <<'EOF'
#!/bin/bash
exit 0
EOF
chmod +x "$FAKEBIN"/*
pass=0
fail=0
check() { # $1=desc, $2=condition
if eval "$2"; then
echo "PASS: $1"
pass=$((pass + 1))
else
echo "FAIL: $1"
fail=$((fail + 1))
fi
}
# Test 1: service already active → skip, never unmount/mount/start
export SYSTEMCTL_STATE=active
rm -f "$MOUNT_MARKER" "$START_MARKER" "$LOGGER_FILE" "$MOUNT_LOG" "$FSCK_LOG"
PATH="$FAKEBIN:$PATH" DASHCAM_MAX_WAIT=0 "$SCRIPT" sde1
check "service actief → exit zonder mount" 'test ! -e "$MOUNT_MARKER"'
check "service actief → geen service start" 'test ! -e "$START_MARKER"'
check "service actief → skip gelogd" 'grep -q "al bezig" "$LOGGER_FILE"'
# Test 2: service inactive → mount, fsck, start
export SYSTEMCTL_STATE=inactive
rm -f "$MOUNT_MARKER" "$START_MARKER" "$LOGGER_FILE" "$MOUNT_LOG" "$FSCK_LOG"
PATH="$FAKEBIN:$PATH" DASHCAM_MAX_WAIT=0 "$SCRIPT" sde1
check "service inactief → gemount" 'test -e "$MOUNT_MARKER"'
check "service inactief → service gestart" 'test -e "$START_MARKER"'
check "fsck.exfat uitgevoerd" 'test -s "$FSCK_LOG"'
check "mount gelogd" 'grep -q "mounted, starting transfer" "$LOGGER_FILE"'
echo "=== $pass pass, $fail fail ==="
[ "$fail" -eq 0 ]