mirror of
https://github.com/vlang/v.git
synced 2025-08-03 17:57:59 -04:00
64 lines
1.6 KiB
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 == ''
|
|
}
|