def test_parse_ignores_trailing_chars(self) -> None: request_str = ( self.get_request_str('/foo') + ' here is\nsome\r more \n\n random stuff !!\r!! \n\n\n ') actual = parse(request_str) expected = self.get_request(['foo']) self.assertEqual(actual, expected)
def test_handler_code_400(self) -> None: response_200 = Response(200, ('text', 'plain'), '') @create_handler def custom_handler(request: Request) -> Response: return response_200 good_request_str = '{} / {}{}'.format(GET_METHOD, HTTP_VERSION, CRLF) self.assertIsNotNone(parse(good_request_str)) self.assertEqual(response_200.get_bytes(), custom_handler(good_request_str.encode())) bad_request_str = '{}/ {}{}'.format(GET_METHOD, HTTP_VERSION, CRLF) self.assertIsNone(parse(bad_request_str)) self.assertEqual( Response(400).get_bytes(), custom_handler(bad_request_str.encode()))
def test_missing_uri(self) -> None: self.assertIsNone( parse('{} {}{}'.format(GET_METHOD, HTTP_VERSION, CRLF)))
def test_missing_method(self) -> None: self.assertIsNone(parse('/ {}{}'.format(HTTP_VERSION, CRLF)))
def test_invalid_version(self) -> None: self.assertIsNone(parse('{} / HtTP/1.1{}'.format(GET_METHOD, CRLF)))
def test_invalid_uri(self) -> None: self.assertIsNone(parse(self.get_request_str('foo'))) self.assertIsNotNone(parse(self.get_request_str('/foo')))
def test_invalid_method(self) -> None: self.assertIsNone(parse('gET / {}{}'.format(HTTP_VERSION, CRLF)))
def test_other_whitespace(self) -> None: self.assertIsNone( parse('{} /foo/\nbar {}{}'.format(GET_METHOD, HTTP_VERSION, CRLF))) self.assertIsNotNone( parse('{} /foo/bar {}{}'.format(GET_METHOD, HTTP_VERSION, CRLF)))
def test_trailing_space(self) -> None: self.assertIsNone( parse('{} / {} {}'.format(GET_METHOD, HTTP_VERSION, CRLF)))
def test_missing_crlf(self) -> None: self.assertIsNone(parse('{} / {}'.format(GET_METHOD, HTTP_VERSION)))
def get_actual_expected( cls, uri: str, uri_ast: List[str]) -> Tuple[Optional[Request], Request]: actual = parse(cls.get_request_str(uri)) expected = cls.get_request(uri_ast) return actual, expected
def test_only_method_space_uri_space_version(self) -> None: self.assertIsNone(parse(GET_METHOD + ' / ' + HTTP_VERSION))
def test_only_method_space_uri_space(self) -> None: self.assertIsNone(parse(GET_METHOD + ' / '))
def test_only_method(self) -> None: self.assertIsNone(parse(GET_METHOD))
def test_empty_str(self) -> None: self.assertIsNone(parse(''))
def test_missing_version(self) -> None: self.assertIsNone(parse('{} / {}'.format(GET_METHOD, CRLF)))