#[macro_use]
pub mod support;
use submillisecond::{response::Response as SubmsResponse, router, RequestContext};
use support::RouterFn;
static CHUNKS: [&str; 10] = [
"4\r\n",
"Wiki\r\n",
"6\r\n",
"pedia \r\n",
"E\r\n",
"in \r\n",
"\r\n",
"chunks.\r\n",
"0\r\n",
"\r\n",
];
#[rustfmt::skip]
static GZIP_CHUNKED: [u8; 66] = [
b'1', b'6', b'\r', b'\n',
31, 139, 8, 0, 0, 0, 0, 0, 4, 255, 11, 207, 204, 206, 44, 72, 77, 201, 76, 84, 200, 204, b'\r', b'\n',
b'1', b'5', b'\r', b'\n',
83, 224, 229, 226, 229, 74, 206, 40, 205, 203, 46, 214, 3, 0, 102, 210, 154, 109, 24, 0, 0, b'\r', b'\n',
b'1', b'\r', b'\n',
0, b'\r', b'\n',
b'0', b'\r', b'\n',
b'\r', b'\n',
];
#[rustfmt::skip]
static DEFLATE_CHUNKED: [u8; 40] = [
b'1', b'5', b'\r', b'\n',
11, 207, 204, 206, 44, 72, 77, 201, 76, 84, 200, 204, 83, 224, 226, 74, 206, 40, 205, 203, 46, b'\r', b'\n',
b'3', b'\r', b'\n',
214, 3, 0, b'\r', b'\n',
b'0', b'\r', b'\n', b'\r', b'\n',
];
fn chunked() -> SubmsResponse {
SubmsResponse::builder()
.header("Transfer-Encoding", "chunked")
.header("Content-Length", "24")
.body(CHUNKS.join("").to_owned().into_bytes())
.unwrap()
}
fn chunked_gzip() -> SubmsResponse {
SubmsResponse::builder()
.header("Transfer-Encoding", "chunked")
.header("Content-encoding", "gzip")
.body(GZIP_CHUNKED.to_vec())
.unwrap()
}
fn chunked_deflate() -> SubmsResponse {
SubmsResponse::builder()
.header("Transfer-Encoding", "chunked")
.header("Content-encoding", "deflate")
.body(DEFLATE_CHUNKED.to_vec())
.unwrap()
}
static ADDR: &'static str = "0.0.0.0:3001";
static ROUTER: RouterFn = router! {
GET "/chunked" => chunked
GET "/gzip" => chunked_gzip
GET "/deflate" => chunked_deflate
};
wrap_server!(chunked_server, ROUTER, ADDR);
#[lunatic::test]
fn test_chunked_uncompressed_body() {
let _ = chunked_server::ensure_server();
let client = nightfly::Client::new();
let res = client
.get(&format!("http://{}/chunked", ADDR))
.send()
.unwrap();
let body = res.text().unwrap();
assert_eq!(body, "Wikipedia in \r\n\r\nchunks.");
}
#[lunatic::test]
fn test_chunked_gzip_body() {
let _ = chunked_server::ensure_server();
let client = nightfly::Client::new();
let res = client.get(&format!("http://{}/gzip", ADDR)).send().unwrap();
let body = res.text().unwrap();
assert_eq!(body, "Wikipedia in \r\n\r\nchunks.");
}