Files
foxhunt/testing/integration/fixtures/README.md
jgrusewski 9c3d741a08 refactor: restructure repo — crates/, bin/, testing/ layout
Move 17 library crates into crates/, CLI binary into bin/fxt,
consolidate 10 test crates into testing/, split config crate
from deployment config files.

Root directory reduced from 38+ to ~17 directories.
All Cargo.toml paths and build.rs proto refs updated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 11:56:00 +01:00

309 lines
8.3 KiB
Markdown

# Foxhunt Test Fixtures System
## Overview
This directory contains a comprehensive test fixtures system for the Foxhunt HFT Trading System. The fixtures provide standardized test data, mock services, and utilities for testing all components of the system.
## Architecture
### Core Modules
1. **`mod.rs`** - Main module with test symbols and base infrastructure
2. **`builders.rs`** - Builder patterns for creating test objects
3. **`scenarios.rs`** - Predefined test scenarios for various conditions
4. **`test_data.rs`** - Data generators and utilities
5. **`test_config.rs`** - Configuration management for tests
6. **`test_database.rs`** - Database setup and utilities
7. **`mock_services.rs`** - Mock implementations of external services
## Key Features
### ✅ Standardized Test Symbols
```rust
// Predefined symbols for consistent testing
pub const TEST_EQUITY_1: &str = "TEST_EQ_001";
pub const TEST_FOREX_1: &str = "TEST_FX_EURUSD";
pub const TEST_FUTURE_1: &str = "TEST_FUT_ES001";
// ... and many more
// Dynamic symbol generation
let symbol = generate_test_symbol(AssetClass::Equities);
```
### ✅ Builder Patterns
```rust
// Fluent API for building test objects
let portfolio = PortfolioBuilder::new()
.with_id(TEST_PORTFOLIO_1)
.with_name("Test Portfolio")
.with_base_currency("USD")
.strategy_portfolio()
.build();
let position = PositionBuilder::new()
.with_portfolio_id(TEST_PORTFOLIO_1)
.with_symbol(TEST_EQUITY_1)
.long_position(1000)
.profitable(10.0) // 10% profit
.build();
```
### ✅ Predefined Scenarios
```rust
// Market crash stress test
let (stress_scenario, stressed_positions) = ScenarioFactory::market_crash();
// High frequency trading scenario
let (orders, ticks) = ScenarioFactory::high_frequency_trading(60); // 60 seconds
// Risk limit breach scenario
let (portfolio, positions) = ScenarioFactory::risk_limit_breach();
```
### ✅ Data Generators
```rust
// Market data generation
let generator = MarketDataGenerator::new()
.with_symbol(TEST_EQUITY_1)
.with_volatility(0.02)
.with_drift(0.0001);
let prices = generator.generate_price_series(1000);
let ohlcv = generator.generate_ohlcv_bars(100, ChronoDuration::minutes(1));
// Random data generation
let mut random_gen = RandomDataGenerator::new();
let (portfolio, instruments, positions) = random_gen.generate_random_portfolio(10);
```
### ✅ Test Database Management
```rust
// Isolated test database
let test_db = TestDatabase::new().await?;
test_db.insert_test_data().await?;
// Shared test database for integration tests
let shared_db = get_shared_test_db().await?;
// Transaction-based testing
test_transaction!(test_db, {
// Your test code here
// Automatically rolled back
});
```
### ✅ Mock Services
```rust
// Mock trading service
let trading_service = MockTradingService::new(config);
let response = trading_service.submit_order(order_request).await?;
// Mock ML training service
let ml_service = MockMLTrainingService::new(config);
let job = ml_service.start_training(training_request).await?;
// Mock backtesting service
let backtest_service = MockBacktestingService::new(config);
let backtest = backtest_service.start_backtest(backtest_request).await?;
```
### ✅ Configuration Management
```rust
// Different configurations for different test types
let unit_config = TestConfig::for_unit_tests(); // Fast, mocked
let integration_config = TestConfig::for_integration_tests(); // Realistic
let performance_config = TestConfig::for_performance_tests(); // Demanding
let stress_config = TestConfig::for_stress_tests(); // Extreme
// Builder pattern for custom configs
let config = TestConfigBuilder::new()
.with_max_latency_ns(10_000)
.with_mocks_enabled(false)
.build()?;
```
## Symbol Categories
### Asset Classes Covered
- **Equities**: `TEST_EQ_001`, `TEST_EQ_002`, etc.
- **Forex**: `TEST_FX_EURUSD`, `TEST_FX_GBPUSD`, etc.
- **Futures**: `TEST_FUT_ES001`, `TEST_FUT_NQ001`, etc.
- **Bonds**: `TEST_BOND_UST10Y`, `TEST_BOND_UST2Y`, etc.
- **Commodities**: `TEST_COMM_GOLD`, `TEST_COMM_SILVER`, etc.
- **Crypto**: `TEST_CRYPTO_BTC`, `TEST_CRYPTO_ETH`, etc.
### Complete Symbol Collections
```rust
pub const ALL_TEST_SYMBOLS: &[&str] = &[...]; // All symbols
pub const ALL_TEST_EQUITIES: &[&str] = &[...]; // Just equities
pub const ALL_TEST_FX_PAIRS: &[&str] = &[...]; // Just FX pairs
// ... etc for each asset class
```
## Test Scenarios
### Market Conditions
1. **Basic Trading** - Balanced portfolio with mixed assets
2. **Market Crash** - 2008-style stress test with asset correlation
3. **Interest Rate Shock** - Bond duration-based impact
4. **High Frequency** - Rapid order flow and tick data
5. **Risk Limit Breach** - Concentrated positions and limit violations
### Risk Management
- VaR limit breaches
- Concentration risk scenarios
- Counterparty exposure limits
- Circuit breaker triggers
- Stress test scenarios
### Performance Testing
- High-frequency order flow
- Latency measurement scenarios
- Throughput testing data
- Memory usage patterns
- Concurrent operation testing
## Integration with Existing Code
### Database Schema Compatibility
The fixtures integrate with the existing `risk-data` models:
```rust
use risk_data::models::{AssetClass, InstrumentType, Portfolio, Position};
// Builders create objects compatible with existing schemas
let instrument = InstrumentBuilder::new()
.equity()
.build(); // Returns risk_data::models::Instrument
```
### Configuration Integration
```rust
// Uses existing configuration system
use config::{ServiceConfig, ConfigManager};
// Test configs integrate with production config system
let test_config = TestConfig::for_integration_tests();
let env_vars = test_config.to_env_vars(); // For child processes
```
## Usage Examples
### Unit Test Setup
```rust
#[tokio::test]
async fn test_portfolio_operations() {
let test_db = setup_test_db!();
let portfolio = PortfolioBuilder::new()
.with_id("TEST_UNIT_PORTFOLIO")
.build();
let positions = BatchBuilder::create_test_positions(
"TEST_UNIT_PORTFOLIO",
ALL_TEST_EQUITIES
);
// Test your portfolio logic here
}
```
### Integration Test Setup
```rust
#[tokio::test]
async fn test_trading_service_integration() {
let config = TestConfig::for_integration_tests();
let (trading, ml, backtesting) = MockServiceFactory::new(config)
.create_all_services();
let scenario = BasicTradingScenario::new();
let positions = scenario.create_positions();
// Test service interactions
}
```
### Performance Test Setup
```rust
#[tokio::test]
async fn test_hft_performance() {
let config = TestConfig::for_performance_tests();
let hft_scenario = HighFrequencyScenario::new()
.with_order_rate(10000); // 10k orders/sec
let orders = hft_scenario.generate_order_flow(60); // 1 minute
// Measure latency and throughput
}
```
### Stress Test Setup
```rust
#[tokio::test]
async fn test_market_crash_stress() {
let crash_scenario = MarketCrashScenario::new();
let basic_scenario = BasicTradingScenario::new();
let original_positions = basic_scenario.create_positions();
let stressed_positions = crash_scenario.apply_shocks_to_positions(&original_positions);
// Verify risk management under stress
}
```
## Benefits
### 🎯 **Consistency**
- Standardized symbols across all tests
- Predictable test data structures
- Consistent pricing and volatility
### 🚀 **Productivity**
- No more hardcoded test values
- Builder patterns for complex objects
- Predefined scenarios for common cases
### 🔒 **Reliability**
- Isolated test databases
- Deterministic random data (seeded)
- Proper cleanup and teardown
### 🔄 **Reusability**
- Modular builders and generators
- Configurable scenarios
- Cross-module compatibility
### 📊 **Comprehensive Coverage**
- All asset classes represented
- Multiple market conditions
- Various risk scenarios
- Performance testing data
## Future Enhancements
- [ ] Real-time data replay capabilities
- [ ] Advanced correlation modeling
- [ ] Regulatory scenario testing
- [ ] Machine learning test data sets
- [ ] Cross-asset scenario correlation
- [ ] Market microstructure simulation
This fixtures system provides a solid foundation for testing all aspects of the Foxhunt HFT trading system with realistic, consistent, and maintainable test data.