#!/bin/sh set -eu cd "$(dirname "$0")/.." [ -f .env ] || cp .env.example .env if ! command -v docker >/dev/null 2>&1; then echo "docker is required for the full self-test" >&2 exit 2 fi echo "[selftest] waiting for dashboard/Suricata" i=0 while [ "$i" -lt 30 ]; do if docker compose exec -T ids python3 /opt/ids/scripts/healthcheck.py >/dev/null 2>&1; then break fi i=$((i + 1)) sleep 1 done if [ "$i" -ge 30 ]; then echo "[selftest] service did not become healthy" >&2 docker compose logs --tail=100 ids >&2 || true exit 3 fi docker compose exec -T ids python3 /opt/ids/scripts/send_test_tzsp.py --host 127.0.0.1 --count 3 sleep 3 docker compose exec -T ids python3 - <<'PY' import json import urllib.request with urllib.request.urlopen('http://127.0.0.1:8080/api/alerts?limit=100', timeout=5) as r: data = json.load(r) match = [a for a in data.get('alerts', []) if a.get('signature_id') == 1000001] if not match: raise SystemExit('SELFTEST FAILED: SID 1000001 not found') print('SELFTEST OK: Suricata emitted LOCAL TZSP PIPELINE TEST') PY