test_config_server.py (3386B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_config_server.py 2 import os, sys 3 localDir = os.path.join(os.getcwd(), os.path.dirname(__file__)) 4 import socket 5 import time 6 import cherrypy 7 from cherrypy.test import helper 8 9 class ServerConfigTests(helper.CPWebCase): 10 11 def setup_server(): 12 13 class Root: 14 15 def index(self): 16 return cherrypy.request.wsgi_environ['SERVER_PORT'] 17 18 index.exposed = True 19 20 def upload(self, file): 21 return 'Size: %s' % len(file.file.read()) 22 23 upload.exposed = True 24 25 def tinyupload(self): 26 return cherrypy.request.body.read() 27 28 tinyupload.exposed = True 29 tinyupload._cp_config = {'request.body.maxbytes': 100} 30 31 cherrypy.tree.mount(Root()) 32 cherrypy.config.update({'server.socket_host': '0.0.0.0', 33 'server.socket_port': 9876, 34 'server.max_request_body_size': 200, 35 'server.max_request_header_size': 500, 36 'server.socket_timeout': 0.5, 37 'server.2.instance': 'cherrypy._cpwsgi_server.CPWSGIServer', 38 'server.2.socket_port': 9877, 39 'server.yetanother.socket_port': 9878}) 40 41 setup_server = staticmethod(setup_server) 42 PORT = 9876 43 44 def testBasicConfig(self): 45 self.getPage('/') 46 self.assertBody(str(self.PORT)) 47 48 def testAdditionalServers(self): 49 if self.scheme == 'https': 50 return self.skip('not available under ssl') 51 self.PORT = 9877 52 self.getPage('/') 53 self.assertBody(str(self.PORT)) 54 self.PORT = 9878 55 self.getPage('/') 56 self.assertBody(str(self.PORT)) 57 58 def testMaxRequestSizePerHandler(self): 59 if getattr(cherrypy.server, 'using_apache', False): 60 return self.skip('skipped due to known Apache differences... ') 61 self.getPage('/tinyupload', method='POST', headers=[('Content-Type', 'text/plain'), ('Content-Length', '100')], body='x' * 100) 62 self.assertStatus(200) 63 self.assertBody('x' * 100) 64 self.getPage('/tinyupload', method='POST', headers=[('Content-Type', 'text/plain'), ('Content-Length', '101')], body='x' * 101) 65 self.assertStatus(413) 66 67 def testMaxRequestSize(self): 68 if getattr(cherrypy.server, 'using_apache', False): 69 return self.skip('skipped due to known Apache differences... ') 70 for size in (500, 5000, 50000): 71 self.getPage('/', headers=[('From', 'x' * 500)]) 72 self.assertStatus(413) 73 74 lines256 = 'x' * 248 75 self.getPage('/', headers=[('Host', '%s:%s' % (self.HOST, self.PORT)), ('From', lines256)]) 76 body = '\r\n'.join(['--x', 77 'Content-Disposition: form-data; name="file"; filename="hello.txt"', 78 'Content-Type: text/plain', 79 '', 80 '%s', 81 '--x--']) 82 partlen = 200 - len(body) 83 b = body % ('x' * partlen) 84 h = [('Content-type', 'multipart/form-data; boundary=x'), ('Content-Length', '%s' % len(b))] 85 self.getPage('/upload', h, 'POST', b) 86 self.assertBody('Size: %d' % partlen) 87 b = body % ('x' * 200) 88 h = [('Content-type', 'multipart/form-data; boundary=x'), ('Content-Length', '%s' % len(b))] 89 self.getPage('/upload', h, 'POST', b) 90 self.assertStatus(413)