#[cfg(feature="std")]
use {
core::convert::TryFrom,
htt::{Header, IoResult, Response, Status, Version},
};
#[test]
#[cfg(feature="std")]
fn sending_responses() -> IoResult<()> {
let response = Response {
version: Version::V2_0,
status: Status::Ok,
headers: vec![(Header::Origin, "moon"), (Header::Server, "Mars")].into_iter().map(|(k, v)| (k, v.to_string())).collect(),
};
let mut buf = Vec::with_capacity(1024);
let sent = response.send(&mut &b"Tests"[..], &mut buf)?;
assert_eq!(sent, u64::try_from(buf.len()).unwrap());
assert!(
buf == &b"HTTP/2.0 200 OK\r\nOrigin: moon\r\nServer: Mars\r\n\r\nTests"[..]
|| buf == &b"HTTP/2.0 200 OK\r\nServer: Mars\r\nOrigin: moon\r\n\r\nTests"[..]
);
Ok(())
}
#[test]
#[cfg(feature="std")]
fn receiving_responses() -> IoResult<()> {
for (version, status, headers, data) in vec![
(Version::default(), Status::Ok, vec![(Header::Age, "9999"), (Header::Expires, "Next month")], &[][..]),
(Version::V1_1, Status::TooEarly, vec![(Header::Origin, "Mars"), (Header::DNT, "of-course")], &b"Why???"[..]),
] {
let response = Response {
version,
status,
headers: headers.into_iter().map(|(k, v)| (k, v.to_string())).collect(),
};
let mut buf = Vec::with_capacity(1024);
let sent = response.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 = Response::recv(&mut buf.as_slice(), &mut received_data)?;
assert_eq!(response.version, other.version);
assert_eq!(response.status, other.status);
assert_eq!(response.headers, other.headers);
assert_eq!(data, received_data.as_slice());
}
Ok(())
}