| 21 | | |
|---|
| | 25 | |
|---|
| | 26 | class UnCached(object): |
|---|
| | 27 | _cp_config = {'tools.expires.on': True, |
|---|
| | 28 | 'tools.staticdir.on': True, |
|---|
| | 29 | 'tools.staticdir.dir': 'static', |
|---|
| | 30 | 'tools.staticdir.root': curdir, |
|---|
| | 31 | } |
|---|
| | 32 | |
|---|
| | 33 | def gentle(self): |
|---|
| | 34 | self._cp_config['tools.expires.force'] = False |
|---|
| | 35 | return "being forceful" |
|---|
| | 36 | gentle.exposed = True |
|---|
| | 37 | |
|---|
| | 38 | def ignorant(self): |
|---|
| | 39 | self._cp_config['tools.expires.ignore_indicators'] = True |
|---|
| | 40 | return "being ignorant" |
|---|
| | 41 | ignorant.exposed = True |
|---|
| | 42 | |
|---|
| | 43 | def dynamic(self): |
|---|
| | 44 | cherrypy.response.headers['Cache-Control'] = 'private' |
|---|
| | 45 | return "D-d-d-dynamic!" |
|---|
| | 46 | dynamic.exposed = True |
|---|
| | 47 | |
|---|
| | 48 | def cacheable(self): |
|---|
| | 49 | cherrypy.response.headers['Etag'] = 'bibbitybobbityboo' |
|---|
| | 50 | return "Hi, I'm cacheable." |
|---|
| | 51 | cacheable.exposed = True |
|---|
| | 52 | |
|---|
| | 53 | expire_on = datetime.datetime(2006, 7, 17, 8, 55, 59, 171000) |
|---|
| | 54 | |
|---|
| | 55 | def specific(self): |
|---|
| | 56 | return "I am being specific" |
|---|
| | 57 | specific.exposed = True |
|---|
| | 58 | specific._cp_config = {'tools.expires.e_time': expire_on} |
|---|
| | 59 | |
|---|
| | 60 | class Foo(object):pass |
|---|
| | 61 | |
|---|
| | 62 | def wrongtype(self): |
|---|
| | 63 | return "Woops" |
|---|
| | 64 | wrongtype.exposed = True |
|---|
| | 65 | wrongtype._cp_config = {'tools.expires.e_time': Foo()} |
|---|
| | 66 | |
|---|
| | 67 | def wrongvalue(self): |
|---|
| | 68 | return "Uh oh" |
|---|
| | 69 | wrongvalue.exposed = True |
|---|
| | 70 | wrongvalue._cp_config = {'tools.expires.e_time': 42} |
|---|
| | 71 | |
|---|
| | 72 | |
|---|
| | 106 | def testExpiresTool(self): |
|---|
| | 107 | |
|---|
| | 108 | # test setting a specific expires header |
|---|
| | 109 | self.getPage("/expires/specific") |
|---|
| | 110 | self.assertStatus("200 OK") |
|---|
| | 111 | self.assertHeader("Expires", "Mon, 17 Jul 2006 12:55:59 GMT") |
|---|
| | 112 | |
|---|
| | 113 | # test exceptions for bad e_time values |
|---|
| | 114 | self.getPage("/expires/wrongtype") |
|---|
| | 115 | self.assertStatus("500 Internal error") |
|---|
| | 116 | self.assertInBody("TypeError") |
|---|
| | 117 | |
|---|
| | 118 | self.getPage("/expires/wrongvalue") |
|---|
| | 119 | self.assertStatus("500 Internal error") |
|---|
| | 120 | self.assertInBody("ValueError") |
|---|
| | 121 | |
|---|
| | 122 | self.getPage('/expires/dynamic') |
|---|
| | 123 | self.assertBody("D-d-d-dynamic!") |
|---|
| | 124 | # dynamic sets Cache-Control to private but it should be |
|---|
| | 125 | # overwritten here ... |
|---|
| | 126 | self.assertHeader("Cache-Control", "no-cache") |
|---|
| | 127 | self.assertHeader("Expires", "0") |
|---|
| | 128 | self.assertHeader("Pragma", "no-cache") |
|---|
| | 129 | |
|---|
| | 130 | # configure the tool to keep existing headers |
|---|
| | 131 | self.getPage("/expires/gentle") |
|---|
| | 132 | self.assertStatus("200 OK") |
|---|
| | 133 | |
|---|
| | 134 | self.getPage('/expires/dynamic') |
|---|
| | 135 | self.assertBody("D-d-d-dynamic!") |
|---|
| | 136 | # the Cache-Control header should now be untouched |
|---|
| | 137 | self.assertHeader("Cache-Control", "private") |
|---|
| | 138 | |
|---|
| | 139 | # static content should not have "cache prevention" headers |
|---|
| | 140 | self.getPage("/expires/index.html") |
|---|
| | 141 | self.assertStatus("200 OK") |
|---|
| | 142 | self.assertNoHeader("Pragma") |
|---|
| | 143 | self.assertNoHeader("Cache-Control") |
|---|
| | 144 | self.assertNoHeader("Expires") |
|---|
| | 145 | |
|---|
| | 146 | # dynamic content that sets indicators should not have |
|---|
| | 147 | # "cache prevention" headers |
|---|
| | 148 | self.getPage("/expires/cacheable") |
|---|
| | 149 | self.assertStatus("200 OK") |
|---|
| | 150 | self.assertNoHeader("Pragma") |
|---|
| | 151 | self.assertNoHeader("Cache-Control") |
|---|
| | 152 | self.assertNoHeader("Expires") |
|---|
| | 153 | |
|---|
| | 154 | # configure the tool to ignore indicators |
|---|
| | 155 | self.getPage("/expires/ignorant") |
|---|
| | 156 | self.assertStatus("200 OK") |
|---|
| | 157 | |
|---|
| | 158 | # static content should now have "cache prevention" headers |
|---|
| | 159 | self.getPage("/expires/index.html") |
|---|
| | 160 | self.assertStatus("200 OK") |
|---|
| | 161 | self.assertHeader("Pragma", "no-cache") |
|---|
| | 162 | self.assertHeader("Cache-Control", "no-cache") |
|---|
| | 163 | self.assertHeader("Expires", "0") |
|---|
| | 164 | |
|---|
| | 165 | # the cacheable handler should now have "cache prevention" headers |
|---|
| | 166 | self.getPage("/expires/cacheable") |
|---|
| | 167 | self.assertStatus("200 OK") |
|---|
| | 168 | self.assertHeader("Pragma", "no-cache") |
|---|
| | 169 | self.assertHeader("Cache-Control", "no-cache") |
|---|
| | 170 | self.assertHeader("Expires", "0") |
|---|