mirror of
https://github.com/vlang/v.git
synced 2025-09-11 08:25:42 -04:00
69 lines
2.1 KiB
V
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
|
|
}
|