#!/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