open_workshop/open_workshop_mqtt/run-tests.sh
matthias.lotz f1b0c50fbf fix: MQTT topic matching + UI button fixes
- Fix MQTT topic pattern matching (_mqtt_topic_matches):
  * Implement proper # wildcard (multi-level)
  * Implement proper + wildcard (single-level)
  * Fix bug where first device got ALL messages
  * Now shaperorigin/# only matches shaperorigin/* topics

- Fix Stop Connection button (Odoo-style):
  * Remove manual commit() - let Odoo handle it
  * Use write() to update state
  * Handle case where service doesn't have connection

- Fix Test Connection hanging:
  * Add proper cleanup with sleep after disconnect
  * Catch cleanup exceptions

- Add @unittest.skip to real MQTT tests:
  * TransactionCase incompatible with paho-mqtt threads
  * See TODO.md M8 for details

- Fix run-tests.sh:
  * Remove -i flag (was hanging)
  * Simplify to direct output redirect

- Add TODO.md documentation
- Update .gitignore for test logs
2026-01-28 22:08:59 +01:00

97 lines
2.5 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) ==="
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 ==="
if grep -q "Modules loaded" "$LOG_FILE"; then
echo "✓ Module loaded successfully"
# Count test results
PASSED=$(grep -c "test_.*ok$" "$LOG_FILE" 2>/dev/null || echo "0")
FAILED=$(grep -c "test_.*FAIL$" "$LOG_FILE" 2>/dev/null || echo "0")
ERRORS=$(grep -c "test_.*ERROR$" "$LOG_FILE" 2>/dev/null || echo "0")
echo "Tests run: $((PASSED + FAILED + ERRORS))"
echo " Passed: $PASSED"
echo " Failed: $FAILED"
echo " Errors: $ERRORS"
# Show failed tests
if [ "$FAILED" -gt 0 ] || [ "$ERRORS" -gt 0 ]; then
echo ""
echo "Failed/Error tests:"
grep -E "test_.*(FAIL|ERROR)" "$LOG_FILE" || true
fi
else
echo "✗ Module failed to load"
tail -50 "$LOG_FILE"
fi
echo ""
echo "Full log: $LOG_FILE"
# Result
if [ $EXIT_CODE -eq 0 ]; then
echo ""
echo "✓✓✓ ALL TESTS PASSED ✓✓✓"
else
echo ""
echo "✗✗✗ TESTS FAILED (exit code: $EXIT_CODE) ✗✗✗"
fi
exit $EXIT_CODE