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 11 def resource(self): 12 return "Oh wah ta goo Siam."
13 resource.exposed = True 14 15 def fail(self, code): 16 code = int(code) 17 if 300 <= code <= 399: 18 raise cherrypy.HTTPRedirect([], code) 19 else: 20 raise cherrypy.HTTPError(code)
21 fail.exposed = True 22 23 def unicoded(self): 24 return ntou('I am a \u1ee4nicode string.', 'escape') 25 unicoded.exposed = True 26 # In Python 3, tools.encode is on by default 27 unicoded._cp_config = {'tools.encode.on': True} 28 29 conf = {'/': {'tools.etags.on': True, 30 'tools.etags.autotags': True, 31 }} 32 cherrypy.tree.mount(Root(), config=conf) 33 setup_server = staticmethod(setup_server) 34
35 - def test_etags(self):
36 self.getPage("/resource") 37 self.assertStatus('200 OK') 38 self.assertHeader('Content-Type', 'text/html;charset=utf-8') 39 self.assertBody('Oh wah ta goo Siam.') 40 etag = self.assertHeader('ETag') 41 42 # Test If-Match (both valid and invalid) 43 self.getPage("/resource", headers=[('If-Match', etag)]) 44 self.assertStatus("200 OK") 45 self.getPage("/resource", headers=[('If-Match', "*")]) 46 self.assertStatus("200 OK") 47 self.getPage("/resource", headers=[('If-Match', "*")], method="POST") 48 self.assertStatus("200 OK") 49 self.getPage("/resource", headers=[('If-Match', "a bogus tag")]) 50 self.assertStatus("412 Precondition Failed") 51 52 # Test If-None-Match (both valid and invalid) 53 self.getPage("/resource", headers=[('If-None-Match', etag)]) 54 self.assertStatus(304) 55 self.getPage("/resource", method='POST', 56 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