Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/cherrypy/test/test_virtualhost.py
diff options
context:
space:
mode:
Diffstat (limited to 'cherrypy/test/test_virtualhost.py')
-rwxr-xr-xcherrypy/test/test_virtualhost.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/cherrypy/test/test_virtualhost.py b/cherrypy/test/test_virtualhost.py
new file mode 100755
index 0000000..d6eed0e
--- /dev/null
+++ b/cherrypy/test/test_virtualhost.py
@@ -0,0 +1,107 @@
+import os
+curdir = os.path.join(os.getcwd(), os.path.dirname(__file__))
+
+import cherrypy
+from cherrypy.test import helper
+
+
+class VirtualHostTest(helper.CPWebCase):
+
+ def setup_server():
+ class Root:
+ def index(self):
+ return "Hello, world"
+ index.exposed = True
+
+ def dom4(self):
+ return "Under construction"
+ dom4.exposed = True
+
+ def method(self, value):
+ return "You sent %s" % repr(value)
+ method.exposed = True
+
+ class VHost:
+ def __init__(self, sitename):
+ self.sitename = sitename
+
+ def index(self):
+ return "Welcome to %s" % self.sitename
+ index.exposed = True
+
+ def vmethod(self, value):
+ return "You sent %s" % repr(value)
+ vmethod.exposed = True
+
+ def url(self):
+ return cherrypy.url("nextpage")
+ url.exposed = True
+
+ # Test static as a handler (section must NOT include vhost prefix)
+ static = cherrypy.tools.staticdir.handler(section='/static', dir=curdir)
+
+ root = Root()
+ root.mydom2 = VHost("Domain 2")
+ root.mydom3 = VHost("Domain 3")
+ hostmap = {'www.mydom2.com': '/mydom2',
+ 'www.mydom3.com': '/mydom3',
+ 'www.mydom4.com': '/dom4',
+ }
+ cherrypy.tree.mount(root, config={
+ '/': {'request.dispatch': cherrypy.dispatch.VirtualHost(**hostmap)},
+ # Test static in config (section must include vhost prefix)
+ '/mydom2/static2': {'tools.staticdir.on': True,
+ 'tools.staticdir.root': curdir,
+ 'tools.staticdir.dir': 'static',
+ 'tools.staticdir.index': 'index.html',
+ },
+ })
+ setup_server = staticmethod(setup_server)
+
+ def testVirtualHost(self):
+ self.getPage("/", [('Host', 'www.mydom1.com')])
+ self.assertBody('Hello, world')
+ self.getPage("/mydom2/", [('Host', 'www.mydom1.com')])
+ self.assertBody('Welcome to Domain 2')
+
+ self.getPage("/", [('Host', 'www.mydom2.com')])
+ self.assertBody('Welcome to Domain 2')
+ self.getPage("/", [('Host', 'www.mydom3.com')])
+ self.assertBody('Welcome to Domain 3')
+ self.getPage("/", [('Host', 'www.mydom4.com')])
+ self.assertBody('Under construction')
+
+ # Test GET, POST, and positional params
+ self.getPage("/method?value=root")
+ self.assertBody("You sent u'root'")
+ self.getPage("/vmethod?value=dom2+GET", [('Host', 'www.mydom2.com')])
+ self.assertBody("You sent u'dom2 GET'")
+ self.getPage("/vmethod", [('Host', 'www.mydom3.com')], method="POST",
+ body="value=dom3+POST")
+ self.assertBody("You sent u'dom3 POST'")
+ self.getPage("/vmethod/pos", [('Host', 'www.mydom3.com')])
+ self.assertBody("You sent 'pos'")
+
+ # Test that cherrypy.url uses the browser url, not the virtual url
+ self.getPage("/url", [('Host', 'www.mydom2.com')])
+ self.assertBody("%s://www.mydom2.com/nextpage" % self.scheme)
+
+ def test_VHost_plus_Static(self):
+ # Test static as a handler
+ self.getPage("/static/style.css", [('Host', 'www.mydom2.com')])
+ self.assertStatus('200 OK')
+ self.assertHeader('Content-Type', 'text/css;charset=utf-8')
+
+ # Test static in config
+ self.getPage("/static2/dirback.jpg", [('Host', 'www.mydom2.com')])
+ self.assertStatus('200 OK')
+ self.assertHeader('Content-Type', 'image/jpeg')
+
+ # Test static config with "index" arg
+ self.getPage("/static2/", [('Host', 'www.mydom2.com')])
+ self.assertStatus('200 OK')
+ self.assertBody('Hello, world\r\n')
+ # Since tools.trailing_slash is on by default, this should redirect
+ self.getPage("/static2", [('Host', 'www.mydom2.com')])
+ self.assertStatus(301)
+