155 lines
4.5 KiB
Bash
Executable File
155 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Test script for device_simulator.py
|
|
|
|
set -e # Exit on error
|
|
|
|
echo "=== Device Simulator Test Suite ==="
|
|
echo ""
|
|
|
|
# 1. Stop all running services
|
|
echo "1. Stoppe alle laufenden Services..."
|
|
pkill -f "device_simulator" 2>/dev/null || true
|
|
pkill -f "uvicorn apps" 2>/dev/null || true
|
|
pkill -f "apps.abstraction" 2>/dev/null || true
|
|
sleep 2
|
|
echo " ✓ Services gestoppt"
|
|
echo ""
|
|
|
|
# 2. Start services
|
|
echo "2. Starte Services..."
|
|
poetry run python -m apps.abstraction.main > /tmp/abstraction.log 2>&1 &
|
|
ABSTRACTION_PID=$!
|
|
echo " Abstraction Layer gestartet (PID: $ABSTRACTION_PID)"
|
|
sleep 2
|
|
|
|
poetry run uvicorn apps.api.main:app --host 0.0.0.0 --port 8001 > /tmp/api.log 2>&1 &
|
|
API_PID=$!
|
|
echo " API Server gestartet (PID: $API_PID)"
|
|
sleep 2
|
|
|
|
poetry run python tools/device_simulator.py > /tmp/simulator.log 2>&1 &
|
|
SIM_PID=$!
|
|
echo " Device Simulator gestartet (PID: $SIM_PID)"
|
|
sleep 2
|
|
|
|
echo " ✓ Alle Services laufen"
|
|
echo ""
|
|
|
|
# 3. Test API reachability
|
|
echo "3. Teste API Erreichbarkeit..."
|
|
if timeout 3 curl -s http://localhost:8001/devices > /dev/null; then
|
|
echo " ✓ API antwortet"
|
|
else
|
|
echo " ✗ API antwortet nicht!"
|
|
echo " API Log:"
|
|
tail -10 /tmp/api.log
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 4. Test Light Operations
|
|
echo "4. Teste Lampen-Operationen..."
|
|
|
|
# 4.1 Power On
|
|
echo " 4.1 Lampe einschalten (test_lampe_1)..."
|
|
RESPONSE=$(timeout 3 curl -s -X POST http://localhost:8001/devices/test_lampe_1/set \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"type":"light","payload":{"power":"on"}}')
|
|
echo " Response: $RESPONSE"
|
|
sleep 1
|
|
|
|
# 4.2 Check state via MQTT
|
|
echo " 4.2 Prüfe State via MQTT..."
|
|
STATE=$(timeout 2 mosquitto_sub -h 172.16.2.16 -t 'vendor/test_lampe_1/state' -C 1)
|
|
echo " State: $STATE"
|
|
if echo "$STATE" | grep -q '"power": "on"'; then
|
|
echo " ✓ Power ist ON"
|
|
else
|
|
echo " ✗ Power nicht ON!"
|
|
fi
|
|
|
|
# 4.3 Brightness
|
|
echo " 4.3 Helligkeit setzen (75%)..."
|
|
RESPONSE=$(timeout 3 curl -s -X POST http://localhost:8001/devices/test_lampe_1/set \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"type":"light","payload":{"brightness":75}}')
|
|
echo " Response: $RESPONSE"
|
|
sleep 1
|
|
|
|
STATE=$(timeout 2 mosquitto_sub -h 172.16.2.16 -t 'vendor/test_lampe_1/state' -C 1)
|
|
echo " State: $STATE"
|
|
if echo "$STATE" | grep -q '"brightness": 75'; then
|
|
echo " ✓ Brightness ist 75"
|
|
else
|
|
echo " ✗ Brightness nicht 75!"
|
|
fi
|
|
echo ""
|
|
|
|
# 5. Test Thermostat Operations
|
|
echo "5. Teste Thermostat-Operationen..."
|
|
|
|
# 5.1 Set mode and target
|
|
echo " 5.1 Setze Mode HEAT und Target 22.5°C..."
|
|
RESPONSE=$(timeout 3 curl -s -X POST http://localhost:8001/devices/test_thermo_1/set \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"type":"thermostat","payload":{"mode":"heat","target":22.5}}')
|
|
echo " Response: $RESPONSE"
|
|
sleep 1
|
|
|
|
STATE=$(timeout 2 mosquitto_sub -h 172.16.2.16 -t 'vendor/test_thermo_1/state' -C 1)
|
|
echo " State: $STATE"
|
|
if echo "$STATE" | grep -q '"mode": "heat"' && echo "$STATE" | grep -q '"target": 22.5'; then
|
|
echo " ✓ Mode ist HEAT, Target ist 22.5"
|
|
else
|
|
echo " ✗ Mode oder Target nicht korrekt!"
|
|
fi
|
|
|
|
# 5.2 Wait for temperature drift
|
|
echo " 5.2 Warte 6 Sekunden auf Temperature Drift..."
|
|
sleep 6
|
|
|
|
STATE=$(timeout 2 mosquitto_sub -h 172.16.2.16 -t 'vendor/test_thermo_1/state' -C 1)
|
|
echo " State: $STATE"
|
|
CURRENT=$(echo "$STATE" | grep -o '"current": [0-9.]*' | grep -o '[0-9.]*$')
|
|
echo " Current Temperature: ${CURRENT}°C"
|
|
if [ -n "$CURRENT" ]; then
|
|
echo " ✓ Temperature drift funktioniert"
|
|
else
|
|
echo " ✗ Temperature drift nicht sichtbar!"
|
|
fi
|
|
|
|
# 5.3 Set mode OFF
|
|
echo " 5.3 Setze Mode OFF..."
|
|
RESPONSE=$(timeout 3 curl -s -X POST http://localhost:8001/devices/test_thermo_1/set \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"type":"thermostat","payload":{"mode":"off","target":22.5}}')
|
|
echo " Response: $RESPONSE"
|
|
sleep 1
|
|
|
|
STATE=$(timeout 2 mosquitto_sub -h 172.16.2.16 -t 'vendor/test_thermo_1/state' -C 1)
|
|
if echo "$STATE" | grep -q '"mode": "off"'; then
|
|
echo " ✓ Mode ist OFF"
|
|
else
|
|
echo " ✗ Mode nicht OFF!"
|
|
fi
|
|
echo ""
|
|
|
|
# 6. Check simulator log
|
|
echo "6. Simulator Log (letzte 20 Zeilen)..."
|
|
tail -20 /tmp/simulator.log
|
|
echo ""
|
|
|
|
# 7. Summary
|
|
echo "=== Test Summary ==="
|
|
echo "✓ Alle Tests abgeschlossen"
|
|
echo ""
|
|
echo "Laufende Prozesse:"
|
|
echo " Abstraction: PID $ABSTRACTION_PID"
|
|
echo " API: PID $API_PID"
|
|
echo " Simulator: PID $SIM_PID"
|
|
echo ""
|
|
echo "Logs verfügbar in:"
|
|
echo " /tmp/abstraction.log"
|
|
echo " /tmp/api.log"
|
|
echo " /tmp/simulator.log"
|