v / vlib / picohttpparser / request_test.v
63 lines · 56 sloc · 1.61 KB · ee16f6f0944fda8bba809c00f2721d278e099a97
Raw
1module picohttpparser
2
3pub fn test_parses_a_simple_get_request() {
4 mut req := Request{}
5 parsed := req.parse_request('GET / HTTP/1.1\r\nHost: example.com\r\n\r\n') or {
6 assert false, 'error while parse request: ${err}'
7 0
8 }
9
10 assert parsed == 37
11 assert req.method == 'GET'
12 assert req.path == '/'
13 assert req.headers[0].name == 'Host'
14 assert req.headers[0].value == 'example.com'
15}
16
17pub fn test_parses_multiple_headers() {
18 mut req := Request{}
19 parsed := req.parse_request('GET /foo?bar=baz HTTP/1.1\r\nHeader1: value1\r\nHeader2: value2\r\n\r\n') or {
20 assert false, 'error while parse request: ${err}'
21 0
22 }
23 assert parsed == 63
24 assert req.headers[1].name == 'Header2'
25 assert req.headers[1].value == 'value2'
26}
27
28pub fn test_parses_requests_with_bodies() {
29 mut req := Request{}
30 parsed := req.parse_request('POST /data HTTP/1.1\r\nContent-Length: 10\r\n\r\nsomedata') or {
31 assert false, 'error while parse request: ${err}'
32 0
33 }
34 assert parsed == 43
35 assert req.body == 'somedata'
36}
37
38pub fn test_handles_empty_requests() {
39 mut req := Request{}
40 parsed := req.parse_request('') or {
41 assert false, 'error while parse request: ${err}'
42 0
43 }
44 assert parsed == -2
45}
46
47pub fn test_handles_incomplete_requests() {
48 mut req := Request{}
49 partial_parsed := req.parse_request('GET /partial') or {
50 assert false, 'error while parse request: ${err}'
51 0
52 }
53 assert partial_parsed == -2
54 assert req.prev_len == 0
55
56 remaining_parsed := req.parse_request(' HTTP/1.1\r\n\r\n') or {
57 assert err.msg() == 'error parsing request: invalid character "13"'
58 0
59 }
60 assert remaining_parsed == 0
61 assert req.method == ''
62 assert req.path == ''
63}
64