Home | Trees | Indices | Help |
|
---|
|
1 from cherrypy.test import test 2 test.prefer_parent_path() 3 4 import os 5 curdir = os.path.join(os.getcwd(), os.path.dirname(__file__)) 6 7 import cherrypy 8 911 12 class Root: 13 14 _cp_config = {'tools.caching.on': True} 15 16 def __init__(self): 17 cherrypy.counter = 018 19 def index(self): 20 cherrypy.counter += 1 21 msg = "visit #%s" % cherrypy.counter 22 return msg 23 index.exposed = True 24 25 class UnCached(object): 26 _cp_config = {'tools.expires.on': True, 27 'tools.staticdir.on': True, 28 'tools.staticdir.dir': 'static', 29 'tools.staticdir.root': curdir, 30 } 31 32 def force(self): 33 self._cp_config['tools.expires.force'] = True 34 return "being forceful" 35 force.exposed = True 36 37 def dynamic(self): 38 cherrypy.response.headers['Cache-Control'] = 'private' 39 return "D-d-d-dynamic!" 40 dynamic.exposed = True 41 42 def cacheable(self): 43 cherrypy.response.headers['Etag'] = 'bibbitybobbityboo' 44 return "Hi, I'm cacheable." 45 cacheable.exposed = True 46 47 def specific(self): 48 return "I am being specific" 49 specific.exposed = True 50 specific._cp_config = {'tools.expires.secs': 86400} 51 52 class Foo(object):pass 53 54 def wrongtype(self): 55 return "Woops" 56 wrongtype.exposed = True 57 wrongtype._cp_config = {'tools.expires.secs': Foo()} 58 59 cherrypy.tree.mount(Root()) 60 cherrypy.tree.mount(UnCached(), "/expires") 61 cherrypy.config.update({'environment': 'test_suite'}) 62 63 64 from cherrypy.test import helper 6567164 165 if __name__ == '__main__': 166 setup_server() 167 helper.testmain() 16869 elapsed = 0.0 70 for trial in xrange(10): 71 self.getPage("/") 72 # The response should be the same every time, 73 # except for the Age response header. 74 self.assertBody('visit #1') 75 if trial != 0: 76 age = int(self.assertHeader("Age")) 77 self.assert_(age >= elapsed) 78 elapsed = age 79 80 # POST, PUT, DELETE should not be cached. 81 self.getPage("/", method="POST") 82 self.assertBody('visit #2') 83 # The previous request should have invalidated the cache, 84 # so this request will recalc the response. 85 self.getPage("/", method="GET") 86 self.assertBody('visit #3') 87 # ...but this request should get the cached copy. 88 self.getPage("/", method="GET") 89 self.assertBody('visit #3') 90 self.getPage("/", method="DELETE") 91 self.assertBody('visit #4') 92 # The previous request should have invalidated the cache, 93 # so this request will recalc the response. 94 self.getPage("/", method="GET") 95 self.assertBody('visit #5')9698 99 # test setting an expires header 100 self.getPage("/expires/specific") 101 self.assertStatus("200 OK") 102 self.assertHeader("Expires") 103 104 # test exceptions for bad time values 105 self.getPage("/expires/wrongtype") 106 self.assertStatus(500) 107 self.assertInBody("TypeError") 108 109 # static content should not have "cache prevention" headers 110 self.getPage("/expires/index.html") 111 self.assertStatus("200 OK") 112 self.assertNoHeader("Pragma") 113 self.assertNoHeader("Cache-Control") 114 115 # dynamic content that sets indicators should not have 116 # "cache prevention" headers 117 self.getPage("/expires/cacheable") 118 self.assertStatus("200 OK") 119 self.assertNoHeader("Pragma") 120 self.assertNoHeader("Cache-Control") 121 122 self.getPage('/expires/dynamic') 123 self.assertBody("D-d-d-dynamic!") 124 # the Cache-Control header should be untouched 125 self.assertHeader("Cache-Control", "private") 126 127 # configure the tool to ignore indicators and replace existing headers 128 self.getPage("/expires/force") 129 self.assertStatus("200 OK") 130 # This also gives us a chance to test 0 expiry with no other headers 131 self.assertHeader("Pragma", "no-cache") 132 if cherrypy.server.protocol_version == "HTTP/1.1": 133 self.assertHeader("Cache-Control", "no-cache, must-revalidate") 134 d = self.assertHeader("Date") 135 self.assertHeader("Expires", d) 136 137 # static content should now have "cache prevention" headers 138 self.getPage("/expires/index.html") 139 self.assertStatus("200 OK") 140 self.assertHeader("Pragma", "no-cache") 141 if cherrypy.server.protocol_version == "HTTP/1.1": 142 self.assertHeader("Cache-Control", "no-cache, must-revalidate") 143 d = self.assertHeader("Date") 144 self.assertHeader("Expires", d) 145 146 # the cacheable handler should now have "cache prevention" headers 147 self.getPage("/expires/cacheable") 148 self.assertStatus("200 OK") 149 self.assertHeader("Pragma", "no-cache") 150 if cherrypy.server.protocol_version == "HTTP/1.1": 151 self.assertHeader("Cache-Control", "no-cache, must-revalidate") 152 d = self.assertHeader("Date") 153 self.assertHeader("Expires", d) 154 155 self.getPage('/expires/dynamic') 156 self.assertBody("D-d-d-dynamic!") 157 # dynamic sets Cache-Control to private but it should be 158 # overwritten here ... 159 self.assertHeader("Pragma", "no-cache") 160 if cherrypy.server.protocol_version == "HTTP/1.1": 161 self.assertHeader("Cache-Control", "no-cache, must-revalidate") 162 d = self.assertHeader("Date") 163 self.assertHeader("Expires", d)
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Tue Jun 29 13:10:35 2010 | http://epydoc.sourceforge.net |