142 lines
4.5 KiB
Bash
142 lines
4.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Deployment Testing Script for Miracles in Motion
|
||
|
|
# Tests all endpoints and verifies deployment status
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Colors for output
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
# Configuration
|
||
|
|
STATIC_WEB_APP_URL="https://lemon-water-015cb3010.3.azurestaticapps.net"
|
||
|
|
FUNCTION_APP_URL="https://mim-prod-igiay4-func.azurewebsites.net"
|
||
|
|
RESOURCE_GROUP="rg-miraclesinmotion-prod"
|
||
|
|
|
||
|
|
echo -e "${GREEN}🧪 Starting Deployment Tests${NC}"
|
||
|
|
echo "=================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test counter
|
||
|
|
TESTS_PASSED=0
|
||
|
|
TESTS_FAILED=0
|
||
|
|
|
||
|
|
# Function to test endpoint
|
||
|
|
test_endpoint() {
|
||
|
|
local url=$1
|
||
|
|
local name=$2
|
||
|
|
local expected_code=${3:-200}
|
||
|
|
|
||
|
|
echo -n "Testing $name... "
|
||
|
|
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$url" || echo "000")
|
||
|
|
|
||
|
|
if [ "$HTTP_CODE" = "$expected_code" ]; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC} (HTTP $HTTP_CODE)"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
return 0
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ FAIL${NC} (HTTP $HTTP_CODE, expected $expected_code)"
|
||
|
|
((TESTS_FAILED++))
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# Test Static Web App
|
||
|
|
echo -e "${YELLOW}📱 Testing Static Web App${NC}"
|
||
|
|
test_endpoint "$STATIC_WEB_APP_URL" "Static Web App Homepage"
|
||
|
|
test_endpoint "$STATIC_WEB_APP_URL/index.html" "Static Web App Index"
|
||
|
|
test_endpoint "$STATIC_WEB_APP_URL/manifest.webmanifest" "PWA Manifest" 200
|
||
|
|
|
||
|
|
# Test Function App
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}⚡ Testing Function App${NC}"
|
||
|
|
test_endpoint "$FUNCTION_APP_URL" "Function App Homepage"
|
||
|
|
test_endpoint "$FUNCTION_APP_URL/api/health" "Function App Health Check" 200
|
||
|
|
|
||
|
|
# Test Azure Resources
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}☁️ Testing Azure Resources${NC}"
|
||
|
|
|
||
|
|
# Check Static Web App status
|
||
|
|
echo -n "Checking Static Web App status... "
|
||
|
|
SWA_STATUS=$(az staticwebapp show --name mim-prod-igiay4-web --resource-group $RESOURCE_GROUP --query "properties.provisioningState" -o tsv 2>/dev/null || echo "Unknown")
|
||
|
|
if [ "$SWA_STATUS" = "Succeeded" ] || [ "$SWA_STATUS" = "Ready" ]; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC} (Status: $SWA_STATUS)"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ WARNING${NC} (Status: $SWA_STATUS)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check Function App status
|
||
|
|
echo -n "Checking Function App status... "
|
||
|
|
FA_STATUS=$(az functionapp show --name mim-prod-igiay4-func --resource-group $RESOURCE_GROUP --query "state" -o tsv 2>/dev/null || echo "Unknown")
|
||
|
|
if [ "$FA_STATUS" = "Running" ]; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC} (Status: $FA_STATUS)"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ FAIL${NC} (Status: $FA_STATUS)"
|
||
|
|
((TESTS_FAILED++))
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check Key Vault
|
||
|
|
echo -n "Checking Key Vault... "
|
||
|
|
KV_EXISTS=$(az keyvault show --name mim-prod-igiay4-kv --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null || echo "")
|
||
|
|
if [ -n "$KV_EXISTS" ]; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC}"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ FAIL${NC}"
|
||
|
|
((TESTS_FAILED++))
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check Application Insights
|
||
|
|
echo -n "Checking Application Insights... "
|
||
|
|
AI_EXISTS=$(az monitor app-insights component show --app mim-prod-igiay4-appinsights --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null || echo "")
|
||
|
|
if [ -n "$AI_EXISTS" ]; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC}"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ FAIL${NC}"
|
||
|
|
((TESTS_FAILED++))
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Test SSL/TLS
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}🔒 Testing SSL/TLS${NC}"
|
||
|
|
echo -n "Testing HTTPS on Static Web App... "
|
||
|
|
if echo | openssl s_client -connect lemon-water-015cb3010.3.azurestaticapps.net:443 -servername lemon-water-015cb3010.3.azurestaticapps.net 2>/dev/null | grep -q "Verify return code: 0"; then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC}"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ WARNING${NC} (Could not verify SSL)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Test Performance
|
||
|
|
echo ""
|
||
|
|
echo -e "${YELLOW}⚡ Testing Performance${NC}"
|
||
|
|
echo -n "Testing Static Web App response time... "
|
||
|
|
RESPONSE_TIME=$(curl -s -o /dev/null -w "%{time_total}" --max-time 10 "$STATIC_WEB_APP_URL" || echo "999")
|
||
|
|
if (( $(echo "$RESPONSE_TIME < 3.0" | bc -l) )); then
|
||
|
|
echo -e "${GREEN}✅ PASS${NC} (${RESPONSE_TIME}s)"
|
||
|
|
((TESTS_PASSED++))
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ WARNING${NC} (${RESPONSE_TIME}s - may be slow)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Summary
|
||
|
|
echo ""
|
||
|
|
echo "=================================="
|
||
|
|
echo -e "${GREEN}Tests Passed: $TESTS_PASSED${NC}"
|
||
|
|
if [ $TESTS_FAILED -gt 0 ]; then
|
||
|
|
echo -e "${RED}Tests Failed: $TESTS_FAILED${NC}"
|
||
|
|
exit 1
|
||
|
|
else
|
||
|
|
echo -e "${GREEN}Tests Failed: $TESTS_FAILED${NC}"
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}✅ All tests passed!${NC}"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|