Files
foxhunt/testing/api-load/src/config.rs
jgrusewski d25c82f8f3 refactor: rename api_gateway → api across workspace, tests, and load crate
- Workspace Cargo.toml: remove web-gateway + api_gateway members, keep api
- trading_service: dep api-gateway → api, update test imports
- testing/api-gateway-load → testing/api-load (crate renamed)
- All test crates: get_api_gateway_addr → get_api_addr + variable renames

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:38:21 +01:00

101 lines
2.7 KiB
Rust

use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadTestConfig {
pub gateway_url: String,
pub prometheus_url: Option<String>,
pub auth: AuthConfig,
pub scenarios: ScenariosConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthConfig {
pub jwt_secret: String,
pub username: String,
pub user_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScenariosConfig {
pub normal_load: NormalLoadConfig,
pub spike_load: SpikeLoadConfig,
pub sustained_load: SustainedLoadConfig,
pub stress_test: StressTestConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NormalLoadConfig {
pub num_clients: usize,
pub duration_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpikeLoadConfig {
pub target_clients: usize,
pub ramp_up_secs: u64,
pub sustain_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SustainedLoadConfig {
pub num_clients: usize,
pub duration_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StressTestConfig {
pub initial_clients: usize,
pub increment: usize,
pub increment_interval_secs: u64,
pub max_p99_latency_ms: f64,
pub max_error_rate_pct: f64,
}
impl Default for LoadTestConfig {
fn default() -> Self {
Self {
gateway_url: "http://localhost:50050".to_string(),
prometheus_url: Some("http://localhost:9090".to_string()),
auth: AuthConfig::default(),
scenarios: ScenariosConfig::default(),
}
}
}
impl Default for AuthConfig {
fn default() -> Self {
Self {
jwt_secret: "test-secret-key-for-load-testing".to_string(),
username: "load-test-user".to_string(),
user_id: "load-test-user-id".to_string(),
}
}
}
impl Default for ScenariosConfig {
fn default() -> Self {
Self {
normal_load: NormalLoadConfig {
num_clients: 1000_usize,
duration_secs: 60_u64,
},
spike_load: SpikeLoadConfig {
target_clients: 10000_usize,
ramp_up_secs: 10_u64,
sustain_secs: 60_u64,
},
sustained_load: SustainedLoadConfig {
num_clients: 100_usize,
duration_secs: 86400_u64, // 24 hours
},
stress_test: StressTestConfig {
initial_clients: 100_usize,
increment: 100_usize,
increment_interval_secs: 60_u64,
max_p99_latency_ms: 50.0,
max_error_rate_pct: 5.0,
},
}
}
}