Home | Trees | Indices | Help |
|
---|
|
1 from cherrypy.test import test 2 test.prefer_parent_path() 3 4 import os 5 curdir = os.path.join(os.getcwd(), os.path.dirname(__file__)) 6 has_space_filepath = os.path.join(curdir, 'static', 'has space.html') 7 import threading 8 9 import cherrypy 1012 if not os.path.exists(has_space_filepath): 13 file(has_space_filepath, 'wb').write('Hello, world\r\n') 14 15 class Root: 16 pass17 18 class Static: 19 20 def index(self): 21 return 'You want the Baron? You can have the Baron!' 22 index.exposed = True 23 24 def dynamic(self): 25 return "This is a DYNAMIC page" 26 dynamic.exposed = True 27 28 29 cherrypy.config.update({'environment': 'test_suite'}) 30 31 root = Root() 32 root.static = Static() 33 34 rootconf = { 35 '/static': { 36 'tools.staticdir.on': True, 37 'tools.staticdir.dir': 'static', 38 'tools.staticdir.root': curdir, 39 }, 40 '/style.css': { 41 'tools.staticfile.on': True, 42 'tools.staticfile.filename': os.path.join(curdir, 'style.css'), 43 }, 44 '/docroot': { 45 'tools.staticdir.on': True, 46 'tools.staticdir.root': curdir, 47 'tools.staticdir.dir': 'static', 48 'tools.staticdir.index': 'index.html', 49 }, 50 '/error': { 51 'tools.staticdir.on': True, 52 'request.show_tracebacks': True, 53 }, 54 } 55 rootApp = cherrypy.Application(root) 56 rootApp.merge(rootconf) 57 58 test_app_conf = { 59 '/test': { 60 'tools.staticdir.index': 'index.html', 61 'tools.staticdir.on': True, 62 'tools.staticdir.root': curdir, 63 'tools.staticdir.dir': 'static', 64 }, 65 } 66 testApp = cherrypy.Application(Static()) 67 testApp.merge(test_app_conf) 68 69 vhost = cherrypy._cpwsgi.VirtualHost(rootApp, {'virt.net': testApp}) 70 cherrypy.tree.graft(vhost) 71 7274 if os.path.exists(has_space_filepath): 75 try: 76 os.unlink(has_space_filepath) 77 except: 78 pass79 80 from cherrypy.test import helper 8183169 170 171 if __name__ == "__main__": 172 setup_server() 173 helper.testmain() 17485 self.getPage("/static/index.html") 86 self.assertStatus('200 OK') 87 self.assertHeader('Content-Type', 'text/html') 88 self.assertBody('Hello, world\r\n') 89 90 # Using a staticdir.root value in a subdir... 91 self.getPage("/docroot/index.html") 92 self.assertStatus('200 OK') 93 self.assertHeader('Content-Type', 'text/html') 94 self.assertBody('Hello, world\r\n') 95 96 # Check a filename with spaces in it 97 self.getPage("/static/has%20space.html") 98 self.assertStatus('200 OK') 99 self.assertHeader('Content-Type', 'text/html') 100 self.assertBody('Hello, world\r\n') 101 102 self.getPage("/style.css") 103 self.assertStatus('200 OK') 104 self.assertHeader('Content-Type', 'text/css') 105 # Note: The body should be exactly 'Dummy stylesheet\n', but 106 # unfortunately some tools such as WinZip sometimes turn \n 107 # into \r\n on Windows when extracting the CherryPy tarball so 108 # we just check the content 109 self.assertMatchesBody('^Dummy stylesheet')110112 # Test that NotFound will then try dynamic handlers (see [878]). 113 self.getPage("/static/dynamic") 114 self.assertBody("This is a DYNAMIC page") 115 116 # Check a directory via fall-through to dynamic handler. 117 self.getPage("/static/") 118 self.assertStatus('200 OK') 119 self.assertHeader('Content-Type', 'text/html') 120 self.assertBody('You want the Baron? You can have the Baron!')121123 # Check a directory via "staticdir.index". 124 self.getPage("/docroot/") 125 self.assertStatus('200 OK') 126 self.assertHeader('Content-Type', 'text/html') 127 self.assertBody('Hello, world\r\n') 128 # The same page should be returned even if redirected. 129 self.getPage("/docroot") 130 self.assertStatus((302, 303)) 131 self.assertHeader('Location', '%s/docroot/' % self.base()) 132 self.assertMatchesBody("This resource .* at <a href='%s/docroot/'>" 133 "%s/docroot/</a>." % (self.base(), self.base()))134136 # Check that we get an error if no .file or .dir 137 self.getPage("/error/thing.html") 138 self.assertErrorPage(500) 139 self.assertInBody("TypeError: staticdir() takes at least 2 " 140 "arguments (0 given)")141143 # Test up-level security 144 self.getPage("/static/../../test/style.css") 145 self.assertStatus((400, 403))146148 # Test modified-since on a reasonably-large file 149 self.getPage("/static/dirback.jpg") 150 self.assertStatus("200 OK") 151 lastmod = "" 152 for k, v in self.headers: 153 if k == 'Last-Modified': 154 lastmod = v 155 ims = ("If-Modified-Since", lastmod) 156 self.getPage("/static/dirback.jpg", headers=[ims]) 157 self.assertStatus(304) 158 self.assertNoHeader("Content-Type") 159 self.assertNoHeader("Content-Length") 160 self.assertNoHeader("Content-Disposition") 161 self.assertBody("")162164 self.getPage("/test/", [('Host', 'virt.net')]) 165 self.assertStatus(200) 166 self.getPage("/test", [('Host', 'virt.net')]) 167 self.assertStatus((302, 303)) 168 self.assertHeader('Location', self.scheme + '://virt.net/test/')
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Mon Aug 24 13:21:38 2009 | http://epydoc.sourceforge.net |