예제 #1
0
    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())
예제 #2
0
 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, '')
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
    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]))
예제 #6
0
 def testHeadersEmptyValue(self):
     req = request(mockReader([HDR('Host:'),
                               HDRE]))
     run_coro(req.read_headers([b'Host']))
     self.assertEqual(req.headers, {b'Host': b''})
예제 #7
0
 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'})
예제 #8
0
 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)
예제 #9
0
 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'})