Files
prezenta_work/oldcode/TESTING_VERIFICATION_CHECKLIST.md
RPI User c3a55a89c3 Add log cleanup function (15-day deletion) and archive documentation
- Added cleanup_old_logs() function to app_v3_simplified.py
- Deletes log.txt if older than 15 days at app startup
- Sends notification to monitoring server when cleanup occurs
- Archived all legacy modules and documentation to oldcode/
- Updated device_info.txt with correct IP (192.168.1.104)
- All changes validated and tested
2025-12-18 17:18:14 +02:00

11 KiB

Testing & Verification Checklist

Phase 1: Pre-Deployment Checks

Code Quality

  • Single file (app_v3_simplified.py) - 300 lines
  • Clear function separation
  • Proper error handling
  • Logging at all critical points
  • Meaningful variable names

Dependencies Check

# Verify required packages installed
python3 -c "import rdm6300; print('✓ rdm6300')"
python3 -c "import requests; print('✓ requests')"
python3 -c "from gpiozero import OutputDevice; print('✓ gpiozero')" 2>/dev/null || echo "⚠ gpiozero not installed (optional, LED won't work)"

Hardware Prerequisites

# Check serial devices
ls /dev/tty*
# Should show at least: /dev/ttyS0 or /dev/ttyAMA0 or /dev/ttyUSB0

# Check GPIO available
gpio readall 2>/dev/null | head -5
# If not available, app will use dummy LED (still works)

# Check permissions
groups | grep dialout
# Should include 'dialout' group
# If not: sudo usermod -a -G dialout $USER (then logout/login)

Phase 2: Startup Test

Step 1: Set Device Name

# Edit device ID
nano ./data/idmasa.txt

# Change 'noconfig' to actual device name, e.g.:
# mesa_1

# Save and exit

Step 2: Start Application

cd /home/pi/Desktop/prezenta_work

# Make executable
chmod +x app_v3_simplified.py

# Run it
python3 app_v3_simplified.py

Expected Output

============================================================
RFID CARD READER - Simplified v3.0
============================================================

✓ Logging configured: ./data/log.txt
✓ LED initialized on GPIO 23
Device: raspberry (192.168.1.50)
Name ID: mesa_1
Monitoring: http://rpi-ansible:80/logs
API: https://dataswsibiusb01.sibiusb.harting.intra/RO_Quality_PRD/api/record

✓ RFID reader started on /dev/ttyS0
✓ WiFi monitor started
✓ RFID Client operational - waiting for cards...

Verification

  • No error messages
  • All ✓ marks present
  • Device IP correct
  • Device name correct (from idmasa.txt)
  • WiFi monitor started

Phase 3: Card Detection Test

Test 1: Insert Regular Card

Expected Behavior:
1. LED turns ON immediately
2. Console shows: "🔴 CARD INSERTED - ID: [card_number]"
3. Next line: "✓ Card event posted to API: [card_number]"
4. Check log.txt shows: "INFO - 🔴 CARD INSERTED"

Test 2: Remove Card

Expected Behavior:
1. LED turns OFF immediately
2. Console shows: "⚪ CARD REMOVED - ID: [card_number]"
3. Next line: "✓ Card event posted to API: [card_number]"
4. Check log.txt shows: "INFO - ⚪ CARD REMOVED"

Test 3: Multiple Rapid Cards

Insert 3 cards rapidly, remove them.

Expected:
- Each insert → LED ON, "🔴 CARD INSERTED"
- Each remove → LED OFF, "⚪ CARD REMOVED"
- All POSTs successful
- No crashes or hangs

Verification Checklist

  • LED feedback immediate (no 5-second delay)
  • Console output shows card events
  • log.txt records all events with timestamps
  • No error messages
  • API POSTs show success (✓)

Phase 4: Offline Mode Test

Setup

# Stop WiFi to simulate offline
sudo rfkill block wifi

# Wait for connection loss
sleep 10

Test 1: Insert Card While Offline

Expected:
1. LED turns ON
2. Console: "🔴 CARD INSERTED - ID: [number]"
3. Console: "✗ Offline: Saving card [number] to backup"
4. Check tag.txt: Should contain the API URL
5. Check log.txt: Shows "WARNING - ✗ Offline: Saving card"

Test 2: Remove Card While Offline

Expected:
1. LED turns OFF
2. Console: "⚪ CARD REMOVED - ID: [number]"
3. Console: "✗ Offline: Saving card [number] to backup"
4. Check tag.txt: Should have 2 lines now (insert + remove)

Test 3: Restore WiFi

# Re-enable WiFi
sudo rfkill unblock wifi

# Wait for reconnection
sleep 10

Expected After WiFi Restored

Console should show:
✓ Connection OK - checking for backed-up data
INFO - Posted backed-up data: https://....../[card_id]/1/...
INFO - Posted backed-up data: https://....../[card_id]/0/...

Check tag.txt: Should be EMPTY now

Verification Checklist

  • tag.txt created with card URLs when offline
  • Console shows "✗ Offline: Saving" messages
  • After WiFi restored, shows "Posted backed-up data"
  • tag.txt cleared after posting
  • log.txt records all events

Phase 5: WiFi Recovery Test

Monitor WiFi Checks

# Terminal 1: Watch logs
tail -f ./data/log.txt | grep -E "(Connection|WiFi|offline)"

Test WiFi Loss & Recovery

# Terminal 2: Wait for next WiFi check (happens every 40 min)
# Or force a check by restarting the app

# Simulate connection loss
sudo rfkill block wifi

# Monitor terminal 1
# Should see: "Connection lost - disabling WiFi for recovery"
# Wait 20 minutes
# Should see: "WiFi re-enabled"

# Re-enable WiFi
sudo rfkill unblock wifi

