Esempio n. 1
0
 def test_on_headers_simple(self):
     with mock.patch.object(HTTPConnection, '_remote_ip',
                            return_value=None) as m_obj:
         self.con = HTTPConnection()
         self.con.factory = Mock()
         self.con.request_callback = Mock()
         self.con._remote_ip = "127.0.0.1"
         self.con.connectionMade()
         data = b"GET / HTTP/1.1\r\n"
         self.con._on_headers(data)
         self.assertEqual(self.con.request_callback.call_count, 1)
Esempio n. 2
0
 def test_on_headers_invalid_version(self):
     with mock.patch.object(HTTPConnection, '_remote_ip',
                            return_value=None) as m_obj:
         self.con = HTTPConnection()
         self.con.factory = Mock()
         self.con.request_callback = Mock()
         self.con.transport = Mock()
         self.con._remote_ip = "127.0.0.1"
         self.con.connectionMade()
         data = b"GET / HTTS/1.1"
         self.con._on_headers(data)
         self.con.transport.loseConnection.assert_called_with()
Esempio n. 3
0
 def test_on_headers_big_body(self):
     with mock.patch.object(HTTPConnection, '_remote_ip',
                            return_value=None) as m_obj:
         self.con = HTTPConnection()
         self.con.factory = Mock()
         self.con.transport = StringTransport()
         self.con.setRawMode = Mock()
         self.con._remote_ip = "127.0.0.1"
         self.con.connectionMade()
         data = \
             b"GET / HTTP/1.1\r\n"\
             b"Content-Length: 10000000\r\n"\
             b"\r\n"
         self.con._on_headers(data)
         self.assertTrue(self.con._contentbuffer)
Esempio n. 4
0
 def test_on_headers_content_length(self):
     with mock.patch.object(HTTPConnection, '_remote_ip',
                            return_value=None) as m_obj:
         self.con = HTTPConnection()
         self.con.factory = Mock()
         self.con.setRawMode = Mock()
         self.con._remote_ip = "127.0.0.1"
         self.con.connectionMade()
         data = \
             b"GET / HTTP/1.1\r\n" \
             b"Content-Length: 5\r\n" \
             b"\r\n"
         self.con._on_headers(data)
         self.con.setRawMode.assert_called_with()
         self.assertEqual(self.con.content_length, 5)
Esempio n. 5
0
 def test_on_headers_continue(self):
     with mock.patch.object(HTTPConnection, '_remote_ip',
                            return_value=None) as m_obj:
         self.con = HTTPConnection()
         self.con.factory = Mock()
         self.con.transport = StringTransport()
         self.con.setRawMode = Mock()
         self.con._remote_ip = "127.0.0.1"
         self.con.connectionMade()
         data = \
             b"GET / HTTP/1.1\r\n"\
             b"Content-Length: 5\r\n"\
             b"Expect: 100-continue"\
             b"\r\n"
         self.con._on_headers(data)
         self.assertEqual(self.con.transport.io.getvalue().strip(),
                          b"HTTP/1.1 100 (Continue)")
Esempio n. 6
0
    def request(self, method, uri, *args, **kwargs):
        params = kwargs.pop("params", {}) or {}
        if method in ["GET", "HEAD", "OPTIONS"] and params:
            uri = uri + "?" + urllib.urlencode(params)
        elif method in ["POST", "PATCH", "PUT"]\
                and params and not kwargs['body']:
            kwargs['body'] = urllib.urlencode(params)
        connection = kwargs.pop('connection')
        if not connection:
            connection = HTTPConnection()
            connection.xheaders = False
            kwargs['connection'] = connection
        connection.factory = self.app
        cookie_value = self.cookies.output(header="")
        if cookie_value.strip():
            if kwargs['headers'] is None:
                kwargs['headers'] = {}
            kwargs['headers']['Cookie'] = cookie_value.strip()
        request = HTTPRequest(method, uri, *args, **kwargs)
        for k, p in params.items():
            request.arguments.setdefault(k, []).append(p)
        connection.connectionMade()
        connection._request = request
        connection.transport = proto_helpers.StringTransport()
        request.remote_ip = connection.transport.getHost().host
        handler = self.app(request)

        def setup_response():
            headers = HTTPHeaders()
            for line in handler._generate_headers().split("\r\n"):
                if line.startswith("HTTP") or not line.strip():
                    continue
                headers.parse_line(line)
            for cookie in headers.get_list("Set-Cookie"):
                self.cookies.load(cookie)
            response_body = connection.transport.io.getvalue()
            handler.content = response_body.split("\r\n\r\n", 1)[1]
            handler.headers = headers

        if handler._finished:
            setup_response()
            returnValue(handler)
        yield connection.notifyFinish()
        setup_response()
        returnValue(handler)
Esempio n. 7
0
 def setUp(self):
     self.con = HTTPConnection()
     self.con.factory = Mock()