185 lines
5.8 KiB
Bash
Raw Normal View History

2025-09-25 06:37:51 +02:00
#!/bin/bash
# Comprehensive test script for routing reliability
set -e
echo "=== Comprehensive Routing Test ==="
echo "This test verifies that /dashboard and /api/stats are ALWAYS handled internally"
echo ""
# Kill any existing proxy
pkill -f rproxy || true
sleep 1
# Start the proxy with debug output
echo "Starting proxy with debug logging..."
DEBUG=1 ./rproxy > proxy.log 2>&1 &
PROXY_PID=$!
sleep 2
# Check if proxy is running
if ! ps -p $PROXY_PID > /dev/null; then
echo "ERROR: Proxy failed to start"
cat proxy.log
exit 1
fi
echo "Proxy started with PID: $PROXY_PID"
echo ""
# Function to test a URL and check response
test_url() {
local url=$1
local expected_pattern=$2
local test_name=$3
echo "Testing: $test_name"
response=$(curl -s -w "\nHTTP_CODE:%{http_code}" "$url" 2>/dev/null || true)
http_code=$(echo "$response" | grep "HTTP_CODE:" | cut -d: -f2)
body=$(echo "$response" | grep -v "HTTP_CODE:")
if [ "$http_code" = "200" ]; then
if echo "$body" | grep -q "$expected_pattern"; then
echo " ✓ Success: Got expected response"
return 0
else
echo " ✗ FAIL: Got 200 but wrong content"
echo " Expected pattern: $expected_pattern"
echo " Got: ${body:0:100}..."
return 1
fi
else
echo " ✗ FAIL: Got HTTP $http_code instead of 200"
return 1
fi
}
# Run tests
echo "=== Test 1: Basic Dashboard Access ==="
test_url "http://localhost:8888/dashboard" "Reverse Proxy Monitor" "Dashboard"
echo ""
echo "=== Test 2: Basic API Stats Access ==="
test_url "http://localhost:8888/api/stats" "cpu_percent" "API Stats"
echo ""
echo "=== Test 3: Multiple Sequential Dashboard Requests ==="
for i in {1..5}; do
test_url "http://localhost:8888/dashboard" "Reverse Proxy Monitor" "Dashboard request $i"
done
echo ""
echo "=== Test 4: Multiple Sequential API Requests ==="
for i in {1..5}; do
test_url "http://localhost:8888/api/stats" "cpu_percent" "API request $i"
done
echo ""
echo "=== Test 5: Mixed Dashboard and API Requests ==="
for i in {1..3}; do
test_url "http://localhost:8888/dashboard" "Reverse Proxy Monitor" "Dashboard request $i"
test_url "http://localhost:8888/api/stats" "cpu_percent" "API request $i"
done
echo ""
echo "=== Test 6: Concurrent Dashboard Requests ==="
echo "Sending 10 concurrent dashboard requests..."
for i in {1..10}; do
(
response=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:8888/dashboard" 2>/dev/null)
if [ "$response" = "200" ]; then
echo " Request $i: ✓ 200 OK"
else
echo " Request $i: ✗ Got $response"
fi
) &
done
wait
echo ""
echo "=== Test 7: Concurrent API Requests ==="
echo "Sending 10 concurrent API requests..."
for i in {1..10}; do
(
response=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:8888/api/stats" 2>/dev/null)
if [ "$response" = "200" ]; then
echo " Request $i: ✓ 200 OK"
else
echo " Request $i: ✗ Got $response"
fi
) &
done
wait
echo ""
echo "=== Test 8: Pipelined Requests (Keep-Alive) ==="
echo "Testing pipelined requests with keep-alive..."
(echo -ne "GET /dashboard HTTP/1.1\r\nHost: localhost\r\n\r\nGET /api/stats HTTP/1.1\r\nHost: localhost\r\n\r\n" | nc localhost 8888 | grep -E "(Reverse Proxy Dashboard|vhost_stats)" | wc -l) > pipeline_result.txt 2>&1
pipeline_count=$(cat pipeline_result.txt)
if [ "$pipeline_count" = "2" ]; then
echo " ✓ Both pipelined requests were handled correctly"
else
echo " ✗ FAIL: Only $pipeline_count/2 pipelined requests handled correctly"
fi
echo ""
echo "=== Test 9: Rapid Fire Mixed Requests ==="
echo "Sending 50 rapid requests mixing dashboard, API, and proxy requests..."
success=0
fail=0
for i in {1..50}; do
case $((i % 3)) in
0) url="http://localhost:8888/dashboard" ;;
1) url="http://localhost:8888/api/stats" ;;
2) url="http://localhost:8888/" ;; # This should be proxied
esac
response=$(curl -s -o /dev/null -w "%{http_code}" "$url" 2>/dev/null || echo "000")
if [ "$response" = "200" ] || [ "$response" = "502" ]; then
((success++))
else
((fail++))
echo " Request $i to $url failed with code: $response"
fi
done
echo " Results: $success successful, $fail failed"
echo ""
echo "=== Test 10: Check Routing Log Patterns ==="
echo "Analyzing proxy log for routing decisions..."
dashboard_internal=$(grep -c "ROUTING-INTERNAL.*DASHBOARD" proxy.log || true)
api_internal=$(grep -c "ROUTING-INTERNAL.*API STATS" proxy.log || true)
dashboard_forward=$(grep -c "ROUTING-FORWARD.*dashboard" proxy.log || true)
api_forward=$(grep -c "ROUTING-FORWARD.*api/stats" proxy.log || true)
echo " Dashboard handled internally: $dashboard_internal times"
echo " API stats handled internally: $api_internal times"
echo " Dashboard incorrectly forwarded: $dashboard_forward times"
echo " API stats incorrectly forwarded: $api_forward times"
if [ "$dashboard_forward" -gt 0 ] || [ "$api_forward" -gt 0 ]; then
echo " ✗ FAIL: Internal routes were incorrectly forwarded!"
echo ""
echo "=== Showing incorrect forwarding logs ==="
grep "ROUTING-FORWARD.*dashboard\|ROUTING-FORWARD.*api/stats" proxy.log | head -10 || true
else
echo " ✓ Success: All internal routes handled correctly"
fi
echo ""
echo "=== Cleanup ==="
kill $PROXY_PID 2>/dev/null || true
wait $PROXY_PID 2>/dev/null || true
echo "Proxy stopped"
echo ""
echo "=== Test Summary ==="
if [ "$dashboard_forward" -gt 0 ] || [ "$api_forward" -gt 0 ]; then
echo "❌ TESTS FAILED: Internal routes were incorrectly forwarded"
echo " Check proxy.log for details"
exit 1
else
echo "✅ ALL TESTS PASSED: Internal routes are reliably handled"
exit 0
fi