re-uploading work

This commit is contained in:
2026-02-04 17:46:30 -06:00
commit 3b14c65998
1388 changed files with 381262 additions and 0 deletions

View 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