9.4 KiB
FIFO Ordering Integration Tests - Execution Plan
Date: 2025-01-27
Status: Ready for Execution
Priority: P0 - Critical
Overview
Comprehensive integration and stress tests have been created to validate the FIFO policy execution ordering system. These tests verify end-to-end correctness, performance under load, and edge case handling.
Test Suite Location
File: crates/executor/tests/fifo_ordering_integration_test.rs
Test Coverage
1. Basic Integration Test: test_fifo_ordering_with_database
Purpose: Verify FIFO ordering with database persistence
Scenario: 10 executions, concurrency=1
Validates:
- Database execution creation
- Queue manager integration
- Queue stats persistence to database
- Strict FIFO ordering
- Completion notification flow
Expected Runtime: ~2-3 seconds
2. High Concurrency Stress Test: test_high_concurrency_stress
Purpose: Validate ordering under heavy load
Scenario: 1000 executions, concurrency=5
Validates:
- FIFO ordering maintained at scale
- Queue stats accuracy under load
- Performance characteristics (throughput)
- Memory efficiency
- Database write performance
Expected Runtime: ~30-60 seconds
Expected Throughput: >100 exec/sec
3. Multiple Workers Simulation: test_multiple_workers_simulation
Purpose: Simulate real-world worker behavior
Scenario: 30 executions, 3 workers with varying speeds
Validates:
- FIFO ordering independent of worker speed
- Worker completion rate tracking
- Load distribution across workers
- Async notification correctness
Expected Runtime: ~5-10 seconds
4. Cross-Action Independence: test_cross_action_independence
Purpose: Ensure actions don't interfere with each other
Scenario: 3 actions × 50 executions each (150 total)
Validates:
- Separate queues per action
- Concurrent action execution
- Independent queue statistics
- Interleaved completion handling
Expected Runtime: ~10-15 seconds
5. Cancellation Test: test_cancellation_during_queue
Purpose: Verify cancellation removes from queue correctly
Scenario: 10 queued executions, cancel 3 specific positions
Validates:
- Cancellation removes correct execution
- Queue length decreases appropriately
- Remaining executions proceed in order
- Cancelled tasks return errors
Expected Runtime: ~2-3 seconds
6. Queue Stats Persistence: test_queue_stats_persistence
Purpose: Verify database sync during execution
Scenario: 50 executions with periodic stats checks
Validates:
- Memory and database stats match
- Real-time stats updates
- Final stats accuracy
- Database write consistency
Expected Runtime: ~5-10 seconds
7. Queue Full Rejection: test_queue_full_rejection
Purpose: Test queue limit enforcement
Scenario: Fill queue to max_queue_length (10), attempt overflow
Validates:
- Queue full detection
- Rejection with clear error message
- Stats accuracy at capacity
- No memory overflow
Expected Runtime: ~2 seconds
8. Extreme Stress Test: test_extreme_stress_10k_executions
Purpose: Validate system under extreme load
Scenario: 10,000 executions, concurrency=10
Validates:
- FIFO ordering at extreme scale
- Memory stability
- Database performance
- No resource leaks
- Throughput metrics
Expected Runtime: ~5-10 minutes
Note: This is marked #[ignore] and should be run separately
Execution Instructions
Prerequisites
-
Database Setup:
# Ensure PostgreSQL is running sudo systemctl start postgresql # Apply latest migrations cd attune sqlx migrate run -
Environment Configuration:
# Ensure config.development.yaml has correct database URL # Or set environment variable: export ATTUNE__DATABASE__URL="postgresql://attune:attune@localhost/attune"
Running Tests
Run All Tests (Except Extreme Stress)
cd attune/crates/executor
cargo test --test fifo_ordering_integration_test -- --ignored --test-threads=1
Important: Use --test-threads=1 to avoid database contention between tests.
Run Individual Test
# Basic integration test
cargo test --test fifo_ordering_integration_test test_fifo_ordering_with_database -- --ignored --nocapture
# High concurrency stress test
cargo test --test fifo_ordering_integration_test test_high_concurrency_stress -- --ignored --nocapture
# Multiple workers simulation
cargo test --test fifo_ordering_integration_test test_multiple_workers_simulation -- --ignored --nocapture
Run Extreme Stress Test (Separately)
# Run with verbose output to see progress
cargo test --test fifo_ordering_integration_test test_extreme_stress_10k_executions -- --ignored --nocapture --test-threads=1
Expected Output
All tests should:
- ✅ Pass with
test result: ok - ✅ Show progress messages during execution
- ✅ Report throughput metrics (stress tests)
- ✅ Complete within expected runtime
- ✅ Clean up test data automatically
Performance Benchmarks
Target Metrics
| Metric | Target | Acceptable |
|---|---|---|
| Throughput (1000 exec) | >200/sec | >100/sec |
| Throughput (10k exec) | >500/sec | >300/sec |
| Memory per queued exec | <1 KB | <5 KB |
| Queue stats DB write | <5ms | <10ms |
| Cancellation latency | <1ms | <5ms |
Measuring Performance
# Run with timing
time cargo test --test fifo_ordering_integration_test test_high_concurrency_stress -- --ignored --nocapture
# Monitor memory usage
/usr/bin/time -v cargo test --test fifo_ordering_integration_test test_extreme_stress_10k_executions -- --ignored --nocapture
Troubleshooting
Test Failures
Database Connection Issues
Error: Failed to connect to database
Solution: Ensure PostgreSQL is running and connection URL is correct.
Queue Full Errors During Tests
Error: Queue full (max length: 10000)
Solution: Increase max_queue_length in test config or reduce concurrent spawns.
Timeout Errors
Error: Execution timed out waiting for queue slot
Solution: Increase queue_timeout_seconds or check for completion notification issues.
FIFO Order Violations
assertion failed: order == expected
Solution: This is a CRITICAL bug. Check:
- Notify mechanism is working
- Queue entry/exit logic
- Lock ordering
- Race conditions in queue manager
Database Cleanup
If tests crash and leave test data:
-- Clean up test data
DELETE FROM attune.queue_stats WHERE action_id IN (
SELECT id FROM attune.action WHERE pack IN (
SELECT id FROM attune.pack WHERE ref LIKE 'fifo_test_pack_%'
)
);
DELETE FROM attune.execution WHERE action IN (
SELECT id FROM attune.action WHERE pack IN (
SELECT id FROM attune.pack WHERE ref LIKE 'fifo_test_pack_%'
)
);
DELETE FROM attune.action WHERE pack IN (
SELECT id FROM attune.pack WHERE ref LIKE 'fifo_test_pack_%'
);
DELETE FROM attune.pack WHERE ref LIKE 'fifo_test_pack_%';
Test Maintenance
Adding New Tests
When adding new test scenarios:
- Follow naming convention:
test_<scenario_description> - Mark as
#[ignore]: All tests require database - Use unique suffix: Include timestamp to avoid conflicts
- Clean up data: Always call
cleanup_test_data()at end - Document expectations: Add comments explaining what's validated
Updating Tests
When modifying queue manager behavior:
- Review all tests for assumptions
- Update expected values if behavior changes
- Add new tests for new features
- Run full suite before committing
Integration with CI/CD
GitHub Actions Workflow (Future)
name: FIFO Integration Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: attune
POSTGRES_USER: attune
POSTGRES_PASSWORD: attune
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- name: Run migrations
run: sqlx migrate run
- name: Run integration tests
run: |
cargo test --test fifo_ordering_integration_test -- --ignored --test-threads=1
- name: Run stress test
if: github.ref == 'refs/heads/main'
run: |
cargo test --test fifo_ordering_integration_test test_high_concurrency_stress -- --ignored --nocapture
Success Criteria
All tests must:
- ✅ Pass consistently (3+ consecutive runs)
- ✅ Maintain strict FIFO ordering
- ✅ Complete within 2x expected runtime
- ✅ Show no memory leaks (valgrind/miri)
- ✅ Clean up all test data
- ✅ Work with concurrent test runs
Next Steps
- Run Test Suite: Execute all tests and verify they pass
- Document Results: Record actual performance metrics
- Fix Any Issues: Address test failures before production
- Update TODO: Mark Step 7 as complete
- Proceed to Step 8: Documentation and production readiness
Related Documents
work-summary/2025-01-policy-ordering-plan.md- Implementation planwork-summary/FIFO-ORDERING-STATUS.md- Overall statuscrates/executor/src/queue_manager.rs- Queue manager implementationcrates/executor/tests/fifo_ordering_integration_test.rs- Test suite