in src/common/headers.rs [524:579]
fn test_try_from_headers() {
// Valid headers.
let headers = Headers::try_from(
b"Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT\r\nAccept: application/json\r\nContent-Length: 55\r\n\r\n"
)
.unwrap();
assert_eq!(headers.content_length, 55);
assert_eq!(headers.accept, MediaType::ApplicationJson);
assert_eq!(
headers.custom_entries().get("Last-Modified").unwrap(),
"Tue, 15 Nov 1994 12:45:26 GMT"
);
assert_eq!(headers.custom_entries().len(), 1);
// Valid headers. (${HEADER_NAME} : WHITESPACE ${HEADER_VALUE})
// Any number of whitespace characters should be accepted including zero.
let headers = Headers::try_from(
b"Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT\r\nAccept:text/plain\r\nContent-Length: 49\r\n\r\n"
)
.unwrap();
assert_eq!(headers.content_length, 49);
assert_eq!(headers.accept, MediaType::PlainText);
// Valid headers.
let headers = Headers::try_from(
b"Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT\r\nContent-Length: 29\r\n\r\n",
)
.unwrap();
assert_eq!(headers.content_length, 29);
// Custom headers only.
let headers = Headers::try_from(
b"Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT\r\nfoo: bar\r\nbar: 15\r\n\r\n",
)
.unwrap();
let custom_entries = headers.custom_entries();
assert_eq!(custom_entries.get("foo").unwrap(), "bar");
assert_eq!(custom_entries.get("bar").unwrap(), "15");
assert_eq!(custom_entries.len(), 3);
// Valid headers, invalid value.
assert_eq!(
Headers::try_from(
b"Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT\r\nContent-Length: -55\r\n\r\n"
)
.unwrap_err(),
RequestError::HeaderError(HttpHeaderError::InvalidValue(
"Content-Length".to_string(),
" -55".to_string()
))
);
let bytes: [u8; 10] = [130, 140, 150, 130, 140, 150, 130, 140, 150, 160];
// Invalid headers.
assert!(Headers::try_from(&bytes[..]).is_err());
}