def testRequestLineNegative(self): runs = ['', '\t\t', ' ', ' / HTTP/1.1', 'GET', 'GET /', 'GET / '] for r in runs: with self.assertRaises(HTTPException): req = request(mockReader(r)) run_generator(req.read_request_line())
def testUrlFinderParameterized(self): srv = webserver() # Add few routes srv.add_route('/', 0) srv.add_route('/<user_name>', 1) srv.add_route('/a/<id>', 2) # Check first url (non param) rq = request(mockReader([])) rq.path = b'/' f, args = srv._find_url_handler(rq) self.assertEqual(f, 0) # Check second url rq.path = b'/user1' f, args = srv._find_url_handler(rq) self.assertEqual(f, 1) self.assertEqual(args['_param_name'], 'user_name') self.assertEqual(rq._param, 'user1') # Check third url rq.path = b'/a/123456' f, args = srv._find_url_handler(rq) self.assertEqual(f, 2) self.assertEqual(args['_param_name'], 'id') self.assertEqual(rq._param, '123456') # When param is empty and there is no non param endpoint rq.path = b'/a/' f, args = srv._find_url_handler(rq) self.assertEqual(f, 2) self.assertEqual(rq._param, '')
def testHeadersMultiple(self): req = request(mockReader([HDR('Host: google.com'), HDR('Junk: you blah'), HDR('Content-type: file'), HDRE])) hdrs = {b'Host': b'google.com', b'Junk': b'you blah', b'Content-type': b'file'} run_coro(req.read_headers([b'Host', b'Junk', b'Content-type'])) self.assertEqual(req.headers, hdrs)
def testUrlFinderExplicit(self): urls = [('/', 1), ('/%20', 2), ('/a/b', 3), ('/aac', 5)] junk = ['//', '', '/a', '/aa', '/a/fhhfhfhfhfhf'] # Create server, add routes srv = webserver() for u in urls: srv.add_route(u[0], u[1]) # Search them all for u in urls: # Create mock request object with "pre-parsed" url path rq = request(mockReader([])) rq.path = u[0].encode() f, args = srv._find_url_handler(rq) self.assertEqual(u[1], f) # Some simple negative cases for j in junk: rq = request(mockReader([])) rq.path = j.encode() f, args = srv._find_url_handler(rq) self.assertIsNone(f) self.assertIsNone(args)
def testRequestLine(self): runs = [('GETT / HTTP/1.1', 'GETT', '/'), ('TTEG\t/blah\tHTTP/1.1', 'TTEG', '/blah'), ('POST /qq/?q=q HTTP', 'POST', '/qq/', 'q=q'), ('POST /?q=q BSHT', 'POST', '/', 'q=q'), ('POST /?q=q&a=a JUNK', 'POST', '/', 'q=q&a=a')] for r in runs: try: req = request(mockReader(r[0])) run_coro(req.read_request_line()) self.assertEqual(r[1].encode(), req.method) self.assertEqual(r[2].encode(), req.path) if len(r) > 3: self.assertEqual(r[3].encode(), req.query_string) except Exception: self.fail('exception on payload --{}--'.format(r[0]))
def testHeadersEmptyValue(self): req = request(mockReader([HDR('Host:'), HDRE])) run_coro(req.read_headers([b'Host'])) self.assertEqual(req.headers, {b'Host': b''})
def testHeadersSpaces(self): req = request(mockReader([HDR('Host: \t google.com \t '), HDRE])) run_coro(req.read_headers([b'Host'])) self.assertEqual(req.headers, {b'Host': b'google.com'})
def testRequestLineEmptyLinesBefore(self): req = request(mockReader(['\n', '\r\n', 'GET /?a=a HTTP/1.1'])) run_coro(req.read_request_line()) self.assertEqual(b'GET', req.method) self.assertEqual(b'/', req.path) self.assertEqual(b'a=a', req.query_string)
def testHeadersSimple(self): req = request(mockReader([HDR('Host: google.com'), HDRE])) run_generator(req.read_headers()) self.assertEqual(req.headers, {b'Host': b'google.com'})