test_proxy.py (4105B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_proxy.py 2 import cherrypy 3 from cherrypy.test import helper 4 script_names = ['', '/path/to/myapp'] 5 6 class ProxyTest(helper.CPWebCase): 7 8 def setup_server(): 9 cherrypy.config.update({'tools.proxy.on': True, 10 'tools.proxy.base': 'www.mydomain.test'}) 11 12 class Root: 13 14 def __init__(self, sn): 15 self.thisnewpage = cherrypy.url('/this/new/page', script_name=sn) 16 17 def pageurl(self): 18 return self.thisnewpage 19 20 pageurl.exposed = True 21 22 def index(self): 23 raise cherrypy.HTTPRedirect('dummy') 24 25 index.exposed = True 26 27 def remoteip(self): 28 return cherrypy.request.remote.ip 29 30 remoteip.exposed = True 31 32 def xhost(self): 33 raise cherrypy.HTTPRedirect('blah') 34 35 xhost.exposed = True 36 xhost._cp_config = {'tools.proxy.local': 'X-Host', 37 'tools.trailing_slash.extra': True} 38 39 def base(self): 40 return cherrypy.request.base 41 42 base.exposed = True 43 44 def ssl(self): 45 return cherrypy.request.base 46 47 ssl.exposed = True 48 ssl._cp_config = {'tools.proxy.scheme': 'X-Forwarded-Ssl'} 49 50 def newurl(self): 51 return "Browse to <a href='%s'>this page</a>." % cherrypy.url('/this/new/page') 52 53 newurl.exposed = True 54 55 for sn in script_names: 56 cherrypy.tree.mount(Root(sn), sn) 57 58 setup_server = staticmethod(setup_server) 59 60 def testProxy(self): 61 self.getPage('/') 62 self.assertHeader('Location', '%s://www.mydomain.test%s/dummy' % (self.scheme, self.prefix())) 63 self.getPage('/', headers=[('X-Forwarded-Host', 'http://www.example.test')]) 64 self.assertHeader('Location', 'http://www.example.test/dummy') 65 self.getPage('/', headers=[('X-Forwarded-Host', 'www.example.test')]) 66 self.assertHeader('Location', '%s://www.example.test/dummy' % self.scheme) 67 self.getPage('/', headers=[('X-Forwarded-Host', 'http://www.example.test, www.cherrypy.test')]) 68 self.assertHeader('Location', 'http://www.example.test/dummy') 69 self.getPage('/remoteip', headers=[('X-Forwarded-For', '192.168.0.20')]) 70 self.assertBody('192.168.0.20') 71 self.getPage('/remoteip', headers=[('X-Forwarded-For', '67.15.36.43, 192.168.0.20')]) 72 self.assertBody('192.168.0.20') 73 self.getPage('/xhost', headers=[('X-Host', 'www.example.test')]) 74 self.assertHeader('Location', '%s://www.example.test/blah' % self.scheme) 75 self.getPage('/base', headers=[('X-Forwarded-Proto', 'https')]) 76 self.assertBody('https://www.mydomain.test') 77 self.getPage('/ssl', headers=[('X-Forwarded-Ssl', 'on')]) 78 self.assertBody('https://www.mydomain.test') 79 for sn in script_names: 80 self.getPage(sn + '/newurl') 81 self.assertBody("Browse to <a href='%s://www.mydomain.test" % self.scheme + sn + "/this/new/page'>this page</a>.") 82 self.getPage(sn + '/newurl', headers=[('X-Forwarded-Host', 'http://www.example.test')]) 83 self.assertBody("Browse to <a href='http://www.example.test" + sn + "/this/new/page'>this page</a>.") 84 port = '' 85 if self.scheme == 'http' and self.PORT != 80: 86 port = ':%s' % self.PORT 87 elif self.scheme == 'https' and self.PORT != 443: 88 port = ':%s' % self.PORT 89 host = self.HOST 90 if host in ('0.0.0.0', '::'): 91 import socket 92 host = socket.gethostname() 93 expected = '%s://%s%s%s/this/new/page' % (self.scheme, 94 host, 95 port, 96 sn) 97 self.getPage(sn + '/pageurl') 98 self.assertBody(expected) 99 100 self.getPage('/xhost/', headers=[('X-Host', 'www.example.test')]) 101 self.assertHeader('Location', '%s://www.example.test/xhost' % self.scheme)