Package cherrypy :: Package test :: Module test_etags
[hide private]
[frames] | no frames]

Source Code for Module cherrypy.test.test_etags

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