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

root/trunk/cherrypy/test/test_etags.py

Revision 2013 (checked in by fumanchu, 5 months ago)

Test and fix for #835 (autotags fail on unicode characters). Bumped up the priority of tools.etags to run after tools.encoding (but before tools.gzip, caching).

  • Property svn:eol-style set to native
Line 
1 from cherrypy.test import test
2 test.prefer_parent_path()
3
4 import cherrypy
5
6
7 def setup_server():
8     class Root:
9         def resource(self):
10             return "Oh wah ta goo Siam."
11         resource.exposed = True
12        
13         def fail(self, code):
14             code = int(code)
15             if 300 <= code <= 399:
16                 raise cherrypy.HTTPRedirect([], code)
17             else:
18                 raise cherrypy.HTTPError(code)
19         fail.exposed = True
20        
21         def unicoded(self):
22             return u'I am a \u1ee4nicode string.'
23         unicoded.exposed = True
24         unicoded._cp_config = {'tools.encode.on': True}
25    
26     conf = {'/': {'tools.etags.on': True,
27                   'tools.etags.autotags': True,
28                   }}
29     cherrypy.tree.mount(Root(), config=conf)
30     cherrypy.config.update({'environment': 'test_suite'})
31
32 from cherrypy.test import helper
33
34 class ETagTest(helper.CPWebCase):
35    
36     def test_etags(self):
37         self.getPage("/resource")
38         self.assertStatus('200 OK')
39         self.assertHeader('Content-Type', 'text/html')
40         self.assertBody('Oh wah ta goo Siam.')
41         etag = self.assertHeader('ETag')
42        
43         # Test If-Match (both valid and invalid)
44         self.getPage("/resource", headers=[('If-Match', etag)])
45         self.assertStatus("200 OK")
46         self.getPage("/resource", headers=[('If-Match', "*")])
47         self.assertStatus("200 OK")
48         self.getPage("/resource", headers=[('If-Match', "*")], method="POST")
49         self.assertStatus("200 OK")
50         self.getPage("/resource", headers=[('If-Match', "a bogus tag")])
51         self.assertStatus("412 Precondition Failed")
52        
53         # Test If-None-Match (both valid and invalid)
54         self.getPage("/resource", headers=[('If-None-Match', etag)])
55         self.assertStatus(304)
56         self.getPage("/resource", method='POST', headers=[('If-None-Match', etag)])
57         self.assertStatus("412 Precondition Failed")
58         self.getPage("/resource", headers=[('If-None-Match', "*")])
59         self.assertStatus(304)
60         self.getPage("/resource", headers=[('If-None-Match', "a bogus tag")])
61         self.assertStatus("200 OK")
62    
63     def test_errors(self):
64         self.getPage("/resource")
65         self.assertStatus(200)
66         etag = self.assertHeader('ETag')
67        
68         # Test raising errors in page handler
69         self.getPage("/fail/412", headers=[('If-Match', etag)])
70         self.assertStatus(412)
71         self.getPage("/fail/304", headers=[('If-Match', etag)])
72         self.assertStatus(304)
73         self.getPage("/fail/412", headers=[('If-None-Match', "*")])
74         self.assertStatus(412)
75         self.getPage("/fail/304", headers=[('If-None-Match', "*")])
76         self.assertStatus(304)
77    
78     def test_unicode_body(self):
79         self.getPage("/unicoded")
80         self.assertStatus(200)
81         etag1 = self.assertHeader('ETag')
82         self.getPage("/unicoded", headers=[('If-Match', etag1)])
83         self.assertStatus(200)
84         self.assertHeader('ETag', etag1)
85
86
87 if __name__ == "__main__":
88     setup_server()
89     helper.testmain()
Note: See TracBrowser for help on using the browser.

Hosted by WebFaction

Log in as guest/cpguest to create tickets