- ✅ Alle 26 Tests grün (0 failed, 0 errors)
- Phase 2 ist damit 100% fertig!
Tests repariert:
- test_session_detector.py: Alle 7 Tests an env-passing angepasst
- SessionDetector(device.id, device.name) statt SessionDetector(device)
- process_power_event(env, power, ts) statt process_power_event(power, ts)
- test_mqtt_mocked.py: Alle 4 Service-Tests korrigiert
- start_connection_with_env(connection_id, env) Signatur
- stop_connection(connection_id) Parameter hinzugefügt
- IotBridgeService direkt instanziiert
- device.topic_pattern statt nicht-existierendem device_id
Verbesserungen:
- run-tests.sh: Klare Ausgabe mit ✓✓✓ ALL TESTS PASSED ✓✓✓
- run-tests.sh: Parsed Odoo Test-Output korrekt
- run-tests.sh: Exit Code (0=success, 1=failure)
Test-Coverage:
- SessionDetector State Machine vollständig getestet
- Alle 5 States: IDLE/STARTING/STANDBY/WORKING/STOPPING
- Debounce Logic: Start + Stop Timer
- Duration Tracking: Standby/Working Zeiten
- Timeout Detection: 20s Message Timeout
- State Recovery: Nach Restart
SessionDetector ist produktionsreif!
116 lines
3.1 KiB
Bash
Executable File
116 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Odoo Module Tests - OWS_MQTT Database
|
|
# Container: hobbyhimmel_odoo_18-dev, DB: hobbyhimmel_odoo_18_db
|
|
set -e
|
|
|
|
MODULE="open_workshop_mqtt"
|
|
DB_NAME="OWS_MQTT"
|
|
TIMEOUT=120
|
|
DB_CONTAINER="hobbyhimmel_odoo_18-dev_db"
|
|
ODOO_CONTAINER="hobbyhimmel_odoo_18-dev"
|
|
|
|
# Log im Projektverzeichnis
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
LOG_FILE="${SCRIPT_DIR}/test_$(date +%Y%m%d_%H%M%S).log"
|
|
|
|
echo "=== Checking containers ==="
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${DB_CONTAINER}$"; then
|
|
echo "✗ DB Container ${DB_CONTAINER} not running!"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${ODOO_CONTAINER}$"; then
|
|
echo "✗ Odoo Container ${ODOO_CONTAINER} not running!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✓ Containers running: ${ODOO_CONTAINER} + ${DB_CONTAINER}"
|
|
|
|
echo "=== Waiting for database ==="
|
|
until docker exec "${DB_CONTAINER}" pg_isready -U odoo > /dev/null 2>&1; do
|
|
echo "Waiting for PostgreSQL..."
|
|
sleep 2
|
|
done
|
|
echo "✓ PostgreSQL ready"
|
|
|
|
echo "=== Running tests on ${DB_NAME} (timeout: ${TIMEOUT}s) ==="
|
|
echo "(Output logged to: $LOG_FILE)"
|
|
timeout "$TIMEOUT" docker exec "${ODOO_CONTAINER}" \
|
|
odoo \
|
|
-d "${DB_NAME}" \
|
|
--test-enable \
|
|
--stop-after-init \
|
|
-u "$MODULE" \
|
|
--log-level=test \
|
|
--http-port=0 \
|
|
> "$LOG_FILE" 2>&1
|
|
|
|
EXIT_CODE=$?
|
|
|
|
# Handle timeout
|
|
if [ $EXIT_CODE -eq 124 ]; then
|
|
echo ""
|
|
echo "✗ TIMEOUT after ${TIMEOUT}s"
|
|
docker kill "${ODOO_CONTAINER}" 2>/dev/null || true
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
# Show results
|
|
echo ""
|
|
echo "=== Test Results ==="
|
|
|
|
# Parse Odoo's final test summary line
|
|
# Format: "0 failed, 1 error(s) of 22 tests"
|
|
if grep -q "failed.*error(s) of.*tests" "$LOG_FILE"; then
|
|
TEST_SUMMARY=$(grep "failed.*error(s) of.*tests" "$LOG_FILE" | tail -1)
|
|
echo "$TEST_SUMMARY"
|
|
|
|
# Extract numbers
|
|
FAILED=$(echo "$TEST_SUMMARY" | grep -oP '\d+(?= failed)' || echo "0")
|
|
ERRORS=$(echo "$TEST_SUMMARY" | grep -oP '\d+(?= error)' || echo "0")
|
|
TOTAL=$(echo "$TEST_SUMMARY" | grep -oP '\d+(?= tests)' || echo "0")
|
|
PASSED=$((TOTAL - FAILED - ERRORS))
|
|
|
|
echo ""
|
|
echo " Total: $TOTAL tests"
|
|
echo " ✓ Passed: $PASSED"
|
|
echo " ✗ Failed: $FAILED"
|
|
echo " ✗ Errors: $ERRORS"
|
|
|
|
# Show error details
|
|
if [ "$FAILED" -gt 0 ] || [ "$ERRORS" -gt 0 ]; then
|
|
echo ""
|
|
echo "=== Error Details ==="
|
|
grep -E "^ERROR:|^FAIL:" "$LOG_FILE" | head -20 || true
|
|
fi
|
|
|
|
# Set exit code based on test results
|
|
if [ "$FAILED" -gt 0 ] || [ "$ERRORS" -gt 0 ]; then
|
|
EXIT_CODE=1
|
|
else
|
|
EXIT_CODE=0
|
|
fi
|
|
else
|
|
echo "✗ Could not parse test results"
|
|
echo ""
|
|
echo "Last 30 lines of log:"
|
|
tail -30 "$LOG_FILE"
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Full log: $LOG_FILE"
|
|
|
|
# Final result banner
|
|
echo ""
|
|
echo "========================================"
|
|
if [ $EXIT_CODE -eq 0 ]; then
|
|
echo "✓✓✓ ALL TESTS PASSED ✓✓✓"
|
|
echo "========================================"
|
|
else
|
|
echo "✗✗✗ TESTS FAILED ✗✗✗"
|
|
echo "========================================"
|
|
fi
|
|
|
|
exit $EXIT_CODE
|