All checks were successful
HAProxy Manager Build and Push / Build-and-Push (push) Successful in 37s
186 lines
6.6 KiB
Bash
Executable File
186 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# HAProxy Manager Certificate Request Test Script
|
||
# This script tests the new certificate request endpoint
|
||
|
||
BASE_URL="http://localhost:8000"
|
||
API_KEY="${HAPROXY_API_KEY:-}"
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Function to print colored output
|
||
print_status() {
|
||
local status=$1
|
||
local message=$2
|
||
|
||
case $status in
|
||
"PASS")
|
||
echo -e "${GREEN}✓ PASS${NC}: $message"
|
||
;;
|
||
"FAIL")
|
||
echo -e "${RED}✗ FAIL${NC}: $message"
|
||
;;
|
||
"INFO")
|
||
echo -e "${BLUE}ℹ INFO${NC}: $message"
|
||
;;
|
||
"WARN")
|
||
echo -e "${YELLOW}⚠ WARN${NC}: $message"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Function to make API request
|
||
api_request() {
|
||
local method=$1
|
||
local endpoint=$2
|
||
local data=$3
|
||
|
||
local headers=""
|
||
if [ -n "$API_KEY" ]; then
|
||
headers="-H \"Authorization: Bearer $API_KEY\""
|
||
fi
|
||
|
||
if [ -n "$data" ]; then
|
||
headers="$headers -H \"Content-Type: application/json\" -d '$data'"
|
||
fi
|
||
|
||
eval "curl -s -w \"%{http_code}\" -o /tmp/cert_request_response.json $headers -X $method $BASE_URL$endpoint"
|
||
}
|
||
|
||
# Test single domain certificate request
|
||
test_single_domain_request() {
|
||
print_status "INFO" "Testing single domain certificate request..."
|
||
|
||
local test_domain="test-$(date +%s).example.com"
|
||
local data="{\"domains\": [\"$test_domain\"], \"force_renewal\": false, \"include_www\": false}"
|
||
|
||
local response=$(api_request "POST" "/api/certificates/request" "$data")
|
||
local status_code=$(echo "$response" | tail -c 4)
|
||
|
||
if [ "$status_code" = "200" ] || [ "$status_code" = "207" ] || [ "$status_code" = "401" ]; then
|
||
print_status "PASS" "Single domain request endpoint responded (status: $status_code)"
|
||
|
||
if [ "$status_code" != "401" ]; then
|
||
# Parse response
|
||
local success_count=$(jq -r '.summary.successful' /tmp/cert_request_response.json 2>/dev/null)
|
||
local failed_count=$(jq -r '.summary.failed' /tmp/cert_request_response.json 2>/dev/null)
|
||
|
||
if [ "$success_count" = "1" ]; then
|
||
print_status "PASS" "Certificate request successful for $test_domain"
|
||
elif [ "$failed_count" = "1" ]; then
|
||
print_status "WARN" "Certificate request failed for $test_domain (expected for test domain)"
|
||
else
|
||
print_status "FAIL" "Unexpected response format"
|
||
fi
|
||
fi
|
||
else
|
||
print_status "FAIL" "Single domain request failed with status $status_code"
|
||
fi
|
||
}
|
||
|
||
# Test multiple domain certificate request
|
||
test_multiple_domain_request() {
|
||
print_status "INFO" "Testing multiple domain certificate request..."
|
||
|
||
local test_domains="[\"test1-$(date +%s).example.com\", \"test2-$(date +%s).example.com\"]"
|
||
local data="{\"domains\": $test_domains, \"force_renewal\": false, \"include_www\": true}"
|
||
|
||
local response=$(api_request "POST" "/api/certificates/request" "$data")
|
||
local status_code=$(echo "$response" | tail -c 4)
|
||
|
||
if [ "$status_code" = "200" ] || [ "$status_code" = "207" ] || [ "$status_code" = "401" ]; then
|
||
print_status "PASS" "Multiple domain request endpoint responded (status: $status_code)"
|
||
|
||
if [ "$status_code" != "401" ]; then
|
||
local total=$(jq -r '.summary.total' /tmp/cert_request_response.json 2>/dev/null)
|
||
if [ "$total" = "2" ]; then
|
||
print_status "PASS" "Multiple domain request processed correctly"
|
||
else
|
||
print_status "FAIL" "Multiple domain request response format error"
|
||
fi
|
||
fi
|
||
else
|
||
print_status "FAIL" "Multiple domain request failed with status $status_code"
|
||
fi
|
||
}
|
||
|
||
# Test certificate request with force renewal
|
||
test_force_renewal_request() {
|
||
print_status "INFO" "Testing certificate request with force renewal..."
|
||
|
||
local test_domain="test-force-$(date +%s).example.com"
|
||
local data="{\"domains\": [\"$test_domain\"], \"force_renewal\": true, \"include_www\": false}"
|
||
|
||
local response=$(api_request "POST" "/api/certificates/request" "$data")
|
||
local status_code=$(echo "$response" | tail -c 4)
|
||
|
||
if [ "$status_code" = "200" ] || [ "$status_code" = "207" ] || [ "$status_code" = "401" ]; then
|
||
print_status "PASS" "Force renewal request endpoint responded (status: $status_code)"
|
||
else
|
||
print_status "FAIL" "Force renewal request failed with status $status_code"
|
||
fi
|
||
}
|
||
|
||
# Test invalid request (no domains)
|
||
test_invalid_request() {
|
||
print_status "INFO" "Testing invalid request (no domains)..."
|
||
|
||
local data="{\"domains\": [], \"force_renewal\": false, \"include_www\": false}"
|
||
|
||
local response=$(api_request "POST" "/api/certificates/request" "$data")
|
||
local status_code=$(echo "$response" | tail -c 4)
|
||
|
||
if [ "$status_code" = "400" ] || [ "$status_code" = "401" ]; then
|
||
print_status "PASS" "Invalid request properly rejected (status: $status_code)"
|
||
else
|
||
print_status "FAIL" "Invalid request not properly rejected (status: $status_code)"
|
||
fi
|
||
}
|
||
|
||
# Test certificate status endpoint
|
||
test_certificate_status() {
|
||
print_status "INFO" "Testing certificate status endpoint..."
|
||
|
||
local response=$(api_request "GET" "/api/certificates/status")
|
||
local status_code=$(echo "$response" | tail -c 4)
|
||
|
||
if [ "$status_code" = "200" ] || [ "$status_code" = "401" ]; then
|
||
print_status "PASS" "Certificate status endpoint responded (status: $status_code)"
|
||
|
||
if [ "$status_code" != "401" ]; then
|
||
local cert_count=$(jq -r '.certificates | length' /tmp/cert_request_response.json 2>/dev/null)
|
||
print_status "INFO" "Found $cert_count certificates in status"
|
||
fi
|
||
else
|
||
print_status "FAIL" "Certificate status failed with status $status_code"
|
||
fi
|
||
}
|
||
|
||
# Main test execution
|
||
main() {
|
||
echo "HAProxy Manager Certificate Request Test Suite"
|
||
echo "=============================================="
|
||
echo "Base URL: $BASE_URL"
|
||
echo "API Key: ${API_KEY:-"Not configured"}"
|
||
echo ""
|
||
|
||
test_invalid_request
|
||
test_single_domain_request
|
||
test_multiple_domain_request
|
||
test_force_renewal_request
|
||
test_certificate_status
|
||
|
||
echo ""
|
||
echo "Test completed. Check /tmp/cert_request_response.json for detailed responses."
|
||
echo ""
|
||
echo "Note: Certificate requests for test domains will likely fail as they don't"
|
||
echo "resolve to this server. This is expected behavior for testing."
|
||
}
|
||
|
||
# Run tests
|
||
main "$@" |