#[cfg(feature="std")]
use {
core::convert::TryFrom,
htt::{Header, IoResult, Method, Request, Version},
};
#[test]
#[cfg(feature="std")]
fn sending_requests() -> IoResult<()> {
let request = Request {
version: Version::V2_0,
method: Method::Options,
url: String::from("/some/where/?"),
headers: vec![(Header::Tk, "one"), (Header::Host, "localhost")].into_iter().map(|(k, v)| (k, v.to_string())).collect(),
};
let mut buf = Vec::with_capacity(1024);
let sent = request.send(&mut &b"Examples"[..], &mut buf)?;
assert_eq!(sent, u64::try_from(buf.len()).unwrap());
assert!(
buf == &b"OPTIONS /some/where/? HTTP/2.0\r\nTk: one\r\nHost: localhost\r\n\r\nExamples"[..]
|| buf == &b"OPTIONS /some/where/? HTTP/2.0\r\nHost: localhost\r\nTk: one\r\n\r\nExamples"[..]
);
Ok(())
}
#[test]
#[cfg(feature="std")]
fn receiving_requests() -> IoResult<()> {
for (version, method, url, headers, data) in vec![
(Version::default(), Method::Get, "/home/", vec![(Header::Age, "99"), (Header::Expires, "Tomorrow")], &b"HOHOHO"[..]),
(Version::V2_0, Method::Post, "https://some:443/ROOT/", vec![(Header::Origin, "Hell"), (Header::DNT, "true")], &[]),
] {
let request = Request {
version,
method,
url: url.to_string(),
headers: headers.into_iter().map(|(k, v)| (k, v.to_string())).collect(),
};
let mut buf = Vec::with_capacity(1024);
let sent = request.send(&mut &data[..], &mut buf)?;
assert_eq!(sent, u64::try_from(buf.len()).unwrap());
let mut received_data = Vec::with_capacity(data.len());
let other = Request::recv(&mut buf.as_slice(), &mut received_data)?;
assert_eq!(request.version, other.version);
assert_eq!(request.method, other.method);
assert_eq!(request.url, other.url);
assert_eq!(request.headers, other.headers);
assert_eq!(data, received_data.as_slice());
}
Ok(())
}