llm_optimizer_api_tests/
common.rs1use std::time::Duration;
4use tokio::time::timeout;
5
6pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(30);
8
9pub const LOAD_TEST_TIMEOUT: Duration = Duration::from_secs(300);
11
12pub const MAX_CONCURRENT_CONNECTIONS: usize = 1000;
14
15pub const TARGET_RPS: u32 = 10000;
17
18pub async fn with_timeout<F, T>(duration: Duration, f: F) -> Result<T, tokio::time::error::Elapsed>
20where
21 F: std::future::Future<Output = T>,
22{
23 timeout(duration, f).await
24}
25
26pub fn assert_latency_acceptable(duration: Duration, max_ms: u64) {
28 assert!(
29 duration.as_millis() <= max_ms as u128,
30 "Latency {} ms exceeds maximum {} ms",
31 duration.as_millis(),
32 max_ms
33 );
34}
35
36pub fn calculate_percentile(durations: &mut [Duration], percentile: f64) -> Duration {
38 durations.sort();
39 let index = ((durations.len() as f64 * percentile) as usize).min(durations.len() - 1);
40 durations[index]
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[tokio::test]
48 async fn test_with_timeout_success() {
49 let result = with_timeout(Duration::from_secs(1), async { 42 }).await;
50 assert_eq!(result.unwrap(), 42);
51 }
52
53 #[tokio::test]
54 async fn test_with_timeout_failure() {
55 let result = with_timeout(Duration::from_millis(10), async {
56 tokio::time::sleep(Duration::from_secs(1)).await;
57 42
58 })
59 .await;
60 assert!(result.is_err());
61 }
62
63 #[test]
64 fn test_calculate_percentile() {
65 let mut durations = vec![
66 Duration::from_millis(10),
67 Duration::from_millis(20),
68 Duration::from_millis(30),
69 Duration::from_millis(40),
70 Duration::from_millis(50),
71 ];
72 let p50 = calculate_percentile(&mut durations, 0.5);
73 assert_eq!(p50, Duration::from_millis(30));
74 }
75}