Expected Log Output

INFO - ✓ Connection OK - checking for backed-up data
WARNING - ✗ Connection lost - disabling WiFi for recovery
INFO - WiFi disabled, waiting 1200s for recovery...
INFO - WiFi re-enabled
INFO - ✓ Connection OK - checking for backed-up data

Verification Checklist

  • WiFi check happens every 40 minutes
  • WiFi recovery initiates on connection loss
  • WiFi disabled for 20 minutes
  • WiFi re-enabled automatically
  • Monitoring server receives WiFi event logs
  • backed-up data posted after WiFi restored

Phase 6: Server Communication Test

Monitoring Server Check

# On monitoring server (rpi-ansible):
# Check if logs are being received

tail -f /path/to/monitoring/app/logs

# Should show entries like:
# hostname: raspberry
# device_ip: 192.168.1.50
# nume_masa: mesa_1
# log_message: Card 12345678 inserted

Harting API Check

# Test with curl
curl -X POST "https://dataswsibiusb01.sibiusb.harting.intra/RO_Quality_PRD/api/record/mesa_1/12345678/1/2025-12-18&14:23:45" \
  --insecure \
  -v

Verification Checklist

  • Monitoring server receives card event logs
  • Harting API logs card insertions/removals
  • All events timestamped correctly
  • Device name matches idmasa.txt

Phase 7: Error Handling Test

Test 1: Serial Port Error

# Disconnect RFID reader (physically)
# Or block the device:
sudo chmod 000 /dev/ttyS0

Expected

✗ RFID reader failed - application cannot continue
ERROR: RFID reader initialization failed - exiting

Fix

# Restore permissions
sudo chmod 644 /dev/ttyS0

# Restart app
python3 app_v3_simplified.py

Test 2: Network Error (Firewall)

# Block outbound HTTPS
sudo ufw deny out 443  # (if ufw enabled)

# Insert card
# Expected: "✗ Offline: Saving card to backup"

Test 3: Server Down

# Stop monitoring server
# Insert card
# Expected: "WARNING - Failed to send log to server"
# But card still posts to Harting API and LED works

Verification Checklist

  • App handles serial port errors gracefully
  • App handles network timeouts
  • App falls back to backup when server down
  • No crashes, proper error messages
  • Recovery when service restored

Phase 8: Performance Checks

Memory Usage

# In another terminal while app is running:
ps aux | grep app_v3_simplified

# Check RSS column (resident memory)
# Should be ~30-50 MB, not 80+ MB

CPU Usage

# Should be <1% idle, <5% when processing cards
top

Response Time

# Insert card, measure time to LED response
# Should be <100ms (instant visual feedback)
# Should post within <1 second

Verification Checklist

  • Memory usage <50 MB
  • CPU usage <5% during operation
  • LED feedback <100ms
  • API post <1 second
  • Startup time <2 seconds

Phase 9: Stability Test

24-Hour Test

# Run overnight
python3 app_v3_simplified.py > app.log 2>&1 &

# Next day check:
wc -l ./data/log.txt          # Should grow steadily
ps aux | grep app_v3          # Still running?
free -m                       # Memory stable?

Expected

  • App still running
  • No zombie processes
  • Memory stable (not growing)
  • WiFi monitor checks happened
  • Any card events logged properly

7-Day Test

  • No crashes
  • WiFi recovery worked multiple times
  • Monitored card events working
  • System still responsive

Phase 10: Production Readiness

Final Checklist

  • All tests passed
  • Old app.py backed up
  • New app.py ready for production
  • idmasa.txt configured correctly
  • Monitoring server receiving logs
  • Harting API receiving card events
  • WiFi recovery tested
  • Offline backup working
  • LED feedback working
  • Documentation updated

Deployment Steps

# 1. Stop old app (if running)
# 2. Start new app
python3 app_v3_simplified.py

# 3. (Optional) Create systemd service for auto-start
sudo nano /etc/systemd/system/rfid-reader.service

# Content:
[Unit]
Description=RFID Card Reader
After=network.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/Desktop/prezenta_work
ExecStart=/usr/bin/python3 /home/pi/Desktop/prezenta_work/app_v3_simplified.py
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

# Then:
sudo systemctl enable rfid-reader
sudo systemctl start rfid-reader
sudo systemctl status rfid-reader

Troubleshooting During Tests

App crashes immediately

# Check logs
tail -50 ./data/log.txt

# Common issues:
# 1. rdm6300 not installed: pip3 install rdm6300
# 2. Serial device not found: ls /dev/tty*
# 3. Permission denied: sudo usermod -a -G dialout $USER

Card inserted but no LED/log

# 1. Check RFID reader connected: cat /dev/ttyS0 (present card, should see data)
# 2. Check LED wired to GPIO 23
# 3. Check device permissions: ls -la /dev/ttyS0
# 4. Restart app

Server not receiving logs

# 1. Check network: ping 10.76.140.17
# 2. Check server running: ps aux | grep monitoring
# 3. Check firewall: sudo ufw status
# 4. Check log for errors: grep ERROR ./data/log.txt

WiFi recovery not working

# 1. Check WiFi can be blocked: sudo rfkill block wifi
# 2. Check it was unblocked: sudo rfkill unblock wifi
# 3. Check sudo permissions: sudo -l | grep rfkill
# 4. Test manual: sudo rfkill block wifi && sleep 5 && sudo rfkill unblock wifi

Sign-Off

Once all tests pass, app is ready for production:

Date Tested: _________________
Tester: _____________________
Status: [ ] PASS [ ] FAIL
Notes: _______________________

Need Help? Check:

  1. Console output for immediate errors
  2. ./data/log.txt for detailed logs
  3. ./data/tag.txt for offline backup status
  4. Monitoring server logs for received events