test_wsgiapps.py (3672B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_wsgiapps.py 2 from cherrypy.test import helper 3 4 class WSGIGraftTests(helper.CPWebCase): 5 6 def setup_server(): 7 import os 8 curdir = os.path.join(os.getcwd(), os.path.dirname(__file__)) 9 import cherrypy 10 11 def test_app(environ, start_response): 12 status = '200 OK' 13 response_headers = [('Content-type', 'text/plain')] 14 start_response(status, response_headers) 15 output = ['Hello, world!\n', 'This is a wsgi app running within CherryPy!\n\n'] 16 keys = list(environ.keys()) 17 keys.sort() 18 for k in keys: 19 output.append('%s: %s\n' % (k, environ[k])) 20 21 return output 22 23 def test_empty_string_app(environ, start_response): 24 status = '200 OK' 25 response_headers = [('Content-type', 'text/plain')] 26 start_response(status, response_headers) 27 return ['Hello', 28 '', 29 ' ', 30 '', 31 'world'] 32 33 class WSGIResponse(object): 34 35 def __init__(self, appresults): 36 self.appresults = appresults 37 self.iter = iter(appresults) 38 39 def __iter__(self): 40 return self 41 42 def next(self): 43 return self.iter.next() 44 45 def close(self): 46 if hasattr(self.appresults, 'close'): 47 self.appresults.close() 48 49 class ReversingMiddleware(object): 50 51 def __init__(self, app): 52 self.app = app 53 54 def __call__(self, environ, start_response): 55 results = app(environ, start_response) 56 57 class Reverser(WSGIResponse): 58 59 def next(this): 60 line = list(this.iter.next()) 61 line.reverse() 62 return ''.join(line) 63 64 return Reverser(results) 65 66 class Root: 67 68 def index(self): 69 return "I'm a regular CherryPy page handler!" 70 71 index.exposed = True 72 73 cherrypy.tree.mount(Root()) 74 cherrypy.tree.graft(test_app, '/hosted/app1') 75 cherrypy.tree.graft(test_empty_string_app, '/hosted/app3') 76 app = cherrypy.Application(Root(), script_name=None) 77 cherrypy.tree.graft(ReversingMiddleware(app), '/hosted/app2') 78 79 setup_server = staticmethod(setup_server) 80 wsgi_output = 'Hello, world!\nThis is a wsgi app running within CherryPy!' 81 82 def test_01_standard_app(self): 83 self.getPage('/') 84 self.assertBody("I'm a regular CherryPy page handler!") 85 86 def test_04_pure_wsgi(self): 87 import cherrypy 88 if not cherrypy.server.using_wsgi: 89 return self.skip('skipped (not using WSGI)... ') 90 self.getPage('/hosted/app1') 91 self.assertHeader('Content-Type', 'text/plain') 92 self.assertInBody(self.wsgi_output) 93 94 def test_05_wrapped_cp_app(self): 95 import cherrypy 96 if not cherrypy.server.using_wsgi: 97 return self.skip('skipped (not using WSGI)... ') 98 self.getPage('/hosted/app2/') 99 body = list("I'm a regular CherryPy page handler!") 100 body.reverse() 101 body = ''.join(body) 102 self.assertInBody(body) 103 104 def test_06_empty_string_app(self): 105 import cherrypy 106 if not cherrypy.server.using_wsgi: 107 return self.skip('skipped (not using WSGI)... ') 108 self.getPage('/hosted/app3') 109 self.assertHeader('Content-Type', 'text/plain') 110 self.assertInBody('Hello world')