-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_worker_async.sh
More file actions
executable file
·192 lines (160 loc) · 5.69 KB
/
test_worker_async.sh
File metadata and controls
executable file
·192 lines (160 loc) · 5.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#!/bin/bash
# Test Worker Background System - End-to-End
# Testa processamento assíncrono completo de jobs de Marketing Automation
set -e
echo "🧪 Teste End-to-End: Worker Background System"
echo "=============================================="
echo ""
# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Configuração
API_URL="${API_URL:-http://localhost:8000}"
PROJECT_ID="test-worker-$(date +%s)"
# Função para verificar se serviço está rodando
check_service() {
local service=$1
local url=$2
echo -n "Verificando $service... "
if curl -s -f "$url" > /dev/null 2>&1; then
echo -e "${GREEN}✓ OK${NC}"
return 0
else
echo -e "${RED}✗ NÃO ENCONTRADO${NC}"
return 1
fi
}
# Função para aguardar job completar
wait_for_job() {
local job_id=$1
local max_attempts=30
local attempt=0
echo "Aguardando job $job_id completar..."
while [ $attempt -lt $max_attempts ]; do
response=$(curl -s "$API_URL/api/v1/projects/$PROJECT_ID/marketing/social/$job_id")
status=$(echo "$response" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
echo -n " Tentativa $((attempt+1))/$max_attempts: status=$status"
if [ "$status" = "completed" ]; then
echo -e " ${GREEN}✓ COMPLETED${NC}"
return 0
elif [ "$status" = "failed" ]; then
echo -e " ${RED}✗ FAILED${NC}"
echo "$response" | jq '.'
return 1
fi
echo " (aguardando...)"
sleep 2
attempt=$((attempt+1))
done
echo -e "${YELLOW}⚠ TIMEOUT após ${max_attempts} tentativas${NC}"
return 1
}
# 1. Verificar Pré-requisitos
echo "📋 Etapa 1: Verificando Pré-requisitos"
echo "--------------------------------------"
echo -n "Verificando Redis... "
if pgrep -f redis-server > /dev/null 2>&1; then
echo -e "${GREEN}✓ OK (processo rodando)${NC}"
else
echo -e "${YELLOW}⚠ Não detectado (mas pode estar rodando via Docker)${NC}"
fi
check_service "API" "$API_URL/health"
echo ""
# 2. Testar Social Media Job
echo "📱 Etapa 2: Testando Social Media Job (Async)"
echo "----------------------------------------------"
echo "Criando job de Social Media Asset..."
response=$(curl -s -X POST "$API_URL/api/v1/projects/$PROJECT_ID/marketing/social" \
-H "Content-Type: application/json" \
-d '{
"platform": "instagram",
"asset_type": "post",
"book_title": "O Último Pôr do Sol",
"author": "João Silva",
"cover_url": "https://via.placeholder.com/1080x1080",
"text": "Uma história emocionante de amor e superação",
"quote": "O amor é a força mais poderosa do universo",
"call_to_action": "Disponível agora!",
"color_scheme": "warm"
}' 2>&1)
# Debug
if echo "$response" | grep -q "job_id"; then
job_id=$(echo "$response" | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4)
echo -e "${GREEN}✓ Job criado: $job_id${NC}"
echo ""
# Aguardar job completar
if wait_for_job "$job_id"; then
echo -e "${GREEN}✓ Social Media Job processado com sucesso${NC}"
# Buscar resultado
echo ""
echo "Resultado do job:"
curl -s "$API_URL/api/v1/projects/$PROJECT_ID/marketing/social/$job_id" | jq '.'
else
echo -e "${RED}✗ Social Media Job falhou${NC}"
fi
else
echo -e "${RED}✗ Erro ao criar job${NC}"
echo "Response: $response"
fi
echo ""
echo ""
# 3. Testar Book Trailer Job (se FFmpeg disponível)
echo "🎬 Etapa 3: Testando Book Trailer Job (Async)"
echo "----------------------------------------------"
# Verificar FFmpeg
if command -v ffmpeg &> /dev/null; then
echo -e "${GREEN}✓ FFmpeg disponível${NC}"
echo "Criando job de Book Trailer..."
response=$(curl -s -X POST "$API_URL/api/v1/projects/$PROJECT_ID/marketing/trailer" \
-H "Content-Type: application/json" \
-d '{
"book_title": "O Último Pôr do Sol",
"author": "João Silva",
"tagline": "Uma história de amor através do tempo",
"synopsis": "Dois corações separados pelo destino, unidos pelo amor eterno",
"cover_image_url": "https://via.placeholder.com/1080x1920",
"style": "cinematic",
"duration": 15,
"color_scheme": "warm"
}' 2>&1)
if echo "$response" | grep -q "job_id"; then
job_id=$(echo "$response" | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4)
echo -e "${GREEN}✓ Job criado: $job_id${NC}"
echo ""
# Aguardar job completar (Book Trailer demora mais)
echo "⚠ Book Trailer pode demorar 30-60 segundos..."
if wait_for_job "$job_id"; then
echo -e "${GREEN}✓ Book Trailer Job processado com sucesso${NC}"
# Buscar resultado
echo ""
echo "Resultado do job:"
curl -s "$API_URL/api/v1/projects/$PROJECT_ID/marketing/trailer/$job_id" | jq '.'
else
echo -e "${RED}✗ Book Trailer Job falhou${NC}"
fi
else
echo -e "${RED}✗ Erro ao criar job${NC}"
echo "Response: $response"
fi
else
echo -e "${YELLOW}⚠ FFmpeg não disponível, pulando teste de Book Trailer${NC}"
fi
echo ""
echo ""
# 4. Resumo Final
echo "📊 Resumo dos Testes"
echo "===================="
echo ""
echo "✓ Worker Background System testado"
echo "✓ Jobs assíncronos criados e enfileirados"
echo "✓ Status tracking validado"
echo ""
echo "Para monitorar jobs em tempo real:"
echo " curl $API_URL/api/v1/projects/$PROJECT_ID/jobs"
echo ""
echo "Para ver logs do Worker:"
echo " tail -f /tmp/typecraft-worker.log"
echo ""
echo -e "${GREEN}🎉 Testes concluídos!${NC}"