12 KiB
Simple Testing Guide - Webhook Catcher
Quick commands to test the webhook catcher deployment.
Replace YOUR-DEPLOYMENT-URL with your actual deployment URL
🧪 Basic Tests
Health Check
# Unix/Linux/macOS
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz
# Windows CMD
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz
# Windows PowerShell
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz"
List Available Webhooks (for replay testing)
# Unix/Linux/macOS
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/webhooks
# Windows CMD
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/webhooks
# Windows PowerShell
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhooks"
Simple Webhook Test
# Unix/Linux/macOS
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" \
-H "Content-Type: application/json" \
-d '{"event": "test", "message": "Hello World!"}'
# Windows CMD
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" ^
-H "Content-Type: application/json" ^
-d "{\"event\": \"test\", \"message\": \"Hello World!\"}"
# Windows PowerShell
$body = @{
event = "test"
message = "Hello World!"
timestamp = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ")
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" `
-Method POST -Body $body -ContentType "application/json"
Complex JSON Test
# Unix/Linux/macOS
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" \
-H "Content-Type: application/json" \
-d '{"user": {"id": 123, "name": "Hello"}, "event": "signup"}'
# Windows CMD
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" ^
-H "Content-Type: application/json" ^
-d "{\"user\": {\"id\": 123, \"name\": \"Hello\"}, \"event\": \"signup\"}"
# Windows PowerShell
$body = @{
user = @{
id = 123
name = "testuser"
email = "test@example.com"
}
event = "signup"
timestamp = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ")
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" `
-Method POST -Body $body -ContentType "application/json"
GitHub-style Test
# Unix/Linux/macOS
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" \
-H "Content-Type: application/json" \
-H "X-GitHub-Event: push" \
-d '{"action": "opened", "repository": {"name": "test-repo"}}'
# Windows CMD
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" ^
-H "Content-Type: application/json" ^
-H "X-GitHub-Event: push" ^
-d "{\"action\": \"opened\", \"repository\": {\"name\": \"test-repo\"}}"
# Windows PowerShell
$body = @{
action = "opened"
repository = @{
name = "test-repo"
full_name = "user/test-repo"
}
pull_request = @{
title = "Test Pull Request"
user = @{ login = "testuser" }
}
} | ConvertTo-Json -Depth 3
$headers = @{
"Content-Type" = "application/json"
"X-GitHub-Event" = "push"
}
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" `
-Method POST -Body $body -Headers $headers
🔒 Admin Protection Tests
Check Admin Status
# Unix/Linux/macOS
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz
# Windows CMD
curl https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz
# Windows PowerShell
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/healthz"
Look for: "admin_protected": true/false
Test Clear Without Token (Should Fail if Protected)
# Unix/Linux/macOS
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear"
# Windows CMD
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear"
# Windows PowerShell
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear" -Method POST
Expected if protected: 401 Unauthorized
Test Clear With Admin Token (Should Work)
# Unix/Linux/macOS
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear" \
-H "X-Admin-Token: your-secret-admin-token-123"
# Windows CMD
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear" ^
-H "X-Admin-Token: your-secret-admin-token-123"
# Windows PowerShell
$headers = @{"X-Admin-Token" = "your-secret-admin-token-123"}
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/clear" `
-Method POST -Headers $headers
Expected: {"status": "cleared"}
Test Replay With Admin Token
Step 1: Send a webhook to replay
# Windows PowerShell
$testBody = @{
test = "replay"
timestamp = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ")
message = "This will be replayed"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhook" `
-Method POST -Body $testBody -ContentType "application/json"
Step 2: List webhooks to get the ID
# Windows PowerShell
$webhooks = Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/webhooks"
Write-Host "Available webhooks:"
$webhooks.webhooks | Format-Table id, timestamp, body_preview
Step 3: Replay the webhook (use the correct ID from step 2)
# Unix/Linux/macOS - Replace {ID} with actual webhook ID
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/replay/{ID}?target_url=https://httpbin.org/post" \
-H "X-Admin-Token: your-secret-admin-token-123"
# Windows CMD - Replace {ID} with actual webhook ID
curl -X POST "https://YOUR-DEPLOYMENT-URL.up.railway.app/replay/{ID}?target_url=https://httpbin.org/post" ^
-H "X-Admin-Token: your-secret-admin-token-123"
# Windows PowerShell - Replace {ID} with actual webhook ID from step 2
$webhookId = 1 # Use the actual ID from the list above
$headers = @{"X-Admin-Token" = "your-secret-admin-token-123"}
Invoke-RestMethod -Uri "https://YOUR-DEPLOYMENT-URL.up.railway.app/replay/$webhookId?target_url=https://httpbin.org/post" `
-Method POST -Headers $headers
🧪 Complete Test Workflow Scripts
PowerShell Complete Test
Save as complete-test.ps1:
param(
[string]$BaseUrl = "https://YOUR-DEPLOYMENT-URL.up.railway.app",
[string]$AdminToken = "your-secret-admin-token-123"
)
Write-Host "🚀 Testing Webhook Catcher: $BaseUrl" -ForegroundColor Green
# 1. Health Check
Write-Host "`n1. Health Check" -ForegroundColor Yellow
try {
$health = Invoke-RestMethod -Uri "$BaseUrl/healthz"
Write-Host "✅ Status: $($health.status)" -ForegroundColor Green
Write-Host "✅ Admin Protected: $($health.admin_protected)" -ForegroundColor Green
} catch {
Write-Host "❌ Health check failed: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
# 2. Send Test Webhook
Write-Host "`n2. Sending Test Webhook" -ForegroundColor Yellow
$testBody = @{
event = "complete-test"
message = "PowerShell test webhook"
timestamp = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ")
source = "PowerShell Script"
} | ConvertTo-Json
try {
$webhookResult = Invoke-RestMethod -Uri "$BaseUrl/webhook" `
-Method POST -Body $testBody -ContentType "application/json"
Write-Host "✅ Webhook sent: $($webhookResult.status)" -ForegroundColor Green
} catch {
Write-Host "❌ Webhook send failed: $($_.Exception.Message)" -ForegroundColor Red
}
# 3. List Available Webhooks
Write-Host "`n3. Listing Available Webhooks" -ForegroundColor Yellow
try {
$webhooks = Invoke-RestMethod -Uri "$BaseUrl/webhooks"
Write-Host "✅ Found $($webhooks.count) webhooks" -ForegroundColor Green
if ($webhooks.count -gt 0) {
$latestId = $webhooks.webhooks[0].id
Write-Host "📋 Latest webhook ID: $latestId" -ForegroundColor Cyan
# 4. Test Replay
Write-Host "`n4. Testing Webhook Replay" -ForegroundColor Yellow
$headers = @{"X-Admin-Token" = $AdminToken}
try {
$replayResult = Invoke-RestMethod -Uri "$BaseUrl/replay/$latestId?target_url=https://httpbin.org/post" `
-Method POST -Headers $headers
Write-Host "✅ Replay successful: $($replayResult.status)" -ForegroundColor Green
Write-Host "📊 Response status: $($replayResult.response_status)" -ForegroundColor Cyan
} catch {
Write-Host "❌ Replay failed: $($_.Exception.Message)" -ForegroundColor Red
}
}
} catch {
Write-Host "❌ Webhook listing failed: $($_.Exception.Message)" -ForegroundColor Red
}
Write-Host "`n🎉 Test complete! Check your webhook UI at: $BaseUrl" -ForegroundColor Magenta
Write-Host "📋 View logs at: $BaseUrl/logs/view" -ForegroundColor Magenta
Unix/Linux/macOS Test Script
Save as complete-test.sh:
#!/bin/bash
BASE_URL="${1:-https://YOUR-DEPLOYMENT-URL.up.railway.app}"
ADMIN_TOKEN="${2:-your-secret-admin-token-123}"
echo "🚀 Testing Webhook Catcher: $BASE_URL"
# 1. Health Check
echo "1. Health Check"
HEALTH=$(curl -s "$BASE_URL/healthz")
echo "✅ Health: $HEALTH"
# 2. Send Test Webhook
echo "2. Sending Test Webhook"
WEBHOOK_RESULT=$(curl -s -X POST "$BASE_URL/webhook" \
-H "Content-Type: application/json" \
-d "{\"event\": \"bash-test\", \"message\": \"Hello from bash!\", \"timestamp\": \"$(date -Iseconds)\"}")
echo "✅ Webhook: $WEBHOOK_RESULT"
# 3. List Webhooks
echo "3. Listing Webhooks"
WEBHOOKS=$(curl -s "$BASE_URL/webhooks")
echo "✅ Webhooks: $WEBHOOKS"
# 4. Get latest webhook ID and replay
LATEST_ID=$(echo "$WEBHOOKS" | jq -r '.webhooks[0].id // empty')
if [ ! -z "$LATEST_ID" ]; then
echo "4. Replaying webhook ID: $LATEST_ID"
REPLAY_RESULT=$(curl -s -X POST "$BASE_URL/replay/$LATEST_ID?target_url=https://httpbin.org/post" \
-H "X-Admin-Token: $ADMIN_TOKEN")
echo "✅ Replay: $REPLAY_RESULT"
fi
echo "🎉 Test complete! Check your webhook UI at: $BASE_URL"
🌐 Web Interface Testing
- Visit:
https://YOUR-DEPLOYMENT-URL.up.railway.app/ - Check logs:
https://YOUR-DEPLOYMENT-URL.up.railway.app/logs/view - Send test webhook using the built-in form
- Try search, export, and replay features
- Test admin operations (clear, replay) with/without protection
✅ Expected Results
- All webhook tests return
{"status": "success", ...} - Webhooks appear in real-time on the web interface
/webhooksendpoint lists available webhook IDs- Search and export functions work
- Health check returns
{"status": "ok", "admin_protected": true/false} - Admin operations respect token protection if enabled
- Replay works with correct webhook IDs from
/webhooksendpoint
🚨 Common Issues & Solutions
Issue: "Webhook not found" during replay
Solution: Use GET /webhooks to see available webhook IDs first
Issue: "Internal Server Error" during replay
Solution: Check that the target URL is valid (starts with http:// or https://)
Issue: Admin token not working
Solution: Ensure ADMIN_TOKEN environment variable is set correctly
Issue: No webhooks showing up
Solution: Send a test webhook first using the /webhook endpoint
🏆 Key Features to Evaluate
- Multi-service architecture (if FORWARD_WEBHOOK_URL is configured)
- Real-time web interface with live updates
- Multiple webhook formats (JSON, plain text, form data)
- Production features (search, export, replay, admin protection)
- Security features (admin token protection for sensitive operations)
- Cross-platform compatibility (Unix, Windows CMD, PowerShell)
- Error handling (proper HTTP status codes and error messages)
Total testing time: ~5 minutes
📝 Quick Setup
⚡ This project is optimized for Railway, but you can deploy it anywhere you like.
- Deploy using your preferred platform (Railway recommended for easiest setup)
- Copy your deployment URL from your hosting dashboard
- Replace
YOUR-DEPLOYMENT-URLin commands above - Run tests to evaluate the webhook catcher
- Test on your preferred platform (Unix/Windows/PowerShell)
- Use
/webhooksendpoint to get valid IDs before replay testing