summaryrefslogtreecommitdiff
path: root/cherrypy/test/test_etags.py
blob: da1917195dc8e94835ff4560c50d94bad0ac6387 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from cherrypy.test import test
test.prefer_parent_path()

import cherrypy


def setup_server():
    class Root:
        def resource(self):
            return "Oh wah ta goo Siam."
        resource.exposed = True
        
        def fail(self):
            raise cherrypy.HTTPError(412)
        fail.exposed = True
    
    conf = {'/': {'tools.etags.on': True,
                  'tools.etags.autotags': True}}
    cherrypy.tree.mount(Root(), conf=conf)
    cherrypy.config.update({'environment': 'test_suite'})

from cherrypy.test import helper

class ETagTest(helper.CPWebCase):
    
    def testETags(self):
        self.getPage("/resource")
        self.assertStatus('200 OK')
        self.assertHeader('Content-Type', 'text/html')
        self.assertBody('Oh wah ta goo Siam.')
        self.assertHeader('ETag')
        for k, v in self.headers:
            if k.lower() == 'etag':
                etag = v
                break
        
        # Test If-Match (both valid and invalid)
        self.getPage("/resource", headers=[('If-Match', etag)])
        self.assertStatus("200 OK")
        self.getPage("/resource", headers=[('If-Match', "*")])
        self.assertStatus("200 OK")
        self.getPage("/resource", headers=[('If-Match', "a bogus tag")])
        self.assertStatus("412 Precondition Failed")
        
        # Test If-None-Match (both valid and invalid)
        self.getPage("/resource", headers=[('If-None-Match', etag)])
        self.assertStatus(304)
        self.getPage("/resource", method='POST', headers=[('If-None-Match', etag)])
        self.assertStatus("412 Precondition Failed")
        self.getPage("/resource", headers=[('If-None-Match', "*")])
        self.assertStatus(304)
        self.getPage("/resource", headers=[('If-None-Match', "a bogus tag")])
        self.assertStatus("200 OK")
        
        # Test raising 412 in page handler
        self.getPage("/fail", headers=[('If-Match', etag)])
        self.assertStatus(412)


if __name__ == "__main__":
    setup_server()
    helper.testmain()