Removed spurious static_path.
[smonitor.git] / monitor / cherrypy / test / test_proxy.py
blob2fbb619ab4c4050b99d51615e5f87785e441864b
1 import cherrypy
2 from cherrypy.test import helper
4 script_names = ["", "/path/to/myapp"]
7 class ProxyTest(helper.CPWebCase):
9 def setup_server():
11 # Set up site
12 cherrypy.config.update({
13 'tools.proxy.on': True,
14 'tools.proxy.base': 'www.mydomain.test',
17 # Set up application
19 class Root:
21 def __init__(self, sn):
22 # Calculate a URL outside of any requests.
23 self.thisnewpage = cherrypy.url("/this/new/page", script_name=sn)
25 def pageurl(self):
26 return self.thisnewpage
27 pageurl.exposed = True
29 def index(self):
30 raise cherrypy.HTTPRedirect('dummy')
31 index.exposed = True
33 def remoteip(self):
34 return cherrypy.request.remote.ip
35 remoteip.exposed = True
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,
44 def base(self):
45 return cherrypy.request.base
46 base.exposed = True
48 def ssl(self):
49 return cherrypy.request.base
50 ssl.exposed = True
51 ssl._cp_config = {'tools.proxy.scheme': 'X-Forwarded-Ssl'}
53 def newurl(self):
54 return ("Browse to <a href='%s'>this page</a>."
55 % cherrypy.url("/this/new/page"))
56 newurl.exposed = True
58 for sn in script_names:
59 cherrypy.tree.mount(Root(sn), sn)
60 setup_server = staticmethod(setup_server)
62 def testProxy(self):
63 self.getPage("/")
64 self.assertHeader('Location',
65 "%s://www.mydomain.test%s/dummy" %
66 (self.scheme, self.prefix()))
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'),
77 self.assertHeader('Location', "http://www.example.test/dummy")
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")
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)
91 # Test X-Forwarded-Proto (lighttpd)
92 self.getPage("/base", headers=[('X-Forwarded-Proto', 'https')])
93 self.assertBody("https://www.mydomain.test")
95 # Test X-Forwarded-Ssl (webfaction?)
96 self.getPage("/ssl", headers=[('X-Forwarded-Ssl', 'on')])
97 self.assertBody("https://www.mydomain.test")
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>.")
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)
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)