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

Source Code for Module cherrypy.test.test_etags

 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() 90