use std::time::Duration;
use zjhttpc::{Result, client::ZJHttpClient, requestx::Request};
fn main() -> Result<()> {
async_std::task::block_on(async {
println!("Testing proxy connect timeout functionality...");
println!("\nTest 1: HTTP proxy with client-level connect timeout (1 second)");
let client = ZJHttpClient::builder()
.set_global_connect_timeout(Duration::from_secs(1))
.build()
.unwrap();
let mut req = Request::new("GET", "http://httpbin.org/get")?
.set_proxy_from_url("http://192.0.2.1:8080")?;
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✗ Unexpected success in {:?}", elapsed),
Err(e) => {
println!("✓ Expected proxy connection failure: {:?}", e);
println!(" Time elapsed: {:?}", elapsed);
if elapsed > Duration::from_secs(2) {
println!(" ⚠️ Timeout took longer than expected");
} else {
println!(" ✓ Timeout occurred within expected timeframe");
}
}
}
println!("\nTest 2: HTTPS proxy with request-level connect timeout (2 seconds)");
let client = ZJHttpClient::builder().build().unwrap(); let mut req = Request::new("GET", "http://httpbin.org/get")?
.set_proxy_from_url("https://192.0.2.1:8443")? .set_connect_timeout(Duration::from_secs(2));
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✗ Unexpected success in {:?}", elapsed),
Err(e) => {
println!("✓ Expected proxy connection failure: {:?}", e);
println!(" Time elapsed: {:?}", elapsed);
if elapsed > Duration::from_secs(3) {
println!(" ⚠️ Timeout took longer than expected");
} else {
println!(" ✓ Timeout occurred within expected timeframe");
}
}
}
println!(
"\nTest 3: Request-level timeout (1s) overrides client-level timeout (5s) for proxy"
);
let client = ZJHttpClient::builder()
.set_global_connect_timeout(Duration::from_secs(5))
.build()
.unwrap();
let mut req = Request::new("GET", "http://httpbin.org/get")?
.set_proxy_from_url("http://192.0.2.1:8080")? .set_connect_timeout(Duration::from_secs(1));
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✗ Unexpected success in {:?}", elapsed),
Err(e) => {
println!("✓ Expected proxy connection failure: {:?}", e);
println!(" Time elapsed: {:?}", elapsed);
if elapsed > Duration::from_secs(2) {
println!(" ⚠️ Timeout took longer than expected (should be ~1s)");
} else {
println!(" ✓ Timeout occurred within expected timeframe (~1s)");
}
}
}
println!("\n=== Proxy Connect Timeout Tests Complete ===");
Ok(())
})
}