#[cfg(any(feature = "http"))]
mod tests {
use std::{net::Ipv4Addr, str::FromStr, time::Duration};
use http::{Request, StatusCode};
use nbio::{Publish, Receive, ReceiveOutcome, Session, http::HttpClient};
#[test]
fn test_google_chunked_response() {
let client = HttpClient::new();
let mut conn = client
.request(Request::get("https://www.google.com").body(()).unwrap())
.unwrap();
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
assert!(String::from_utf8_lossy(r.body()).ends_with("</html>"));
break;
}
}
}
#[test]
fn test_simple_response() {
let client = HttpClient::new();
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap())
.unwrap();
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
let body = String::from_utf8_lossy(r.body());
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
}
#[test]
fn test_keep_alive() {
let client = HttpClient::new();
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap())
.unwrap();
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
let body = String::from_utf8_lossy(r.body());
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
conn.publish(
Request::get("http://icanhazip.com")
.body(Vec::new())
.unwrap()
.into(),
)
.unwrap();
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
let body = String::from_utf8_lossy(r.body());
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
}
#[test]
fn test_connection_pooling() {
let client = HttpClient::new().with_connection_pool(10, 20, Duration::from_secs(180));
{
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap())
.unwrap();
assert_eq!(false, conn.is_pooled());
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
let body = String::from_utf8_lossy(r.body());
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
}
{
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap())
.unwrap();
assert_eq!(true, conn.is_pooled());
loop {
conn.drive().unwrap();
if let ReceiveOutcome::Payload(r) = conn.receive().unwrap() {
assert_eq!(r.status(), StatusCode::OK);
let body = String::from_utf8_lossy(r.body());
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
}
}
}