mirror of
https://github.com/moparisthebest/SickRage
synced 2024-12-15 12:32:18 -05:00
cec4ed573d
Switched out sqlite3 libs in favour of SQLAlchemy v0.9, will gradually migrate dialects and scheme to be fully SQLAlchemy compliant for using there ORM with sessions instead of direct. Fixed getEpisode function to stop making unrequired scene number conversions on already converted data thats available now from cache.
138 lines
5.0 KiB
Python
138 lines
5.0 KiB
Python
import cherrypy
|
|
from cherrypy.test import helper
|
|
|
|
script_names = ["", "/path/to/myapp"]
|
|
|
|
|
|
class ProxyTest(helper.CPWebCase):
|
|
|
|
def setup_server():
|
|
|
|
# Set up site
|
|
cherrypy.config.update({
|
|
'tools.proxy.on': True,
|
|
'tools.proxy.base': 'www.mydomain.test',
|
|
})
|
|
|
|
# Set up application
|
|
|
|
class Root:
|
|
|
|
def __init__(self, sn):
|
|
# Calculate a URL outside of any requests.
|
|
self.thisnewpage = cherrypy.url(
|
|
"/this/new/page", script_name=sn)
|
|
|
|
def pageurl(self):
|
|
return self.thisnewpage
|
|
pageurl.exposed = True
|
|
|
|
def index(self):
|
|
raise cherrypy.HTTPRedirect('dummy')
|
|
index.exposed = True
|
|
|
|
def remoteip(self):
|
|
return cherrypy.request.remote.ip
|
|
remoteip.exposed = True
|
|
|
|
def xhost(self):
|
|
raise cherrypy.HTTPRedirect('blah')
|
|
xhost.exposed = True
|
|
xhost._cp_config = {'tools.proxy.local': 'X-Host',
|
|
'tools.trailing_slash.extra': True,
|
|
}
|
|
|
|
def base(self):
|
|
return cherrypy.request.base
|
|
base.exposed = True
|
|
|
|
def ssl(self):
|
|
return cherrypy.request.base
|
|
ssl.exposed = True
|
|
ssl._cp_config = {'tools.proxy.scheme': 'X-Forwarded-Ssl'}
|
|
|
|
def newurl(self):
|
|
return ("Browse to <a href='%s'>this page</a>."
|
|
% cherrypy.url("/this/new/page"))
|
|
newurl.exposed = True
|
|
|
|
for sn in script_names:
|
|
cherrypy.tree.mount(Root(sn), sn)
|
|
setup_server = staticmethod(setup_server)
|
|
|
|
def testProxy(self):
|
|
self.getPage("/")
|
|
self.assertHeader('Location',
|
|
"%s://www.mydomain.test%s/dummy" %
|
|
(self.scheme, self.prefix()))
|
|
|
|
# Test X-Forwarded-Host (Apache 1.3.33+ and Apache 2)
|
|
self.getPage(
|
|
"/", headers=[('X-Forwarded-Host', 'http://www.example.test')])
|
|
self.assertHeader('Location', "http://www.example.test/dummy")
|
|
self.getPage("/", headers=[('X-Forwarded-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/dummy" %
|
|
self.scheme)
|
|
# Test multiple X-Forwarded-Host headers
|
|
self.getPage("/", headers=[
|
|
('X-Forwarded-Host', 'http://www.example.test, www.cherrypy.test'),
|
|
])
|
|
self.assertHeader('Location', "http://www.example.test/dummy")
|
|
|
|
# Test X-Forwarded-For (Apache2)
|
|
self.getPage("/remoteip",
|
|
headers=[('X-Forwarded-For', '192.168.0.20')])
|
|
self.assertBody("192.168.0.20")
|
|
#Fix bug #1268
|
|
self.getPage("/remoteip",
|
|
headers=[
|
|
('X-Forwarded-For', '67.15.36.43, 192.168.0.20')
|
|
])
|
|
self.assertBody("67.15.36.43")
|
|
|
|
# Test X-Host (lighttpd; see https://trac.lighttpd.net/trac/ticket/418)
|
|
self.getPage("/xhost", headers=[('X-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/blah" %
|
|
self.scheme)
|
|
|
|
# Test X-Forwarded-Proto (lighttpd)
|
|
self.getPage("/base", headers=[('X-Forwarded-Proto', 'https')])
|
|
self.assertBody("https://www.mydomain.test")
|
|
|
|
# Test X-Forwarded-Ssl (webfaction?)
|
|
self.getPage("/ssl", headers=[('X-Forwarded-Ssl', 'on')])
|
|
self.assertBody("https://www.mydomain.test")
|
|
|
|
# Test cherrypy.url()
|
|
for sn in script_names:
|
|
# Test the value inside requests
|
|
self.getPage(sn + "/newurl")
|
|
self.assertBody(
|
|
"Browse to <a href='%s://www.mydomain.test" % self.scheme
|
|
+ sn + "/this/new/page'>this page</a>.")
|
|
self.getPage(sn + "/newurl", headers=[('X-Forwarded-Host',
|
|
'http://www.example.test')])
|
|
self.assertBody("Browse to <a href='http://www.example.test"
|
|
+ sn + "/this/new/page'>this page</a>.")
|
|
|
|
# Test the value outside requests
|
|
port = ""
|
|
if self.scheme == "http" and self.PORT != 80:
|
|
port = ":%s" % self.PORT
|
|
elif self.scheme == "https" and self.PORT != 443:
|
|
port = ":%s" % self.PORT
|
|
host = self.HOST
|
|
if host in ('0.0.0.0', '::'):
|
|
import socket
|
|
host = socket.gethostname()
|
|
expected = ("%s://%s%s%s/this/new/page"
|
|
% (self.scheme, host, port, sn))
|
|
self.getPage(sn + "/pageurl")
|
|
self.assertBody(expected)
|
|
|
|
# Test trailing slash (see
|
|
# https://bitbucket.org/cherrypy/cherrypy/issue/562).
|
|
self.getPage("/xhost/", headers=[('X-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/xhost"
|
|
% self.scheme)
|