#[cfg(test)]
mod tests {
use std::str::FromStr;
use smallvec::smallvec;
use crate::{
http::{
headers::{Connection, ContentType, HeaderEntry, HttpHeader, HttpHeaderValue},
methods::HttpMethod,
requests::{BodyType, HttpRequest},
},
utils::buffer::Buffer,
};
#[test]
fn test_process_headers_set_keep_alive() {
let mut req = dummy_request();
assert!(!req.keep_alive);
req.process_headers();
assert!(req.keep_alive);
}
#[test]
fn test_process_headers_set_content_type() {
let mut req = dummy_request();
assert!(req.content_type.is_none());
req.process_headers();
assert_eq!(ContentType::TextPlain, req.content_type.unwrap());
}
#[test]
fn test_process_headers_set_content_length() {
let mut req = dummy_request();
assert!(req.body_type.is_none());
req.process_headers();
assert_eq!(BodyType::Fixed(128), req.body_type.unwrap());
}
#[test]
fn test_find_existing_header() {
let mut req = dummy_request();
let header = req.find_header(HttpHeader::ContentType);
assert!(header.is_some());
}
#[test]
fn test_find_nonexistent_header() {
let mut req = dummy_request();
let header = req.find_header(HttpHeader::Range);
assert!(header.is_none());
}
#[test]
fn test_request_to_string_contains_correct_data() {
let req = dummy_request();
let req_str = req.to_string();
println!("{req_str}");
assert!(req_str.starts_with("GET /test HTTP/1.1"));
assert!(req_str.contains("Content-Length: 128"));
assert!(req_str.contains("Content-Type: text/plain"));
assert!(req_str.contains("Hello world!"));
}
fn dummy_request() -> HttpRequest {
let headers = smallvec![
HeaderEntry::new(
HttpHeader::ContentLength,
HttpHeaderValue::ContentLength(128)
),
HeaderEntry::new(
HttpHeader::ContentType,
HttpHeaderValue::ContentType(ContentType::TextPlain)
),
HeaderEntry::new(
HttpHeader::Connection,
HttpHeaderValue::Connection(Connection::KeepAlive)
),
];
HttpRequest::new(
HttpMethod::GET,
"/test".into(),
(1, 1),
headers,
Some(Buffer::from_str("Hello world!").unwrap()),
)
}
}