v/vlib/picohttpparser/request_test.v

64 lines
1.6 KiB
V

module picohttpparser
pub fn test_parses_a_simple_get_request() {
mut req := Request{}
parsed := req.parse_request('GET / HTTP/1.1\r\nHost: example.com\r\n\r\n') or {
assert false, 'error while parse request: ${err}'
0
}
assert parsed == 37
assert req.method == 'GET'
assert req.path == '/'
assert req.headers[0].name == 'Host'
assert req.headers[0].value == 'example.com'
}
pub fn test_parses_multiple_headers() {
mut req := Request{}
parsed := req.parse_request('GET /foo?bar=baz HTTP/1.1\r\nHeader1: value1\r\nHeader2: value2\r\n\r\n') or {
assert false, 'error while parse request: ${err}'
0
}
assert parsed == 63
assert req.headers[1].name == 'Header2'
assert req.headers[1].value == 'value2'
}
pub fn test_parses_requests_with_bodies() {
mut req := Request{}
parsed := req.parse_request('POST /data HTTP/1.1\r\nContent-Length: 10\r\n\r\nsomedata') or {
assert false, 'error while parse request: ${err}'
0
}
assert parsed == 43
assert req.body == 'somedata'
}
pub fn test_handles_empty_requests() {
mut req := Request{}
parsed := req.parse_request('') or {
assert false, 'error while parse request: ${err}'
0
}
assert parsed == -2
}
pub fn test_handles_incomplete_requests() {
mut req := Request{}
partial_parsed := req.parse_request('GET /partial') or {
assert false, 'error while parse request: ${err}'
0
}
assert partial_parsed == -2
assert req.prev_len == 0
remaining_parsed := req.parse_request(' HTTP/1.1\r\n\r\n') or {
assert err.msg() == 'error parsing request: invalid character "13"'
0
}
assert remaining_parsed == 0
assert req.method == ''
assert req.path == ''
}