README
ΒΆ
ChronoQueue Test Suite
Comprehensive integration and end-to-end tests for the ChronoQueue message queue system.
π Directory Structure
tests/
βββ README.md # This file
βββ TESTING_GUIDE.md # Comprehensive testing guide
βββ TEST_IMPLEMENTATION_SUMMARY.md # Implementation summary
βββ DELIVERABLES.md # Project deliverables
βββ TESTING_ENHANCEMENT_SUMMARY.md # Testing enhancements
β
βββ fixtures/ # Test data
β βββ queues.json # Queue configurations
β βββ messages.json # Message templates
β βββ schedules.json # Schedule configurations
β βββ schemas/ # JSON schemas
β βββ order_schema.json
β βββ event_schema.json
β βββ notification_schema.json
β
βββ helpers/ # Test utilities
β βββ testcontainer.go # Container setup
β βββ fixtures.go # Fixture loaders
β βββ assertions.go # Custom assertions
β
βββ integration/ # Integration tests
β βββ queue_operations_test.go # Queue CRUD
β βββ message_lifecycle_test.go # Message operations
β βββ priority_queue_test.go # Priority ordering
β βββ retry_dlq_test.go # Retry and DLQ
β βββ scheduling_test.go # Cron & calendar
β βββ schema_registry_test.go # Schema validation
β
βββ e2e/ # End-to-end tests
βββ workflows_test.go # Complete workflows
π Quick Start
Prerequisites
- Docker must be running (for Testcontainers)
- Go 1.25+ installed
- ChronoQueue dependencies installed:
go mod download
Run All Tests
# From project root
go test -v ./tests/...
Run Specific Test Suites
# Integration tests only
go test -v ./tests/integration/...
# E2E tests only
go test -v ./tests/e2e/...
# Specific test file
go test -v ./tests/integration/message_lifecycle_test.go
# Specific test function
go test -v ./tests/integration/ -run TestMessageLifecycle_PostSimpleMessage
Run with Options
# Skip long-running tests
go test -v -short ./tests/...
# Run with timeout
go test -v -timeout 30m ./tests/...
# Run in parallel
go test -v -parallel 4 ./tests/integration/...
# Generate coverage
go test -v -coverprofile=coverage.out ./tests/...
go tool cover -html=coverage.out
π Test Coverage
| Test Suite | Tests | Features Covered |
|---|---|---|
| Queue Operations | 5+ | Queue CRUD, listing, state management |
| Message Lifecycle | 10+ | Post, get, acknowledge, lease, heartbeat, peek |
| Priority Queues | 5+ | Priority ordering, FIFO within priority |
| Retry & DLQ | 8+ | Exponential backoff, DLQ operations, requeue |
| Scheduling | 8+ | Cron expressions, calendar rules, management |
| Schema Registry | 9+ | Register, validate, version, delete |
| E2E Workflows | 3+ | Complete real-world scenarios |
Total: 50+ comprehensive test cases
π§ͺ Test Categories
Integration Tests (./integration/)
Test individual features with real Redis and ChronoQueue containers:
- β Queue Management: Create, delete, list queues
- β Message Operations: Post, get, acknowledge, renew lease
- β Priority Handling: Priority-based message ordering
- β Retry System: Exponential backoff, max retries
- β Dead Letter Queue: Auto-creation, requeue, purge
- β Scheduling: Cron and calendar-based scheduling
- β Schema Registry: JSON Schema validation
End-to-End Tests (./e2e/)
Test complete workflows combining multiple features:
- β Complete Message Workflow: Post β Consume β Ack β DLQ β Requeue
- β High-Priority Alert System: Priority-based processing
- β Multi-Tenant Isolation: Complete isolation between tenants
π οΈ Test Utilities
Fixtures (./fixtures/)
Pre-defined test data for consistent testing:
- Queues: 5 configurations (simple, exclusive, priority, schema-enforced, no-DLQ)
- Messages: 10 templates (various content types, priorities)
- Schedules: 10 configurations (cron and calendar-based)
- Schemas: 3 JSON schemas (order, event, notification)
Helpers (./helpers/)
Utility functions for common test operations:
Container Management:
SetupTestEnvironment()- Creates Redis + ChronoQueue containersNewGRPCClient()- gRPC client connectionCleanup()- Resource teardown
Fixture Loading:
LoadFixture()- Load JSON fixturesLoadMessageFixture()- Load message templatesLoadJSONSchema()- Load schema files
Assertions:
AssertQueueExists()- Verify queue presenceAssertMessagePriority()- Validate priority orderingAssertLeaseActive()- Check lease stateAssertErrorContains()- Validate error messages
π Documentation
- TESTING_GUIDE.md - Comprehensive testing guide with all test scenarios
- TEST_IMPLEMENTATION_SUMMARY.md - Detailed implementation summary
- TESTING_ENHANCEMENT_SUMMARY.md - Testing enhancements overview
π― Example Test
func TestMessageLifecycle_PostSimpleMessage(t *testing.T) {
t.Parallel()
// Arrange
ctx := context.Background()
env := helpers.SetupTestEnvironment(t)
conn := env.NewGRPCClient(t)
client := queueservice_pb.NewQueueServiceClient(conn)
queueName := helpers.GenerateUniqueQueueName(t, "test-queue")
// Create queue
_, err := client.CreateQueue(ctx, &queueservice_pb.CreateQueueRequest{
Name: queueName,
Metadata: &queue_pb.QueueMetadata{
Type: queue_pb.QueueType_SIMPLE,
},
})
require.NoError(t, err)
// Load message from fixture
msgFixture := helpers.LoadMessageFixture(t, "low_priority_log")
// Act
response, err := client.PostMessage(ctx, &queueservice_pb.PostMessageRequest{
QueueName: queueName,
Message: createMessageFromFixture(t, msgFixture),
})
// Assert
require.NoError(t, err)
assert.True(t, response.Success)
}
π Troubleshooting
Docker Issues
# Verify Docker is running
docker info
# Clean up Docker resources
docker system prune -a
Test Failures
# Run with verbose output
go test -v ./tests/integration/... 2>&1 | tee test-output.log
# Run single test for debugging
go test -v ./tests/integration/ -run TestSpecificTest
# Check container logs (if test fails)
docker logs <container-id>
Timing Issues
Some tests are timing-dependent. If they fail intermittently:
# Skip timing-dependent tests
go test -v -short ./tests/...
# Increase timeouts
go test -v -timeout 60m ./tests/...
π€ Contributing
When adding new tests:
- Follow existing patterns: Use Arrange-Act-Assert structure
- Use fixtures: Load test data from
fixtures/directory - Add assertions: Use custom assertions from
helpers/assertions.go - Document: Add test scenario comments
- Parallel where safe: Use
t.Parallel()for independent tests - Clean up: Use
t.Cleanup()for resource teardown
π Test Naming Convention
Test<Feature>_<Scenario>_<ExpectedBehavior>
Examples:
TestQueueOperations_CreateSimpleQueue_SuccessTestMessageLifecycle_GetMessage_ReturnsHighestPriorityTestDLQ_ExhaustedRetries_MovesToDLQ
β Success Criteria
All tests should:
- β Run in isolation (no shared state)
- β Clean up resources automatically
- β Produce consistent results
- β Execute in reasonable time
- β Provide clear failure messages
π Support
For issues or questions:
- Check TESTING_GUIDE.md for detailed documentation
- Review TEST_IMPLEMENTATION_SUMMARY.md for implementation details
- Check existing test examples in
integration/ande2e/directories
Click to show internal directories.
Click to hide internal directories.