#[cfg(all(feature = "std_hyper", feature = "hyper_timeout", feature = "json"))]
#[tokio::test]
async fn test_hyper_timeout() {
use product_os_request::{Method, ProductOSClient, ProductOSHyperClient, ProductOSRequester};
let mut requester = ProductOSRequester::new();
requester.set_timeout(1);
let mut client = ProductOSHyperClient::new();
requester.build(&mut client);
let request = client.new_request(Method::GET, "https://httpbin.org/delay/5");
let response = client.request(request).await;
assert!(response.is_err(), "Request should timeout");
if let Err(e) = response {
let error_msg = e.to_string();
assert!(
error_msg.contains("timeout") || error_msg.contains("timed out"),
"Error should mention timeout: {}",
error_msg
);
}
}
#[cfg(all(feature = "std_hyper", feature = "hyper_timeout", feature = "json"))]
#[tokio::test]
async fn test_hyper_no_timeout() {
use product_os_request::{Method, ProductOSClient, ProductOSHyperClient, ProductOSRequester};
let mut requester = ProductOSRequester::new();
requester.set_timeout(5000);
let mut client = ProductOSHyperClient::new();
requester.build(&mut client);
let request = client.new_request(Method::GET, "https://httpbin.org/get");
let response = client.request(request).await;
assert!(response.is_ok(), "Request should not timeout");
}
#[cfg(all(feature = "std_hyper", feature = "hyper_cookies", feature = "json"))]
#[tokio::test]
async fn test_hyper_cookies() {
use product_os_request::{Method, ProductOSClient, ProductOSHyperClient, ProductOSRequester};
let mut requester = ProductOSRequester::new();
requester.set_timeout(5000);
let mut client = ProductOSHyperClient::new();
requester.build(&mut client);
let request = client.new_request(Method::GET, "https://httpbin.org/get");
let response = client.request(request).await;
assert!(
response.is_ok(),
"Request should succeed with cookie feature enabled"
);
}
#[cfg(all(feature = "std_hyper", feature = "hyper_compression", feature = "json"))]
#[tokio::test]
async fn test_hyper_compression_headers() {
use product_os_request::{Method, ProductOSClient, ProductOSHyperClient, ProductOSRequester};
let mut requester = ProductOSRequester::new();
requester.set_timeout(5000);
let mut client = ProductOSHyperClient::new();
requester.build(&mut client);
let request = client.new_request(Method::GET, "https://httpbin.org/get");
let response = client.request(request).await;
assert!(
response.is_ok(),
"Request should succeed with compression feature enabled"
);
let response = response.unwrap();
assert_eq!(response.status_code(), 200, "Status code should be 200");
}
#[cfg(all(feature = "std_hyper_full", feature = "json"))]
#[tokio::test]
async fn test_hyper_all_features() {
use product_os_request::{
Method, ProductOSClient, ProductOSHyperClient, ProductOSRequester, RedirectPolicy,
};
let mut requester = ProductOSRequester::new();
requester.set_timeout(5000);
requester.set_redirect_policy(RedirectPolicy::Limit(10));
requester.add_header("X-Test-Header", "test-value", false);
let mut client = ProductOSHyperClient::new();
requester.build(&mut client);
let request = client.new_request(
Method::GET,
"https://httpbin.org/redirect-to?url=https://httpbin.org/cookies/set?fulltest=working",
);
let response = client.request(request).await;
assert!(response.is_ok(), "Request with all features should succeed");
let response = response.unwrap();
assert_eq!(
response.status_code(),
200,
"Should successfully follow redirect"
);
}