Files
infoscreen-dev/test-screenshot-meta-fix.sh
RobbStarkAustria d6090a6179 fix(screenshots): harden event-triggered MQTT screenshot flow and cleanup docs
- fix race where periodic captures could overwrite pending event_start and event_stop metadata before simclient published
- keep latest.jpg and meta.json synchronized so triggered screenshots are not lost
- add stale pending trigger self-healing to recover from old or invalid metadata states
- improve non-interactive capture reliability with DISPLAY and XAUTHORITY fallbacks
- allow periodic idle captures in development mode so dashboard previews stay fresh without active events
- add deeper simclient screenshot diagnostics for trigger and metadata handling
- add regression test script for metadata preservation and trigger delivery
- add root-cause and fix documentation for the screenshot MQTT issue
- align and deduplicate README screenshot and troubleshooting sections; update release notes to March 2026
- fix scripts/start-dev.sh .env loading to ignore comments safely and remove export invalid identifier warnings
2026-03-29 10:38:29 +02:00

94 lines
3.2 KiB
Bash

#!/bin/bash
# Test script to verify event-triggered screenshot protection
# Tests BOTH metadata and latest.jpg file protection
set -e
SCREENSHOT_DIR="src/screenshots"
META_FILE="$SCREENSHOT_DIR/meta.json"
LATEST_FILE="$SCREENSHOT_DIR/latest.jpg"
echo "=== Screenshot Event-Triggered Protection Test ==="
echo ""
echo "Testing that periodic screenshots don't overwrite event-triggered captures..."
echo ""
# Create test directory if needed
mkdir -p "$SCREENSHOT_DIR"
# Step 1: Create mock event_start screenshot and metadata
echo "Step 1: Simulating event_start screenshot and metadata..."
echo "MOCK EVENT_START IMAGE" > "$LATEST_FILE"
cat > "$META_FILE" << 'EOF'
{"captured_at": "2026-03-29T10:05:33.516Z", "file": "screenshot_20260329_100533.jpg", "type": "event_start", "send_immediately": true}
EOF
echo " Created: $META_FILE"
echo " Created: $LATEST_FILE (with event_start content)"
echo ""
# Step 2: Simulate periodic screenshot capture
echo "Step 2: Simulating periodic screenshot capture (should NOT overwrite meta or latest.jpg)..."
python3 << 'PYEOF'
import json
import os
import sys
screenshot_dir = "src/screenshots"
meta_path = os.path.join(screenshot_dir, 'meta.json')
latest_path = os.path.join(screenshot_dir, 'latest.jpg')
# Read current meta
with open(meta_path, 'r', encoding='utf-8') as f:
existing_meta = json.load(f)
print("[CHECK] Meta status: type={}, send_immediately={}".format(
existing_meta.get('type', 'unknown'),
existing_meta.get('send_immediately', False)
))
# Simulate _write_screenshot_meta() protection for metadata
should_update_meta = True
if existing_meta.get('send_immediately'):
should_update_meta = False
print("[PROTECTED] Would skip meta.json update - pending {} still marked send_immediately=True".format(
existing_meta.get('type')))
# Simulate latest.jpg update protection
should_update_latest = True
if existing_meta.get('send_immediately'):
should_update_latest = False
print("[PROTECTED] Would skip latest.jpg update - pending {} not yet transmitted".format(
existing_meta.get('type')))
if not should_update_meta and not should_update_latest:
print("[SUCCESS] Both meta.json and latest.jpg protected from periodic overwrite!")
sys.exit(0)
else:
print("[FAILED] Would have overwritten protected files!")
sys.exit(1)
PYEOF
echo ""
echo "Step 3: Verify both files still contain event_start metadata..."
if grep -q '"type": "event_start"' "$META_FILE" && grep -q '"send_immediately": true' "$META_FILE"; then
if grep -q "MOCK EVENT_START IMAGE" "$LATEST_FILE"; then
echo "[SUCCESS] Both files preserved correctly!"
echo " - meta.json: Still contains type=event_start with send_immediately=true"
echo " - latest.jpg: Still contains original event_start image"
echo ""
echo "Test passed! The fix prevents periodic screenshots from overwriting"
echo "both the metadata AND the actual screenshot file when event-triggered"
echo "captures are pending transmission."
else
echo "[FAILED] latest.jpg was overwritten!"
exit 1
fi
else
echo "[FAILED] meta.json was overwritten!"
exit 1
fi
echo ""
echo "=== Test Complete ==="