Files
h2h-prototype/test-docker.sh

205 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
echo "🐳 H2H Docker Deployment Test"
echo "=============================="
echo ""
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check Docker is running
if ! docker info > /dev/null 2>&1; then
echo -e "${RED}❌ Docker daemon is not running${NC}"
echo "Please start Docker Desktop and try again"
exit 1
fi
echo -e "${GREEN}✅ Docker daemon is running${NC}"
echo ""
# Stop existing containers
echo "🛑 Stopping existing containers..."
docker compose down -v > /dev/null 2>&1
# Build images
echo "🏗️ Building Docker images (this may take 3-5 minutes)..."
docker compose build --no-cache 2>&1 | grep -E '(=>|CACHED|DONE|Successfully)' || true
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Images built successfully${NC}"
else
echo -e "${RED}❌ Image build failed${NC}"
exit 1
fi
echo ""
# Start services
echo "🚀 Starting services..."
docker compose up -d
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Services started${NC}"
else
echo -e "${RED}❌ Failed to start services${NC}"
exit 1
fi
echo ""
# Wait for services to be ready
echo "⏳ Waiting for services to be ready..."
for i in {1..30}; do
if curl -s http://localhost:8000/docs > /dev/null 2>&1 && \
curl -s http://localhost:5173 > /dev/null 2>&1; then
break
fi
echo -n "."
sleep 1
done
echo ""
echo ""
# Check containers are running
echo "📦 Container Status:"
docker compose ps
echo ""
# Check backend
echo "🔍 Testing backend API..."
BACKEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/docs)
if [ "$BACKEND_STATUS" = "200" ]; then
echo -e "${GREEN}✅ Backend responding (HTTP $BACKEND_STATUS)${NC}"
echo " URL: http://localhost:8000/docs"
else
echo -e "${RED}❌ Backend not responding (HTTP $BACKEND_STATUS)${NC}"
echo " Checking logs..."
docker compose logs --tail=20 backend
fi
echo ""
# Check frontend
echo "🔍 Testing frontend..."
FRONTEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:5173)
if [ "$FRONTEND_STATUS" = "200" ]; then
echo -e "${GREEN}✅ Frontend responding (HTTP $FRONTEND_STATUS)${NC}"
echo " URL: http://localhost:5173"
else
echo -e "${RED}❌ Frontend not responding (HTTP $FRONTEND_STATUS)${NC}"
echo " Checking logs..."
docker compose logs --tail=20 frontend
fi
echo ""
# Seed database
echo "🌱 Seeding database..."
docker compose exec -T backend python seed_data.py > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Database seeded with test data${NC}"
echo " Users: alice@example.com, bob@example.com, charlie@example.com"
echo " Password: password123"
else
echo -e "${YELLOW}⚠️ Database might already be seeded${NC}"
fi
echo ""
# Test login
echo "🔐 Testing authentication..."
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "alice@example.com", "password": "password123"}')
if echo "$LOGIN_RESPONSE" | grep -q "access_token"; then
echo -e "${GREEN}✅ Login endpoint working${NC}"
# Extract token
TOKEN=$(echo "$LOGIN_RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin)['access_token'])" 2>/dev/null)
if [ -n "$TOKEN" ]; then
# Test authenticated endpoint
echo "🔐 Testing authenticated endpoint..."
WALLET_RESPONSE=$(curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8000/api/v1/wallet/)
if echo "$WALLET_RESPONSE" | grep -q "balance"; then
echo -e "${GREEN}✅ Authenticated endpoints working${NC}"
fi
fi
else
echo -e "${RED}❌ Login failed${NC}"
echo "Response: $LOGIN_RESPONSE"
fi
echo ""
# Verify blockchain files in containers
echo "⛓️ Checking blockchain integration..."
BACKEND_BLOCKCHAIN=$(docker compose exec -T backend ls app/blockchain/services/ 2>/dev/null | wc -l)
FRONTEND_BLOCKCHAIN=$(docker compose exec -T frontend ls src/blockchain/hooks/ 2>/dev/null | wc -l)
if [ "$BACKEND_BLOCKCHAIN" -gt 3 ]; then
echo -e "${GREEN}✅ Backend blockchain services present ($BACKEND_BLOCKCHAIN files)${NC}"
else
echo -e "${RED}❌ Backend blockchain services missing${NC}"
fi
if [ "$FRONTEND_BLOCKCHAIN" -gt 2 ]; then
echo -e "${GREEN}✅ Frontend blockchain hooks present ($FRONTEND_BLOCKCHAIN files)${NC}"
else
echo -e "${RED}❌ Frontend blockchain hooks missing${NC}"
fi
echo ""
# Check for errors in logs
echo "📝 Checking logs for errors..."
BACKEND_ERRORS=$(docker compose logs backend 2>&1 | grep -i "error" | grep -v "ERROR_HANDLING" | wc -l)
FRONTEND_ERRORS=$(docker compose logs frontend 2>&1 | grep -i "error" | grep -v "node_modules" | wc -l)
if [ "$BACKEND_ERRORS" -eq 0 ]; then
echo -e "${GREEN}✅ No backend errors${NC}"
else
echo -e "${YELLOW}⚠️ Found $BACKEND_ERRORS backend error messages${NC}"
fi
if [ "$FRONTEND_ERRORS" -eq 0 ]; then
echo -e "${GREEN}✅ No frontend errors${NC}"
else
echo -e "${YELLOW}⚠️ Found $FRONTEND_ERRORS frontend error messages${NC}"
fi
echo ""
# Summary
echo "=============================="
echo "📊 Test Summary"
echo "=============================="
echo ""
echo "🌐 Access Points:"
echo " Frontend: http://localhost:5173"
echo " Backend API Docs: http://localhost:8000/docs"
echo ""
echo "👤 Test Credentials:"
echo " Email: alice@example.com"
echo " Password: password123"
echo ""
echo "🔧 Useful Commands:"
echo " View logs: docker compose logs -f"
echo " Stop services: docker compose down"
echo " Restart: docker compose restart"
echo " Shell access: docker compose exec backend bash"
echo ""
if [ "$BACKEND_STATUS" = "200" ] && [ "$FRONTEND_STATUS" = "200" ]; then
echo -e "${GREEN}🎉 Docker deployment successful!${NC}"
echo ""
echo "Next steps:"
echo "1. Open http://localhost:5173 in your browser"
echo "2. Login with test credentials"
echo "3. Check for blockchain badges (⛓️) in the UI"
echo "4. Look for 'Connect Wallet' button in header"
echo "5. Verify gas estimate panels in bet creation"
exit 0
else
echo -e "${RED}⚠️ Some services may not be fully ready${NC}"
echo "Check logs with: docker compose logs -f"
exit 1
fi