diff --git a/products/integration-test.sh b/products/integration-test.sh index 64e53c0..33aaafc 100755 --- a/products/integration-test.sh +++ b/products/integration-test.sh @@ -146,32 +146,6 @@ code=$(curl -s -o /dev/null -w "%{http_code}" "$(url 3002 /api/v1/dashboard)" \ resp=$(api GET 3002 /api/v1/stacks "$DRIFT_TOKEN") echo "$resp" | grep -q "\[\]" && check "List stacks (empty)" "pass" || check "List stacks" "fail" -# ─── Cross-service: API Key generation ─── -echo -e "\n${YELLOW}Cross-service: API Key Auth${NC}" -resp=$(api POST 3003 /api/v1/auth/api-keys "$ALERT_TOKEN" -d "{}") -API_KEY=$(echo "$resp" | grep -o '"api_key":"[^"]*' | cut -d'"' -f4) -if [ -n "$API_KEY" ]; then - check "Generate API key" "pass" - # Use API key to hit an endpoint - code=$(curl -s -o /dev/null -w "%{http_code}" "$(url 3003 /api/v1/incidents)" \ - -H "X-API-Key: $API_KEY") - [ "$code" = "200" ] && check "Auth via API key" "pass" || check "Auth via API key (HTTP $code)" "fail" -else - check "Generate API key" "fail" - check "Auth via API key (skipped)" "fail" -fi - -# Summary -echo "" -echo -e "${YELLOW}═══════════════════════════${NC}" -if [ "$PASSED" -eq "$TOTAL" ]; then - echo -e "${GREEN}ALL PASSED: $PASSED/$TOTAL${NC}" - exit 0 -else - echo -e "${RED}$PASSED/$TOTAL passed ($((TOTAL - PASSED)) failed)${NC}" - exit 1 -fi - # ─── P3 Webhook Secrets Management ─── echo -e "\n${YELLOW}P3 Webhook Secrets Management (:3003)${NC}" @@ -202,3 +176,55 @@ echo "$resp" | grep -q "drift_score" && check "Stack drift history" "pass" || ch code=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE "$(url 3002 /api/v1/stacks/vpc-prod)" \ -H "Authorization: Bearer $DRIFT_TOKEN") [ "$code" = "200" ] && check "Delete stack" "pass" || check "Delete stack (HTTP $code)" "fail" + +# ─── P6 Runbook Execution ─── +echo -e "\n${YELLOW}P6 Runbook Execution (:3006)${NC}" + +# Get the runbook ID we created earlier +RUNBOOK_ID=$(api GET 3006 /api/v1/runbooks "$RUN_TOKEN" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4) +if [ -n "$RUNBOOK_ID" ]; then + resp=$(api POST 3006 "/api/v1/runbooks/$RUNBOOK_ID/execute" "$RUN_TOKEN" \ + -d '{"dry_run":true,"variables":{"target":"web-01"}}') + echo "$resp" | grep -q "pending\|execution_id" && check "Execute runbook (dry run)" "pass" || check "Execute runbook (dry run)" "fail" + + EXEC_ID=$(echo "$resp" | grep -o '"execution_id":"[^"]*' | cut -d'"' -f4) + if [ -n "$EXEC_ID" ]; then + resp=$(api GET 3006 "/api/v1/executions/$EXEC_ID" "$RUN_TOKEN") + echo "$resp" | grep -q "pending\|dry_run" && check "Get execution status" "pass" || check "Get execution status" "fail" + else + check "Get execution status (no exec ID)" "fail" + fi + + resp=$(api GET 3006 "/api/v1/runbooks/$RUNBOOK_ID/executions" "$RUN_TOKEN") + echo "$resp" | grep -q "executions\|$EXEC_ID" && check "List runbook executions" "pass" || check "List runbook executions" "fail" +else + check "Execute runbook (no runbook found)" "fail" + check "Get execution status (skipped)" "fail" + check "List runbook executions (skipped)" "fail" +fi + +# ─── Cross-service: API Key generation ─── +echo -e "\n${YELLOW}Cross-service: API Key Auth${NC}" +resp=$(api POST 3003 /api/v1/auth/api-keys "$ALERT_TOKEN" -d "{}") +API_KEY=$(echo "$resp" | grep -o '"api_key":"[^"]*' | cut -d'"' -f4) +if [ -n "$API_KEY" ]; then + check "Generate API key" "pass" + # Use API key to hit an endpoint + code=$(curl -s -o /dev/null -w "%{http_code}" "$(url 3003 /api/v1/incidents)" \ + -H "X-API-Key: $API_KEY") + [ "$code" = "200" ] && check "Auth via API key" "pass" || check "Auth via API key (HTTP $code)" "fail" +else + check "Generate API key" "fail" + check "Auth via API key (skipped)" "fail" +fi + +# Summary +echo "" +echo -e "${YELLOW}═══════════════════════════${NC}" +if [ "$PASSED" -eq "$TOTAL" ]; then + echo -e "${GREEN}ALL PASSED: $PASSED/$TOTAL${NC}" + exit 0 +else + echo -e "${RED}$PASSED/$TOTAL passed ($((TOTAL - PASSED)) failed)${NC}" + exit 1 +fi