#[cfg(any(feature = "http"))]
mod tests {
use std::{net::Ipv4Addr, str::FromStr};
use http::{Request, StatusCode};
use nbio::{http::HttpClient, Publish, Receive, ReceiveOutcome, Session};
#[test]
fn test_google_chunked_response() {
let mut client = HttpClient::new();
let mut conn = client
.request(
Request::get("https://www.google.com").body(()).unwrap(),
None,
)
.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 mut client = HttpClient::new();
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap(), None)
.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 mut client = HttpClient::new();
let mut conn = client
.request(Request::get("http://icanhazip.com").body(()).unwrap(), None)
.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());
println!("body: {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());
println!("body: {body:?}");
Ipv4Addr::from_str(body.trim()).expect("IP V4 address as body");
break;
}
}
}
}