use std::time::Duration;
use zjhttpc::{Result, client::ZJHttpClient, requestx::Request};
fn main() -> Result<()> {
async_std::task::block_on(async {
println!("Test 1: Client-level connect timeout (default 3 seconds)");
let client = ZJHttpClient::builder().build().unwrap();
let mut req = Request::new("GET", "http://httpbin.org/delay/1")?;
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✓ Request succeeded in {:?}", elapsed),
Err(e) => println!("✗ Request failed: {:?}", e),
}
println!("\nTest 2: Client-level custom 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/delay/0.5")?;
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✓ Request succeeded in {:?}", elapsed),
Err(e) => println!("✗ Request failed: {:?}", e),
}
println!("\nTest 3: Request-level connect timeout (500ms)");
let client = ZJHttpClient::builder().build().unwrap(); let mut req = Request::new("GET", "http://httpbin.org/delay/0.2")?
.set_connect_timeout(Duration::from_millis(500));
let start = std::time::Instant::now();
let result = client.send(&mut req).await;
let elapsed = start.elapsed();
match result {
Ok(_response) => println!("✓ Request succeeded in {:?}", elapsed),
Err(e) => println!("✗ Request failed: {:?}", e),
}
println!("\nTest 4: Request-level timeout (2s) overrides client-level timeout (5s)");
let client = ZJHttpClient::builder()
.set_global_connect_timeout(Duration::from_secs(5))
.build()
.unwrap();
let mut req = Request::new("GET", "http://httpbin.org/delay/1")?
.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!("✓ Request succeeded in {:?}", elapsed),
Err(e) => println!("✗ Request failed: {:?}", e),
}
println!("\nTest 5: Connect timeout with unreachable host (should timeout in 1s)");
let client = ZJHttpClient::builder()
.set_global_connect_timeout(Duration::from_secs(1))
.build()
.unwrap();
let mut req = Request::new("GET", "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 failure: {:?}", e);
println!(" Time elapsed: {:?}", elapsed);
}
}
Ok(())
})
}