Fixed python_path problem.
[smonitor.git] / lib / cherrypy / test / test_etags.py
blob026f9d659a652c9528b81ba428f1eab2fbafc659
1 import cherrypy
2 from cherrypy.test import helper
5 class ETagTest(helper.CPWebCase):
7 def setup_server():
8 class Root:
9 def resource(self):
10 return "Oh wah ta goo Siam."
11 resource.exposed = True
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
21 def unicoded(self):
22 return u'I am a \u1ee4nicode string.'
23 unicoded.exposed = True
24 unicoded._cp_config = {'tools.encode.on': True}
26 conf = {'/': {'tools.etags.on': True,
27 'tools.etags.autotags': True,
29 cherrypy.tree.mount(Root(), config=conf)
30 setup_server = staticmethod(setup_server)
32 def test_etags(self):
33 self.getPage("/resource")
34 self.assertStatus('200 OK')
35 self.assertHeader('Content-Type', 'text/html;charset=utf-8')
36 self.assertBody('Oh wah ta goo Siam.')
37 etag = self.assertHeader('ETag')
39 # Test If-Match (both valid and invalid)
40 self.getPage("/resource", headers=[('If-Match', etag)])
41 self.assertStatus("200 OK")
42 self.getPage("/resource", headers=[('If-Match', "*")])
43 self.assertStatus("200 OK")
44 self.getPage("/resource", headers=[('If-Match', "*")], method="POST")
45 self.assertStatus("200 OK")
46 self.getPage("/resource", headers=[('If-Match', "a bogus tag")])
47 self.assertStatus("412 Precondition Failed")
49 # Test If-None-Match (both valid and invalid)
50 self.getPage("/resource", headers=[('If-None-Match', etag)])
51 self.assertStatus(304)
52 self.getPage("/resource", method='POST', headers=[('If-None-Match', etag)])
53 self.assertStatus("412 Precondition Failed")
54 self.getPage("/resource", headers=[('If-None-Match', "*")])
55 self.assertStatus(304)
56 self.getPage("/resource", headers=[('If-None-Match', "a bogus tag")])
57 self.assertStatus("200 OK")
59 def test_errors(self):
60 self.getPage("/resource")
61 self.assertStatus(200)
62 etag = self.assertHeader('ETag')
64 # Test raising errors in page handler
65 self.getPage("/fail/412", headers=[('If-Match', etag)])
66 self.assertStatus(412)
67 self.getPage("/fail/304", headers=[('If-Match', etag)])
68 self.assertStatus(304)
69 self.getPage("/fail/412", headers=[('If-None-Match', "*")])
70 self.assertStatus(412)
71 self.getPage("/fail/304", headers=[('If-None-Match', "*")])
72 self.assertStatus(304)
74 def test_unicode_body(self):
75 self.getPage("/unicoded")
76 self.assertStatus(200)
77 etag1 = self.assertHeader('ETag')
78 self.getPage("/unicoded", headers=[('If-Match', etag1)])
79 self.assertStatus(200)
80 self.assertHeader('ETag', etag1)