Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

root/branches/cp3-wsgi-remix/test/test_tutorials.py

Revision 1209 (checked in by fumanchu, 2 years ago)

Fixes for #544 and #545 (serveFile issues) in CP 3. Fixes in CP 2 branch coming in a separate changeset.

  • Property svn:eol-style set to native
Line 
1 import test
2 test.prefer_parent_path()
3
4 import sys
5
6 import cherrypy
7 import helper
8
9
10 def setup_server():
11    
12     conf = cherrypy.config.globalconf.copy()
13    
14     def load_tut_module(name):
15         """Import or reload tutorial module as needed."""
16         cherrypy.config.reset()
17         cherrypy.config.update(conf)
18        
19         target = "cherrypy.tutorial." + name
20         if target in sys.modules:
21             module = reload(sys.modules[target])
22         else:
23             module = __import__(target, globals(), locals(), [''])
24         # The above import will probably mount a new app at "".
25         app = cherrypy.tree.apps[""]
26        
27         app.root.load_tut_module = load_tut_module
28         app.root.sessions = sessions
29         app.root.traceback_setting = traceback_setting
30     load_tut_module.exposed = True
31    
32     def sessions():
33         cherrypy.config.update({"tools.sessions.on": True})
34     sessions.exposed = True
35    
36     def traceback_setting():
37         return repr(cherrypy.config.get('show_tracebacks'))
38     traceback_setting.exposed = True
39    
40     class Dummy:
41         pass
42     root = Dummy()
43     root.load_tut_module = load_tut_module
44     cherrypy.tree.mount(root)
45
46
47 class TutorialTest(helper.CPWebCase):
48    
49     def test01HelloWorld(self):
50         self.getPage("/load_tut_module/tut01_helloworld")
51         self.getPage("/")
52         self.assertBody('Hello world!')
53    
54     def test02ExposeMethods(self):
55         self.getPage("/load_tut_module/tut02_expose_methods")
56         self.getPage("/showMessage")
57         self.assertBody('Hello world!')
58    
59     def test03GetAndPost(self):
60         self.getPage("/load_tut_module/tut03_get_and_post")
61        
62         # Try different GET queries
63         self.getPage("/greetUser?name=Bob")
64         self.assertBody("Hey Bob, what's up?")
65        
66         self.getPage("/greetUser")
67         self.assertBody('Please enter your name <a href="./">here</a>.')
68        
69         self.getPage("/greetUser?name=")
70         self.assertBody('No, really, enter your name <a href="./">here</a>.')
71        
72         # Try the same with POST
73         self.getPage("/greetUser", method="POST", body="name=Bob")
74         self.assertBody("Hey Bob, what's up?")
75        
76         self.getPage("/greetUser", method="POST", body="name=")
77         self.assertBody('No, really, enter your name <a href="./">here</a>.')
78    
79     def test04ComplexSite(self):
80         self.getPage("/load_tut_module/tut04_complex_site")
81         msg = '''
82             <p>Here are some extra useful links:</p>
83             
84             <ul>
85                 <li><a href="del.icio.ushttp://del.icio.us">del.icio.us</a></li>
86                 <li><a href="Hendrik's">http://www.mornography.de">Hendrik's weblog</a></li>
87             </ul>
88             
89             <p>[<a href="../">Return to links page</a>]</p>'''
90         self.getPage("/links/extra/")
91         self.assertBody(msg)
92    
93     def test05DerivedObjects(self):
94         self.getPage("/load_tut_module/tut05_derived_objects")
95         msg = '''
96             <html>
97             <head>
98                 <title>Another Page</title>
99             <head>
100             <body>
101             <h2>Another Page</h2>
102         
103             <p>
104             And this is the amazing second page!
105             </p>
106         
107             </body>
108             </html>
109         '''
110         self.getPage("/another/")
111         self.assertBody(msg)
112    
113     def test06DefaultMethod(self):
114         self.getPage("/load_tut_module/tut06_default_method")
115         self.getPage('/hendrik')
116         self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German '
117                         '(<a href="./">back</a>)')
118     def test07Sessions(self):
119         self.getPage("/load_tut_module/tut07_sessions")
120         self.getPage("/sessions")
121        
122         self.getPage('/')
123         self.assertBody("\n            During your current session, you've viewed this"
124                          "\n            page 1 times! Your life is a patio of fun!"
125                          "\n        ")
126        
127         self.getPage('/', self.cookies)
128         self.assertBody("\n            During your current session, you've viewed this"
129                          "\n            page 2 times! Your life is a patio of fun!"
130                          "\n        ")
131    
132     def test08GeneratorsAndYield(self):
133         self.getPage("/load_tut_module/tut08_generators_and_yield")
134         self.getPage('/')
135         self.assertBody('<html><body><h2>Generators rule!</h2>'
136                          '<h3>List of users:</h3>'
137                          'Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/>'
138                          '</body></html>')
139    
140     def test09Files(self):
141         self.getPage("/load_tut_module/tut09_files")
142        
143         # Test upload
144         h = [("Content-type", "multipart/form-data; boundary=x"),
145              ("Content-Length", "110")]
146         b = """--x
147 Content-Disposition: form-data; name="myFile"; filename="hello.txt"
148 Content-Type: text/plain
149
150 hello
151 --x--
152 """
153         self.getPage('/upload', h, "POST", b)
154         self.assertBody('''<html>
155         <body>
156             myFile length: 5<br />
157             myFile filename: hello.txt<br />
158             myFile mime-type: text/plain
159         </body>
160         </html>''')
161    
162         # Test download
163         self.getPage('/download')
164         self.assertStatus("200 OK")
165         self.assertHeader("Content-Type", "application/x-download")
166         self.assertHeader("Content-Disposition",
167                           # Make sure the filename is quoted.
168                           'attachment; filename="pdf_file.pdf"')
169         self.assertEqual(len(self.body), 85698)
170    
171     def test10HTTPErrors(self):
172         self.getPage("/load_tut_module/tut10_http_errors")
173        
174         self.getPage("/")
175         self.assertInBody("""<a href="toggleTracebacks">""")
176         self.assertInBody("""<a href="/doesNotExist">""")
177         self.assertInBody("""<a href="/error?code=403">""")
178         self.assertInBody("""<a href="/error?code=500">""")
179         self.assertInBody("""<a href="/messageArg">""")
180        
181         self.getPage("/traceback_setting")
182         setting = self.body
183         self.getPage("/toggleTracebacks")
184         self.assertStatus((302, 303))
185         self.getPage("/traceback_setting")
186         self.assertBody(str(not eval(setting)))
187        
188         self.getPage("/error?code=500")
189         self.assertStatus(500)
190         self.assertInBody("The server encountered an unexpected condition "
191                           "which prevented it from fulfilling the request.")
192        
193         self.getPage("/error?code=403")
194         self.assertStatus(403)
195         self.assertInBody("<h2>You can't do that!</h2>")
196        
197         self.getPage("/messageArg")
198         self.assertStatus(500)
199         self.assertInBody("If you construct an HTTPError with a 'message'")
200
201
202 if __name__ == "__main__":
203     conf = {'server.socket_host': '127.0.0.1',
204             'server.socket_port': 8080,
205             'server.thread_pool': 10,
206             'log_to_screen': False,
207             'environment': "production",
208             'show_tracebacks': True,
209             }
210     cherrypy.config.update(conf)
211     setup_server()
212     helper.testmain()
Note: See TracBrowser for help on using the browser.

Hosted by WebFaction

Log in as guest/cpguest to create tickets