Package cherrypy :: Package test :: Module test_proxy
[hide private]
[frames] | no frames]

Source Code for Module cherrypy.test.test_proxy

  1  import cherrypy 
  2  from cherrypy.test import helper 
  3   
  4  script_names = ["", "/path/to/myapp"] 
  5   
  6   
7 -class ProxyTest(helper.CPWebCase):
8
9 - def setup_server():
10 11 # Set up site 12 cherrypy.config.update({ 13 'tools.proxy.on': True, 14 'tools.proxy.base': 'www.mydomain.test', 15 }) 16 17 # Set up application 18 19 class Root: 20 21 def __init__(self, sn): 22 # Calculate a URL outside of any requests. 23 self.thisnewpage = cherrypy.url("/this/new/page", script_name=sn)
24 25 def pageurl(self): 26 return self.thisnewpage
27 pageurl.exposed = True 28 29 def index(self): 30 raise cherrypy.HTTPRedirect('dummy') 31 index.exposed = True 32 33 def remoteip(self): 34 return cherrypy.request.remote.ip 35 remoteip.exposed = True 36 37 def xhost(self): 38 raise cherrypy.HTTPRedirect('blah') 39 xhost.exposed = True 40 xhost._cp_config = {'tools.proxy.local': 'X-Host', 41 'tools.trailing_slash.extra': True, 42 } 43 44 def base(self): 45 return cherrypy.request.base 46 base.exposed = True 47 48 def ssl(self): 49 return cherrypy.request.base 50 ssl.exposed = True 51 ssl._cp_config = {'tools.proxy.scheme': 'X-Forwarded-Ssl'} 52 53 def newurl(self): 54 return ("Browse to <a href='%s'>this page</a>." 55 % cherrypy.url("/this/new/page")) 56 newurl.exposed = True 57 58 for sn in script_names: 59 cherrypy.tree.mount(Root(sn), sn) 60 setup_server = staticmethod(setup_server) 61
62 - def testProxy(self):
63 self.getPage("/") 64 self.assertHeader('Location', 65 "%s://www.mydomain.test%s/dummy" % 66 (self.scheme, self.prefix())) 67 68 # Test X-Forwarded-Host (Apache 1.3.33+ and Apache 2) 69 self.getPage("/", headers=[('X-Forwarded-Host', 'http://www.example.test')]) 70 self.assertHeader('Location', "http://www.example.test/dummy") 71 self.getPage("/", headers=[('X-Forwarded-Host', 'www.example.test')]) 72 self.assertHeader('Location', "%s://www.example.test/dummy" % self.scheme) 73 # Test multiple X-Forwarded-Host headers 74 self.getPage("/", headers=[ 75 ('X-Forwarded-Host', 'http://www.example.test, www.cherrypy.test'), 76 ]) 77 self.assertHeader('Location', "http://www.example.test/dummy") 78 79 # Test X-Forwarded-For (Apache2) 80 self.getPage("/remoteip", 81 headers=[('X-Forwarded-For', '192.168.0.20')]) 82 self.assertBody("192.168.0.20") 83 self.getPage("/remoteip", 84 headers=[('X-Forwarded-For', '67.15.36.43, 192.168.0.20')]) 85 self.assertBody("192.168.0.20") 86 87 # Test X-Host (lighttpd; see https://trac.lighttpd.net/trac/ticket/418) 88 self.getPage("/xhost", headers=[('X-Host', 'www.example.test')]) 89 self.assertHeader('Location', "%s://www.example.test/blah" % self.scheme) 90 91 # Test X-Forwarded-Proto (lighttpd) 92 self.getPage("/base", headers=[('X-Forwarded-Proto', 'https')]) 93 self.assertBody("https://www.mydomain.test") 94 95 # Test X-Forwarded-Ssl (webfaction?) 96 self.getPage("/ssl", headers=[('X-Forwarded-Ssl', 'on')]) 97 self.assertBody("https://www.mydomain.test") 98 99 # Test cherrypy.url() 100 for sn in script_names: 101 # Test the value inside requests 102 self.getPage(sn + "/newurl") 103 self.assertBody("Browse to <a href='%s://www.mydomain.test" % self.scheme 104 + sn + "/this/new/page'>this page</a>.") 105 self.getPage(sn + "/newurl", headers=[('X-Forwarded-Host', 106 'http://www.example.test')]) 107 self.assertBody("Browse to <a href='http://www.example.test" 108 + sn + "/this/new/page'>this page</a>.") 109 110 # Test the value outside requests 111 port = "" 112 if self.scheme == "http" and self.PORT != 80: 113 port = ":%s" % self.PORT 114 elif self.scheme == "https" and self.PORT != 443: 115 port = ":%s" % self.PORT 116 host = self.HOST 117 if host in ('0.0.0.0', '::'): 118 import socket 119 host = socket.gethostname() 120 expected = ("%s://%s%s%s/this/new/page" 121 % (self.scheme, host, port, sn)) 122 self.getPage(sn + "/pageurl") 123 self.assertBody(expected) 124 125 # Test trailing slash (see http://www.cherrypy.org/ticket/562). 126 self.getPage("/xhost/", headers=[('X-Host', 'www.example.test')]) 127 self.assertHeader('Location', "%s://www.example.test/xhost" 128 % self.scheme)
129