Files
microdao-daarion/infrastructure/test-full-flow.sh
Apple 70fd268a0d 🚀 Production-ready: Auth enforcement + Observability + Policy
- Atomic генерація всіх секретів (generate-all-secrets.sh)
- Auth enforcement перевірка (enforce-auth.sh)
- Оновлений full flow test (must-pass)
- Prometheus alerting rules для Memory Module
- Matrix alerts bridge (алерти в ops room)
- Policy engine документація для пам'яті

Готово до production deployment!
2026-01-10 10:56:05 -08:00

138 lines
4.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Full Flow Test - must-pass тест для production readiness
set -e
echo "🧪 Full Flow Test - Production Readiness"
echo ""
# Кольори
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
FAILED=0
PASSED=0
# ============================================================================
# A. Smoke-test (5 хв)
# ============================================================================
echo "=== A. Smoke-test ==="
# 1. NATS
echo -n "NATS JetStream: "
if kubectl get pods -n nats -l app=nats --field-selector=status.phase=Running 2>/dev/null | grep -q nats; then
echo -e "${GREEN}✅ Running${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${RED}❌ Not running${NC}"
FAILED=$((FAILED + 1))
fi
# 2. Streams
echo -n "NATS Streams: "
NATS_POD=$(kubectl get pods -n nats -l app=nats -o jsonpath='{.items[0].metadata.name}' 2>/dev/null)
if [ -n "$NATS_POD" ]; then
STREAMS=$(kubectl exec -n nats "$NATS_POD" -- wget -qO- http://localhost:8222/jsz 2>/dev/null | python3 -m json.tool 2>/dev/null | grep -c '"name"' || echo "0")
if [ "$STREAMS" -ge 4 ]; then
echo -e "${GREEN}$STREAMS streams створено${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${RED}❌ Тільки $STREAMS streams (очікується 4+)${NC}"
FAILED=$((FAILED + 1))
fi
else
echo -e "${RED}❌ NATS pod не знайдено${NC}"
FAILED=$((FAILED + 1))
fi
# 3. Memory Service
echo -n "Memory Service: "
if kubectl get pods -n daarion -l app=memory-service --field-selector=status.phase=Running 2>/dev/null | grep -q memory-service; then
echo -e "${GREEN}✅ Running${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${YELLOW}⚠️ Not running (може бути нормально)${NC}"
fi
# 4. Qdrant
echo -n "Qdrant: "
if kubectl get pods -n qdrant -l app=qdrant --field-selector=status.phase=Running 2>/dev/null | grep -q qdrant; then
echo -e "${GREEN}✅ Running${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${YELLOW}⚠️ Not running (може бути нормально)${NC}"
fi
# ============================================================================
# B. Full Flow Test
# ============================================================================
echo ""
echo "=== B. Full Flow Test ==="
# Тест 1: Створення job через NATS
echo -n "Test 1: Job creation via NATS... "
if [ -n "$NATS_POD" ]; then
# Створюємо тестовий job
JOB_ID="test-$(date +%s)"
JOB_JSON="{\"job_id\":\"$JOB_ID\",\"type\":\"embed\",\"priority\":\"online\",\"input\":{\"text\":[\"test\"]}}"
# Публікація через NATS HTTP API (якщо доступний)
RESPONSE=$(kubectl exec -n nats "$NATS_POD" -- sh -c "echo '$JOB_JSON' | wget -qO- --post-data=@- --header='Content-Type: application/json' http://localhost:8222/jsz?streams=1" 2>/dev/null || echo "error")
if [ "$RESPONSE" != "error" ]; then
echo -e "${GREEN}✅ Job опубліковано${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${YELLOW}⚠️ Помилка публікації (може бути нормально без auth)${NC}"
fi
else
echo -e "${RED}❌ NATS pod не знайдено${NC}"
FAILED=$((FAILED + 1))
fi
# Тест 2: Перевірка streams
echo -n "Test 2: Streams verification... "
if [ -n "$NATS_POD" ]; then
STREAM_NAMES=$(kubectl exec -n nats "$NATS_POD" -- wget -qO- http://localhost:8222/jsz 2>/dev/null | python3 -m json.tool 2>/dev/null | grep '"name"' | head -4 || echo "")
REQUIRED_STREAMS=("MM_ONLINE" "MM_OFFLINE" "MM_WRITE" "MM_EVENTS")
ALL_FOUND=1
for stream in "${REQUIRED_STREAMS[@]}"; do
if echo "$STREAM_NAMES" | grep -q "$stream"; then
echo -n "$stream "
else
ALL_FOUND=0
fi
done
if [ $ALL_FOUND -eq 1 ]; then
echo -e "${GREEN}Всі streams знайдено${NC}"
PASSED=$((PASSED + 1))
else
echo -e "${RED}❌ Деякі streams відсутні${NC}"
FAILED=$((FAILED + 1))
fi
else
echo -e "${RED}❌ NATS pod не знайдено${NC}"
FAILED=$((FAILED + 1))
fi
# ============================================================================
# Підсумок
# ============================================================================
echo ""
echo "=== Результати ==="
echo "✅ Пройдено: $PASSED"
echo "❌ Провалено: $FAILED"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}Всі тести пройдено - система готова до production${NC}"
exit 0
else
echo -e "${RED}❌ Деякі тести провалено - потрібні виправлення${NC}"
exit 1
fi