Пример #1
0
 def test_host_and_address(self):
     data = 'GET localhost/right_address HTTP/1.0\r\n\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertTrue(req.valid)
     self.assertEqual(req.address, '/right_address')
     self.assertEqual(req.headers['Host'], 'localhost')
     data = 'GET /right_address HTTP/1.1\r\nHost: localhost\r\n\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertTrue(req.valid)
     self.assertEqual(req.address, '/right_address')
     self.assertEqual(req.headers['Host'], 'localhost')
Пример #2
0
 async def _handle_request(self,
                           data: bytes,
                           reader: asyncio.StreamReader) -> \
         Tuple[HttpResponse, bool]:
     req = HttpRequest.from_bytes(data)
     if 'Content-Length' in req.headers and req.form is None:
         length = int(req.headers['Content-Length'])
         file_data = await reader.read(length)
         while len(file_data) < length:
             file_data += await reader.read(length - len(file_data))
         data += file_data
         req = HttpRequest.from_bytes(data)
     if req.address not in self.handlers:
         return HttpResponse(Code.PAGE_NOT_FOUND), False
     handler = self.handlers[req.address]
     res = handler(req)
     return res, req.headers['Connection'] == 'keep-alive'
Пример #3
0
 def test_params(self):
     data = 'GET /addr?a=1&b=param_b&c=abracadabra HTTP/1.1\r\n' \
            'Host: abc\r\n' \
            '\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertTrue(req.valid)
     self.assertDictEqual(req.params, {
         'a': '1',
         'b': 'param_b',
         'c': 'abracadabra'
     })
Пример #4
0
    def simple_test(self):
        server = Server()

        @server.text('page')
        def test_func(request):
            return 'test'

        response = test_func(HttpRequest(Method.GET, 'page'))
        self.assertIsInstance(response, HttpResponse)
        self.assertEqual(response.text_data, b'test')
        self.assertIn(test_func, server.handlers['page'])
Пример #5
0
 def test_cookies(self):
     data = 'GET /addr HTTP/1.1\r\n' \
            'Host: abc\r\n' \
            'Cookie: a=1; b=cookie_b; c=lorem ipsum\r\n' \
            '\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertTrue(req.valid)
     self.assertDictEqual(req.cookies, {
         'a': '1',
         'b': 'cookie_b',
         'c': 'lorem ipsum'
     })
Пример #6
0
 def test_headers(self):
     data = 'GET /addr HTTP/1.1\r\n' \
            'Host: abc\r\n' \
            'a: 1\r\n' \
            'b: header_b\r\n' \
            'c: lorem ipsum\r\n' \
            '\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertTrue(req.valid)
     self.assertDictEqual(
         req.headers, {
             'a': '1',
             'b': 'header_b',
             'c': 'lorem ipsum',
             'Host': 'abc',
             'Connection': 'keep-alive'
         })
Пример #7
0
 def test_post_simple(self):
     data = b'POST / HTTP/1.1\r\n' \
            b'Host: server\r\n' \
            b'\r\n'
     req = HttpRequest.from_bytes(data)
     self.assertEqual(req.method, Method.POST)
Пример #8
0
 def assert_invalid(self, data):
     try:
         req = HttpRequest.from_bytes(data)
     except Exception:
         self.fail()
     self.assertFalse(req.valid)
Пример #9
0
 def test_method(self):
     data = 'GET 127.0.0.1/ HTTP/1.0\r\n\r\n'
     req = HttpRequest.from_bytes(data.encode())
     self.assertEqual(req.method, Method.GET)