2 from cherrypy
.test
import helper
5 class ETagTest(helper
.CPWebCase
):
10 return "Oh wah ta goo Siam."
11 resource
.exposed
= True
15 if 300 <= code
<= 399:
16 raise cherrypy
.HTTPRedirect([], code
)
18 raise cherrypy
.HTTPError(code
)
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
)
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
)