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

root/tags/cherrypy-3.0.0/cherrypy/test/test_etags.py

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

Solution for #602 (ETag autotags are incorrect on 304):

  1. Added WARNING to docstring.
  2. Only generate ETag if status == 200.
  3. Now performs If-Match, If-None-Match tests even if no ETag provided.
  4. Corrected "< 299" to "<= 299".
  • 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     conf = {'/': {'tools.etags.on': True,
22                   'tools.etags.autotags': True}}
23     cherrypy.tree.mount(Root(), config=conf)
24     cherrypy.config.update({'environment': 'test_suite'})
25
26 from cherrypy.test import helper
27
28 class ETagTest(helper.CPWebCase):
29    
30     def testETags(self):
31         self.getPage("/resource")
32         self.assertStatus('200 OK')
33         self.assertHeader('Content-Type', 'text/html')
34         self.assertBody('Oh wah ta goo Siam.')
35         etag = self.assertHeader('ETag')
36        
37         # Test If-Match (both valid and invalid)
38         self.getPage("/resource", headers=[('If-Match', etag)])
39         self.assertStatus("200 OK")
40         self.getPage("/resource", headers=[('If-Match', "*")])
41         self.assertStatus("200 OK")
42         self.getPage("/resource", headers=[('If-Match', "*")], method="POST")
43         self.assertStatus("200 OK")
44         self.getPage("/resource", headers=[('If-Match', "a bogus tag")])
45         self.assertStatus("412 Precondition Failed")
46        
47         # Test If-None-Match (both valid and invalid)
48         self.getPage("/resource", headers=[('If-None-Match', etag)])
49         self.assertStatus(304)
50         self.getPage("/resource", method='POST', headers=[('If-None-Match', etag)])
51         self.assertStatus("412 Precondition Failed")
52         self.getPage("/resource", headers=[('If-None-Match', "*")])
53         self.assertStatus(304)
54         self.getPage("/resource", headers=[('If-None-Match', "a bogus tag")])
55         self.assertStatus("200 OK")
56        
57         # Test raising errors in page handler
58         self.getPage("/fail/412", headers=[('If-Match', etag)])
59         self.assertStatus(412)
60         self.getPage("/fail/304", headers=[('If-Match', etag)])
61         self.assertStatus(304)
62         self.getPage("/fail/412", headers=[('If-None-Match', "*")])
63         self.assertStatus(412)
64         self.getPage("/fail/304", headers=[('If-None-Match', "*")])
65         self.assertStatus(304)
66
67
68 if __name__ == "__main__":
69     setup_server()
70     helper.testmain()
Note: See TracBrowser for help on using the browser.

Hosted by WebFaction

Log in as guest/cpguest to create tickets