def test_parse_request_line(data, method, path, query, version): parser = Parser(None) m, u, v = parser.parse_request_line(data) assert m == method assert u.path == path assert u.query == query assert v == version
def test_consume_byte_by_byte(): responder = mock_responder() p = Parser(responder) for b in "GET / HTTP/1.1\nhost: nowhere.com\n\n": p.consume(b.encode()) assert not p.needs_headers assert 'HOST' in responder.headers assert responder.headers['HOST'] == "nowhere.com"
def test_good_header_pieces(): q = mock_responder() p = Parser(q) p.consume(b"GET / HTTP/1.1\r\n") p.consume(b"host: nowhere.com\r\n") p.consume(b"\r\n") headers = q.headers assert not p.needs_headers assert 'HOST' in headers assert headers['HOST'] == 'nowhere.com'
def test_consume(): q = mock_responder() p = Parser(q) p.consume(b"GET") assert p._buffer == [b"GET"] p.consume(b" /path HTTP/1.1") p.consume(b"\n") data = q.data assert data['method'] == 'GET' assert data['url'].path == '/path' assert data['version'] == 'HTTP/1.1' assert not p.needs_request_line q2 = mock_responder() Parser(q2).consume(b"GET /path HTTP/1.1\nhost: noplace\n\n") data = q2.data assert data['method'] == 'GET' assert data['url'].path == '/path' assert data['version'] == 'HTTP/1.1'
def test_parser_determine_newline(data, expected): val = Parser.determine_newline(data) assert val == expected
def parser(mock_responder): return Parser(mock_responder)
def testfind_newline(line, location, value): parser = Parser(None) assert parser.EOL_TOKEN is None assert parser.find_newline(line) == location assert parser.EOL_TOKEN == value