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