v/vlib/vanilla_http_server/request_parser/request_parser_test.v
2025-06-01 03:21:33 +03:00

69 lines
2.1 KiB
V

module request_parser
fn test_parse_http1_request_line_valid_request() {
buffer := 'GET /path/to/resource HTTP/1.1\r\n'.bytes()
mut req := HttpRequest{
buffer: buffer
}
parse_http1_request_line(mut req) or { panic(err) }
assert slice_to_string(req.buffer, req.method) == 'GET'
assert slice_to_string(req.buffer, req.path) == '/path/to/resource'
assert slice_to_string(req.buffer, req.version) == 'HTTP/1.1'
}
fn test_parse_http1_request_line_invalid_request() {
buffer := 'INVALID REQUEST LINE'.bytes()
mut req := HttpRequest{
buffer: buffer
}
mut has_error := false
parse_http1_request_line(mut req) or {
has_error = true
assert err.msg() == 'Invalid HTTP request line'
}
assert has_error, 'Expected error for invalid request line'
}
fn test_decode_http_request_valid_request() {
buffer := 'POST /api/resource HTTP/1.0\r\n'.bytes()
req := decode_http_request(buffer) or { panic(err) }
assert slice_to_string(req.buffer, req.method) == 'POST'
assert slice_to_string(req.buffer, req.path) == '/api/resource'
assert slice_to_string(req.buffer, req.version) == 'HTTP/1.0'
}
fn test_decode_http_request_invalid_request() {
buffer := 'INVALID REQUEST LINE'.bytes()
mut has_error := false
decode_http_request(buffer) or {
has_error = true
assert err.msg() == 'Invalid HTTP request line'
}
assert has_error, 'Expected error for invalid request'
}
fn test_get_header_value_slice_existing_header() {
buffer := 'GET / HTTP/1.1\r\nHost: example.com\r\nContent-Type: text/html\r\n\r\n'.bytes()
req := decode_http_request(buffer) or { panic(err) }
host_slice := req.get_header_value_slice('Host') or { panic('Header not found') }
assert slice_to_string(req.buffer, host_slice) == 'example.com'
content_type_slice := req.get_header_value_slice('Content-Type') or {
panic('Header not found')
}
assert slice_to_string(req.buffer, content_type_slice) == 'text/html'
}
fn test_get_header_value_slice_non_existing_header() {
buffer := 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n'.bytes()
req := decode_http_request(buffer) or { panic(err) }
assert req.get_header_value_slice('Content-Type') == none
}