9.9 KiB
Webhook Testing Documentation
This document describes the comprehensive test suite for the Attune webhook system, covering both Phase 2 (basic functionality) and Phase 3 (advanced security features).
Test Files
1. crates/common/tests/webhook_tests.rs
Repository-level integration tests for webhook database operations.
Coverage:
- Webhook enable/disable functionality
- Webhook key generation and uniqueness
- Webhook key regeneration
- Finding triggers by webhook key
- Idempotent webhook enabling
Key Tests:
test_webhook_enable- Verifies webhook can be enabled and generates valid keytest_webhook_disable- Verifies webhook can be disabled while preserving keytest_webhook_key_regeneration- Tests key rotation functionalitytest_find_by_webhook_key- Tests lookup by webhook keytest_webhook_key_uniqueness- Ensures unique keys across triggerstest_enable_webhook_idempotent- Verifies enabling twice returns same key
2. crates/api/tests/webhook_api_tests.rs
API endpoint integration tests for webhook management and basic receiving.
Coverage:
- Webhook management endpoints (enable/disable/regenerate)
- Basic webhook receiving
- Authentication requirements
- Error handling for invalid keys
Key Tests:
test_enable_webhook- Tests enabling webhooks via APItest_disable_webhook- Tests disabling webhooks via APItest_regenerate_webhook_key- Tests key regeneration via APItest_receive_webhook- Tests successful webhook receptiontest_receive_webhook_invalid_key- Tests invalid key handlingtest_receive_webhook_disabled- Tests disabled webhook rejectiontest_webhook_requires_auth_for_management- Tests auth enforcementtest_receive_webhook_minimal_payload- Tests minimal payload acceptance
3. crates/api/tests/webhook_security_tests.rs
Comprehensive security feature tests (Phase 3).
Coverage:
- HMAC signature verification (SHA256, SHA512, SHA1)
- Rate limiting
- IP whitelisting (IPv4, IPv6, CIDR)
- Payload size limits
- Event logging
- Combined security features
- Error scenarios
Test Categories
HMAC Signature Tests
test_webhook_hmac_sha256_valid
Verifies SHA256 HMAC signature validation works correctly.
- Enables HMAC with SHA256 algorithm
- Generates valid signature
- Confirms webhook is accepted (200 OK)
test_webhook_hmac_sha512_valid
Verifies SHA512 HMAC signature validation.
- Uses SHA512 algorithm
- Tests stronger hashing algorithm support
test_webhook_hmac_invalid_signature
Tests rejection of invalid signatures.
- Sends webhook with malformed signature
- Expects 401 Unauthorized response
test_webhook_hmac_missing_signature
Tests rejection when signature is required but missing.
- HMAC enabled but no signature header provided
- Expects 401 Unauthorized response
test_webhook_hmac_wrong_secret
Tests rejection when signature uses wrong secret.
- Generates signature with incorrect secret
- Expects 401 Unauthorized response
Rate Limiting Tests
test_webhook_rate_limit_enforced
Verifies rate limiting prevents excessive requests.
- Configures limit of 3 requests per 60 seconds
- Sends 3 successful requests
- 4th request returns 429 Too Many Requests
test_webhook_rate_limit_disabled
Confirms webhooks work without rate limiting.
- Sends 10 consecutive requests
- All succeed when rate limiting disabled
IP Whitelisting Tests
test_webhook_ip_whitelist_allowed
Tests IP whitelist allows configured IPs.
- Configures whitelist with CIDR and exact IP
- Tests both CIDR range match (192.168.1.100 in 192.168.1.0/24)
- Tests exact IP match (10.0.0.1)
- Both return 200 OK
test_webhook_ip_whitelist_blocked
Tests IP whitelist blocks non-whitelisted IPs.
- Sends request from IP not in whitelist (8.8.8.8)
- Expects 403 Forbidden response
Payload Size Limit Tests
test_webhook_payload_size_limit_enforced
Verifies payload size limits are enforced.
- Sets 1 KB limit
- Sends 2 KB payload
- Expects 400 Bad Request response
test_webhook_payload_size_within_limit
Tests payloads within limit are accepted.
- Sets 10 KB limit
- Sends small payload
- Expects 200 OK response
Event Logging Tests
test_webhook_event_logging_success
Verifies successful webhooks are logged.
- Sends successful webhook
- Checks log entry exists
- Validates log contains status code, IP, user agent
test_webhook_event_logging_failure
Verifies failed webhooks are logged.
- Sends failing webhook (HMAC failure)
- Checks log entry with error details
- Validates failure reason recorded
Combined Security Tests
test_webhook_all_security_features_pass
Tests webhook passing all security checks.
- Enables HMAC, rate limiting, IP whitelist, size limit
- Sends properly authenticated, allowed webhook
- Verifies all checks pass and event created
- Validates log shows all features verified
test_webhook_multiple_security_failures
Tests multiple security feature failures.
- Enables multiple features
- Sends webhook failing multiple checks
- Verifies first failure prevents further processing
Error Scenario Tests
test_webhook_malformed_json
Tests handling of malformed JSON payloads.
- Sends invalid JSON
- Expects 400 Bad Request response
test_webhook_empty_payload
Tests handling of empty payloads.
- Sends empty body
- Expects 400 Bad Request response
Running Tests
Run All Tests
cargo test --workspace
Run Specific Test Suite
# Repository tests
cargo test -p attune-common webhook_tests
# API tests
cargo test -p attune-api webhook_api_tests
# Security tests
cargo test -p attune-api webhook_security_tests
Run Ignored Tests (Requires Database)
cargo test --workspace -- --ignored
Run Specific Test
cargo test -p attune-api test_webhook_hmac_sha256_valid -- --ignored
Test Environment Setup
Tests require:
- PostgreSQL Database - Running on localhost:5432 (or configured via
DATABASE_URL) - Test User - Username:
test_user, Password:test_password - Migrations Applied - All database migrations must be up to date
Setup Commands
# Set database URL
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/attune"
# Run migrations
sqlx migrate run
# Create test user (if not exists)
psql $DATABASE_URL -c "
INSERT INTO attune.identity (username, email, password_hash, enabled)
VALUES ('test_user', 'test@example.com', '$argon2id$...', true)
ON CONFLICT (username) DO NOTHING;
"
Test Coverage Summary
| Feature | Test Count | Status |
|---|---|---|
| Basic Webhook Management | 8 | ✅ Complete |
| HMAC Verification | 5 | ✅ Complete |
| Rate Limiting | 2 | ✅ Complete |
| IP Whitelisting | 2 | ✅ Complete |
| Payload Size Limits | 2 | ✅ Complete |
| Event Logging | 2 | ✅ Complete |
| Combined Security | 2 | ✅ Complete |
| Error Scenarios | 2 | ✅ Complete |
| Total | 25 | ✅ Complete |
Security Test Matrix
| HMAC | Rate Limit | IP Whitelist | Size Limit | Expected Result |
|---|---|---|---|---|
| ✅ Valid | ✅ OK | ✅ Allowed | ✅ OK | 200 OK |
| ❌ Invalid | N/A | N/A | N/A | 401 Unauthorized |
| ⚠️ Missing | N/A | N/A | N/A | 401 Unauthorized |
| ✅ Valid | ❌ Exceeded | N/A | N/A | 429 Too Many Requests |
| ✅ Valid | ✅ OK | ❌ Blocked | N/A | 403 Forbidden |
| ✅ Valid | ✅ OK | ✅ Allowed | ❌ Too Large | 400 Bad Request |
Known Test Limitations
- Rate Limit Window Tests - Tests don't verify time-based window expiry (would require time manipulation)
- Concurrent Rate Limiting - No tests for concurrent request handling
- IPv6 Whitelist - Limited IPv6 testing coverage
- Webhook Retry - Not yet implemented (Phase 4 feature)
- Performance Tests - No load/stress tests included
Future Test Additions
Phase 4 Features (Planned)
- Webhook retry logic tests
- Payload transformation tests
- Multiple webhook keys per trigger
- Webhook health check tests
- Analytics and metrics tests
Additional Coverage Needed
- Concurrent webhook processing
- Database connection failure handling
- Message queue failure scenarios
- Performance benchmarks
- Security penetration testing
Debugging Failed Tests
Common Issues
Test fails with "Failed to connect to database"
# Check database is running
pg_isready -h localhost -p 5432
# Verify DATABASE_URL
echo $DATABASE_URL
# Test connection
psql $DATABASE_URL -c "SELECT 1"
Test fails with "Trigger not found"
- Ensure migrations are up to date:
sqlx migrate run - Check schema exists:
psql $DATABASE_URL -c "\dn"
Test fails with "Authentication required"
- Verify test user exists in database
- Check JWT_SECRET environment variable is set
Rate limit test fails unexpectedly
- Database state may have rate limit entries from previous tests
- Clear webhook_event_log table between test runs
Manual Testing
For manual testing instructions, see webhook-manual-testing.md.
Continuous Integration
Tests are configured to run in CI/CD pipeline with:
- PostgreSQL service container
- Test database initialization
- Migration application
- Test user creation
- Parallel test execution
See .github/workflows/test.yml (if configured) for CI setup.
Test Maintenance
Adding New Tests
- Follow existing test structure and naming conventions
- Use test helpers (
setup_test_state,create_test_pack, etc.) - Clean up test data after test completion
- Mark as
#[ignore]if requires external dependencies - Document test purpose and expected behavior
- Add test to this documentation
Updating Tests for New Features
- Update relevant test files
- Add new test categories if needed
- Update test coverage summary
- Update security test matrix if applicable
- Document any new test requirements
Last Updated: 2025-01-20
Test Suite Version: 1.0
Phase Completion: Phase 3 ✅