NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)