예제 #1
0
    def setup_server(cls):
        class Root(helper.Controller):
            def hello(self, req, resp):
                return "hello"

        cls.httpserver.wsgi_app = Root()
        cls.httpserver.ssl_adapter = helper.get_ssl_adapter(cls.adapter)
        context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
        context.check_hostname = False
        context.verify_mode = ssl.CERT_NONE
        cls.HTTP_CONN = HTTPSConnection(webtest.interface(cls.HOST),
                                        cls.PORT,
                                        context=context)
        cls.scheme = 'https'
예제 #2
0
 def test_content_length_required(self):
     # Now send a message that has no Content-Length, but does send a body.
     # Verify that CP times out the socket and responds
     # with 411 Length Required.
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.request("POST", "/body_required")
     response = c.getresponse()
     self.body = response.fp.read()
     self.status = str(response.status)
     self.assertStatus(411)
예제 #3
0
 def test_no_content_length(self):
     # "The presence of a message-body in a request is signaled by the
     # inclusion of a Content-Length or Transfer-Encoding header field in
     # the request's message-headers."
     #
     # Send a message with neither header and no body.
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.request("POST", "/no_body")
     response = c.getresponse()
     self.body = response.fp.read()
     self.status = str(response.status)
     self.assertStatus(200)
     self.assertBody(b'Hello world!')
예제 #4
0
    def test_malformed_header(self):
        if self.scheme == 'https':
            c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
        else:
            c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        c.putrequest('GET', '/')
        c.putheader('Content-Type', 'text/plain')
        # See http://www.bitbucket.org/cherrypy/cherrypy/issue/941
        c._output(b'Re, 1.2.3.4#015#012')
        c.endheaders()

        response = c.getresponse()
        self.status = str(response.status)
        self.assertStatus(400)
        self.body = response.fp.read(20)
        self.assertBody("Illegal header line.")
예제 #5
0
 def test_malformed_request_line(self):
     # Test missing version in Request-Line
     if self.scheme == 'https':
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c._output(b'GET /')
     c._send_output()
     if hasattr(c, 'strict'):
         response = c.response_class(c.sock, strict=c.strict, method='GET')
     else:
         # Python 3.2 removed the 'strict' feature, saying:
         # "http.client now always assumes HTTP/1.x compliant servers."
         response = c.response_class(c.sock, method='GET')
     response.begin()
     self.assertEqual(response.status, 400)
     self.assertEqual(response.fp.read(22), b"Malformed Request-Line")
     c.close()
예제 #6
0
 def test_chunked_request_payload_trailer(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo_lines")
     c.putheader("Transfer-Encoding", "chunked")
     c.endheaders()
     c.send(b"13\r\nI am a\nrequest body\r\n0\r\n"
            b"Content-Type: application/json\r\n\r\n")
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(200)
     self.assertBody("I am a\nrequest body")
     self.assertHeader("Content-Type", "application/json")
예제 #7
0
 def test_request_payload_readline(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo_lines")
     body = b"I am a\nrequest body"
     c.putheader("Content-Length", len(body))
     c.endheaders()
     c.send(body)
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(200)
     self.assertBody(body)
예제 #8
0
 def test_max_body(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo")
     body = b"x" * 1001
     c.putheader("Content-Length", len(body))
     c.endheaders()
     c.send(body)
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(413)
     self.assertBody("The entity sent with the request exceeds "
                     "the maximum allowed bytes.")