re-uploading work
This commit is contained in:
359
work-summary/sessions/2025-01-fifo-integration-tests.md
Normal file
359
work-summary/sessions/2025-01-fifo-integration-tests.md
Normal file
@@ -0,0 +1,359 @@
|
||||
# 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
|
||||
|
||||
1. **Database Setup**:
|
||||
```bash
|
||||
# Ensure PostgreSQL is running
|
||||
sudo systemctl start postgresql
|
||||
|
||||
# Apply latest migrations
|
||||
cd attune
|
||||
sqlx migrate run
|
||||
```
|
||||
|
||||
2. **Environment Configuration**:
|
||||
```bash
|
||||
# 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)
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
# 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)
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
```sql
|
||||
-- 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:
|
||||
|
||||
1. **Follow naming convention**: `test_<scenario_description>`
|
||||
2. **Mark as `#[ignore]`**: All tests require database
|
||||
3. **Use unique suffix**: Include timestamp to avoid conflicts
|
||||
4. **Clean up data**: Always call `cleanup_test_data()` at end
|
||||
5. **Document expectations**: Add comments explaining what's validated
|
||||
|
||||
### Updating Tests
|
||||
|
||||
When modifying queue manager behavior:
|
||||
|
||||
1. Review all tests for assumptions
|
||||
2. Update expected values if behavior changes
|
||||
3. Add new tests for new features
|
||||
4. Run full suite before committing
|
||||
|
||||
---
|
||||
|
||||
## Integration with CI/CD
|
||||
|
||||
### GitHub Actions Workflow (Future)
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
1. **Run Test Suite**: Execute all tests and verify they pass
|
||||
2. **Document Results**: Record actual performance metrics
|
||||
3. **Fix Any Issues**: Address test failures before production
|
||||
4. **Update TODO**: Mark Step 7 as complete
|
||||
5. **Proceed to Step 8**: Documentation and production readiness
|
||||
|
||||
---
|
||||
|
||||
## Related Documents
|
||||
|
||||
- `work-summary/2025-01-policy-ordering-plan.md` - Implementation plan
|
||||
- `work-summary/FIFO-ORDERING-STATUS.md` - Overall status
|
||||
- `crates/executor/src/queue_manager.rs` - Queue manager implementation
|
||||
- `crates/executor/tests/fifo_ordering_integration_test.rs` - Test suite
|
||||
Reference in New Issue
Block a user