| 1 | module picohttpparser |
| 2 | |
| 3 | pub 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 | |
| 17 | pub 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 | |
| 28 | pub 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 | |
| 38 | pub 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 | |
| 47 | pub 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 | |