Add smoke test script for docker compose stack
This commit is contained in:
194
products/smoke-test.sh
Executable file
194
products/smoke-test.sh
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Smoke Test Script for Docker Compose Stack
|
||||
# Tests health endpoints, tenant creation, and key API endpoints for all services
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
BASE_URL="${BASE_URL:-localhost}"
|
||||
PROTOCOL="${PROTOCOL:-http}"
|
||||
TEST_EMAIL="smoke@dd0c.dev"
|
||||
TEST_PASSWORD="smoketest123!"
|
||||
TEST_TENANT="smoke-test"
|
||||
|
||||
# Counters
|
||||
TOTAL_CHECKS=0
|
||||
PASSED_CHECKS=0
|
||||
|
||||
# Help function
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Smoke Test Script for Docker Compose Stack
|
||||
|
||||
Usage: $0 [OPTIONS]
|
||||
|
||||
Options:
|
||||
--help Show this help message
|
||||
--base-url URL Set base URL (default: localhost)
|
||||
--protocol PROTO Set protocol (default: http)
|
||||
|
||||
Environment Variables:
|
||||
BASE_URL Override base URL (default: localhost)
|
||||
PROTOCOL Override protocol (default: http)
|
||||
|
||||
Examples:
|
||||
$0
|
||||
$0 --base-url example.com --protocol https
|
||||
BASE_URL=192.168.1.100 $0
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--base-url)
|
||||
BASE_URL="$2"
|
||||
shift 2
|
||||
;;
|
||||
--protocol)
|
||||
PROTOCOL="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Helper functions
|
||||
log_check() {
|
||||
local name=$1
|
||||
local status=$2
|
||||
((TOTAL_CHECKS++))
|
||||
|
||||
if [ "$status" = "pass" ]; then
|
||||
echo -e "${GREEN}✓${NC} $name"
|
||||
((PASSED_CHECKS++))
|
||||
else
|
||||
echo -e "${RED}✗${NC} $name"
|
||||
fi
|
||||
}
|
||||
|
||||
check_health() {
|
||||
local service=$1
|
||||
local check_cmd=$2
|
||||
|
||||
if eval "$check_cmd" > /dev/null 2>&1; then
|
||||
log_check "Health: $service" "pass"
|
||||
else
|
||||
log_check "Health: $service" "fail"
|
||||
fi
|
||||
}
|
||||
|
||||
create_tenant() {
|
||||
local port=$1
|
||||
local service=$2
|
||||
|
||||
local response=$(curl -s -X POST \
|
||||
"${PROTOCOL}://${BASE_URL}:${port}/api/v1/auth/signup" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"email\": \"${TEST_EMAIL}\",
|
||||
\"password\": \"${TEST_PASSWORD}\",
|
||||
\"tenant_name\": \"${TEST_TENANT}\"
|
||||
}" 2>/dev/null || echo "")
|
||||
|
||||
local token=$(echo "$response" | grep -o '"token":"[^"]*' | cut -d'"' -f4 || echo "")
|
||||
|
||||
if [ -n "$token" ]; then
|
||||
log_check "Tenant Creation: $service (port $port)" "pass"
|
||||
echo "$token"
|
||||
else
|
||||
log_check "Tenant Creation: $service (port $port)" "fail"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
test_endpoint() {
|
||||
local port=$1
|
||||
local service=$2
|
||||
local endpoint=$3
|
||||
local token=$4
|
||||
|
||||
if [ -z "$token" ]; then
|
||||
log_check "Endpoint: $service - $endpoint" "fail"
|
||||
return
|
||||
fi
|
||||
|
||||
local http_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
"${PROTOCOL}://${BASE_URL}:${port}${endpoint}" 2>/dev/null || echo "000")
|
||||
|
||||
if [ "$http_code" = "200" ] || [ "$http_code" = "201" ]; then
|
||||
log_check "Endpoint: $service - $endpoint" "pass"
|
||||
else
|
||||
log_check "Endpoint: $service - $endpoint (HTTP $http_code)" "fail"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
echo -e "${YELLOW}=== Smoke Test Starting ===${NC}\n"
|
||||
|
||||
# 1. Health Checks
|
||||
echo -e "${YELLOW}--- Health Checks ---${NC}"
|
||||
check_health "PostgreSQL" "pg_isready -h ${BASE_URL} 2>/dev/null"
|
||||
check_health "Redis" "redis-cli -h ${BASE_URL} ping > /dev/null 2>&1"
|
||||
|
||||
for port in 3003 3004 3005 3006; do
|
||||
check_health "HTTP Service (port $port)" "curl -s -o /dev/null -w '%{http_code}' ${PROTOCOL}://${BASE_URL}:${port}/health 2>/dev/null | grep -q '200'"
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
# 2. Tenant Creation & API Tests
|
||||
echo -e "${YELLOW}--- Tenant Creation & API Tests ---${NC}"
|
||||
|
||||
# P3 (port 3003)
|
||||
echo -e "\n${YELLOW}P3 (port 3003):${NC}"
|
||||
P3_TOKEN=$(create_tenant 3003 "P3")
|
||||
test_endpoint 3003 "P3" "/api/v1/incidents" "$P3_TOKEN"
|
||||
test_endpoint 3003 "P3" "/api/v1/summary" "$P3_TOKEN"
|
||||
|
||||
# P4 (port 3004)
|
||||
echo -e "\n${YELLOW}P4 (port 3004):${NC}"
|
||||
P4_TOKEN=$(create_tenant 3004 "P4")
|
||||
test_endpoint 3004 "P4" "/api/v1/services" "$P4_TOKEN"
|
||||
test_endpoint 3004 "P4" "/api/v1/discovery/history" "$P4_TOKEN"
|
||||
|
||||
# P5 (port 3005)
|
||||
echo -e "\n${YELLOW}P5 (port 3005):${NC}"
|
||||
P5_TOKEN=$(create_tenant 3005 "P5")
|
||||
test_endpoint 3005 "P5" "/api/v1/anomalies" "$P5_TOKEN"
|
||||
test_endpoint 3005 "P5" "/api/v1/baselines" "$P5_TOKEN"
|
||||
test_endpoint 3005 "P5" "/api/v1/governance" "$P5_TOKEN"
|
||||
|
||||
# P6 (port 3006)
|
||||
echo -e "\n${YELLOW}P6 (port 3006):${NC}"
|
||||
P6_TOKEN=$(create_tenant 3006 "P6")
|
||||
test_endpoint 3006 "P6" "/api/v1/runbooks" "$P6_TOKEN"
|
||||
test_endpoint 3006 "P6" "/api/v1/approvals" "$P6_TOKEN"
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo -e "${YELLOW}=== Summary ===${NC}"
|
||||
if [ $PASSED_CHECKS -eq $TOTAL_CHECKS ]; then
|
||||
echo -e "${GREEN}$PASSED_CHECKS/$TOTAL_CHECKS passed${NC}"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}$PASSED_CHECKS/$TOTAL_CHECKS passed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user