#[ cfg( feature = "retry" ) ]
mod retry_integration_tests
{
use crate::enhanced_retry_helpers::*;
use api_openai::error::{ OpenAIError, Result };
use core::time::Duration;
use std::sync::{ Arc, Mutex };
use std::time::Instant;
#[ tokio::test ]
async fn test_retry_configuration_zero_overhead_when_disabled()
{
let config = EnhancedRetryConfig::default();
assert!( config.validate().is_ok() );
let executor = EnhancedRetryExecutor::new( config );
assert!( executor.is_ok() );
}
#[ tokio::test ]
async fn test_retry_metrics_integration()
{
let config = EnhancedRetryConfig::new()
.with_max_attempts( 3 )
.with_base_delay( 10 )
.with_jitter( 0 );
let executor = EnhancedRetryExecutor::new( config ).unwrap();
let mock_client = MockHttpClient::new( vec![
Err( OpenAIError::Network( "Connection failed".to_string() ).into() ),
Err( OpenAIError::Http( "HTTP error with status 503: Service unavailable".to_string() ).into() ),
Ok( "success".to_string() ),
] );
let start_time = Instant::now();
let result = executor.execute( || mock_client.make_request() ).await;
let total_time = start_time.elapsed();
assert!( result.is_ok() );
let state = executor.get_state();
assert_eq!( state.total_attempts, 3 );
assert!( state.elapsed_time > Duration::ZERO );
assert!( total_time >= Duration::from_millis( 20 ) );
assert!( state.last_error.is_some() );
}
#[ tokio::test ]
async fn test_graceful_degradation_with_none_config()
{
let operation_count = Arc::new( Mutex::new( 0u32 ) );
let count_clone = operation_count.clone();
let operation = move || {
let count_clone = count_clone.clone();
async move {
let mut count = count_clone.lock().unwrap();
*count += 1;
if *count == 1
{
Err( OpenAIError::Network( "Simulated failure".to_string() ).into() )
}
else
{
Ok( "Success after retry".to_string() )
}
}
};
let result : Result< String > = operation().await;
assert!( result.is_err() );
let final_count = *operation_count.lock().unwrap();
assert_eq!( final_count, 1 );
}
}
#[ cfg( not( feature = "retry" ) ) ]
mod no_retry_tests
{
#[ tokio::test ]
async fn test_zero_overhead_when_retry_disabled()
{
assert!( true, "Retry feature is disabled - zero overhead ensured" );
}
}