diff options
Diffstat (limited to 'cherrypy/test/test_caching.py')
-rw-r--r-- | cherrypy/test/test_caching.py | 176 |
1 files changed, 88 insertions, 88 deletions
diff --git a/cherrypy/test/test_caching.py b/cherrypy/test/test_caching.py index ac559793..caec042f 100644 --- a/cherrypy/test/test_caching.py +++ b/cherrypy/test/test_caching.py @@ -36,13 +36,13 @@ class CacheTest(helper.CPWebCase): @cherrypy.expose def index(self): self.counter += 1 - msg = "visit #%s" % self.counter + msg = 'visit #%s' % self.counter return msg @cherrypy.expose def control(self): self.control_counter += 1 - return "visit #%s" % self.control_counter + return 'visit #%s' % self.control_counter @cherrypy.expose def a_gif(self): @@ -77,7 +77,7 @@ class CacheTest(helper.CPWebCase): @cherrypy.expose def index(self): - return "visit #%s" % next(self.counter) + return 'visit #%s' % next(self.counter) @cherrypy.config(**{ 'tools.expires.on': True, @@ -94,13 +94,13 @@ class CacheTest(helper.CPWebCase): cherrypy.response.headers['Etag'] = 'bibbitybobbityboo' self._cp_config['tools.expires.force'] = True self._cp_config['tools.expires.secs'] = 0 - return "being forceful" + return 'being forceful' @cherrypy.expose def dynamic(self): cherrypy.response.headers['Etag'] = 'bibbitybobbityboo' cherrypy.response.headers['Cache-Control'] = 'private' - return "D-d-d-dynamic!" + return 'D-d-d-dynamic!' @cherrypy.expose def cacheable(self): @@ -112,7 +112,7 @@ class CacheTest(helper.CPWebCase): def specific(self): cherrypy.response.headers[ 'Etag'] = 'need_this_to_make_me_cacheable' - return "I am being specific" + return 'I am being specific' class Foo(object): pass @@ -122,182 +122,182 @@ class CacheTest(helper.CPWebCase): def wrongtype(self): cherrypy.response.headers[ 'Etag'] = 'need_this_to_make_me_cacheable' - return "Woops" + return 'Woops' cherrypy.tree.mount(Root()) - cherrypy.tree.mount(UnCached(), "/expires") - cherrypy.tree.mount(VaryHeaderCachingServer(), "/varying_headers") + cherrypy.tree.mount(UnCached(), '/expires') + cherrypy.tree.mount(VaryHeaderCachingServer(), '/varying_headers') cherrypy.config.update({'tools.gzip.on': True}) def testCaching(self): elapsed = 0.0 for trial in range(10): - self.getPage("/") + self.getPage('/') # The response should be the same every time, # except for the Age response header. self.assertBody('visit #1') if trial != 0: - age = int(self.assertHeader("Age")) + age = int(self.assertHeader('Age')) self.assert_(age >= elapsed) elapsed = age # POST, PUT, DELETE should not be cached. - self.getPage("/", method="POST") + self.getPage('/', method='POST') self.assertBody('visit #2') # Because gzip is turned on, the Vary header should always Vary for # content-encoding self.assertHeader('Vary', 'Accept-Encoding') # The previous request should have invalidated the cache, # so this request will recalc the response. - self.getPage("/", method="GET") + self.getPage('/', method='GET') self.assertBody('visit #3') # ...but this request should get the cached copy. - self.getPage("/", method="GET") + self.getPage('/', method='GET') self.assertBody('visit #3') - self.getPage("/", method="DELETE") + self.getPage('/', method='DELETE') self.assertBody('visit #4') # The previous request should have invalidated the cache, # so this request will recalc the response. - self.getPage("/", method="GET", headers=[('Accept-Encoding', 'gzip')]) + self.getPage('/', method='GET', headers=[('Accept-Encoding', 'gzip')]) self.assertHeader('Content-Encoding', 'gzip') self.assertHeader('Vary') self.assertEqual( - cherrypy.lib.encoding.decompress(self.body), ntob("visit #5")) + cherrypy.lib.encoding.decompress(self.body), ntob('visit #5')) # Now check that a second request gets the gzip header and gzipped body # This also tests a bug in 3.0 to 3.0.2 whereby the cached, gzipped # response body was being gzipped a second time. - self.getPage("/", method="GET", headers=[('Accept-Encoding', 'gzip')]) + self.getPage('/', method='GET', headers=[('Accept-Encoding', 'gzip')]) self.assertHeader('Content-Encoding', 'gzip') self.assertEqual( - cherrypy.lib.encoding.decompress(self.body), ntob("visit #5")) + cherrypy.lib.encoding.decompress(self.body), ntob('visit #5')) # Now check that a third request that doesn't accept gzip # skips the cache (because the 'Vary' header denies it). - self.getPage("/", method="GET") + self.getPage('/', method='GET') self.assertNoHeader('Content-Encoding') self.assertBody('visit #6') def testVaryHeader(self): - self.getPage("/varying_headers/") - self.assertStatus("200 OK") + self.getPage('/varying_headers/') + self.assertStatus('200 OK') self.assertHeaderItemValue('Vary', 'Our-Varying-Header') self.assertBody('visit #1') # Now check that different 'Vary'-fields don't evict each other. # This test creates 2 requests with different 'Our-Varying-Header' # and then tests if the first one still exists. - self.getPage("/varying_headers/", + self.getPage('/varying_headers/', headers=[('Our-Varying-Header', 'request 2')]) - self.assertStatus("200 OK") + self.assertStatus('200 OK') self.assertBody('visit #2') - self.getPage("/varying_headers/", + self.getPage('/varying_headers/', headers=[('Our-Varying-Header', 'request 2')]) - self.assertStatus("200 OK") + self.assertStatus('200 OK') self.assertBody('visit #2') - self.getPage("/varying_headers/") - self.assertStatus("200 OK") + self.getPage('/varying_headers/') + self.assertStatus('200 OK') self.assertBody('visit #1') def testExpiresTool(self): # test setting an expires header - self.getPage("/expires/specific") - self.assertStatus("200 OK") - self.assertHeader("Expires") + self.getPage('/expires/specific') + self.assertStatus('200 OK') + self.assertHeader('Expires') # test exceptions for bad time values - self.getPage("/expires/wrongtype") + self.getPage('/expires/wrongtype') self.assertStatus(500) - self.assertInBody("TypeError") + self.assertInBody('TypeError') # static content should not have "cache prevention" headers - self.getPage("/expires/index.html") - self.assertStatus("200 OK") - self.assertNoHeader("Pragma") - self.assertNoHeader("Cache-Control") - self.assertHeader("Expires") + self.getPage('/expires/index.html') + self.assertStatus('200 OK') + self.assertNoHeader('Pragma') + self.assertNoHeader('Cache-Control') + self.assertHeader('Expires') # dynamic content that sets indicators should not have # "cache prevention" headers - self.getPage("/expires/cacheable") - self.assertStatus("200 OK") - self.assertNoHeader("Pragma") - self.assertNoHeader("Cache-Control") - self.assertHeader("Expires") + self.getPage('/expires/cacheable') + self.assertStatus('200 OK') + self.assertNoHeader('Pragma') + self.assertNoHeader('Cache-Control') + self.assertHeader('Expires') self.getPage('/expires/dynamic') - self.assertBody("D-d-d-dynamic!") + self.assertBody('D-d-d-dynamic!') # the Cache-Control header should be untouched - self.assertHeader("Cache-Control", "private") - self.assertHeader("Expires") + self.assertHeader('Cache-Control', 'private') + self.assertHeader('Expires') # configure the tool to ignore indicators and replace existing headers - self.getPage("/expires/force") - self.assertStatus("200 OK") + self.getPage('/expires/force') + self.assertStatus('200 OK') # This also gives us a chance to test 0 expiry with no other headers - self.assertHeader("Pragma", "no-cache") - if cherrypy.server.protocol_version == "HTTP/1.1": - self.assertHeader("Cache-Control", "no-cache, must-revalidate") - self.assertHeader("Expires", "Sun, 28 Jan 2007 00:00:00 GMT") + self.assertHeader('Pragma', 'no-cache') + if cherrypy.server.protocol_version == 'HTTP/1.1': + self.assertHeader('Cache-Control', 'no-cache, must-revalidate') + self.assertHeader('Expires', 'Sun, 28 Jan 2007 00:00:00 GMT') # static content should now have "cache prevention" headers - self.getPage("/expires/index.html") - self.assertStatus("200 OK") - self.assertHeader("Pragma", "no-cache") - if cherrypy.server.protocol_version == "HTTP/1.1": - self.assertHeader("Cache-Control", "no-cache, must-revalidate") - self.assertHeader("Expires", "Sun, 28 Jan 2007 00:00:00 GMT") + self.getPage('/expires/index.html') + self.assertStatus('200 OK') + self.assertHeader('Pragma', 'no-cache') + if cherrypy.server.protocol_version == 'HTTP/1.1': + self.assertHeader('Cache-Control', 'no-cache, must-revalidate') + self.assertHeader('Expires', 'Sun, 28 Jan 2007 00:00:00 GMT') # the cacheable handler should now have "cache prevention" headers - self.getPage("/expires/cacheable") - self.assertStatus("200 OK") - self.assertHeader("Pragma", "no-cache") - if cherrypy.server.protocol_version == "HTTP/1.1": - self.assertHeader("Cache-Control", "no-cache, must-revalidate") - self.assertHeader("Expires", "Sun, 28 Jan 2007 00:00:00 GMT") + self.getPage('/expires/cacheable') + self.assertStatus('200 OK') + self.assertHeader('Pragma', 'no-cache') + if cherrypy.server.protocol_version == 'HTTP/1.1': + self.assertHeader('Cache-Control', 'no-cache, must-revalidate') + self.assertHeader('Expires', 'Sun, 28 Jan 2007 00:00:00 GMT') self.getPage('/expires/dynamic') - self.assertBody("D-d-d-dynamic!") + self.assertBody('D-d-d-dynamic!') # dynamic sets Cache-Control to private but it should be # overwritten here ... - self.assertHeader("Pragma", "no-cache") - if cherrypy.server.protocol_version == "HTTP/1.1": - self.assertHeader("Cache-Control", "no-cache, must-revalidate") - self.assertHeader("Expires", "Sun, 28 Jan 2007 00:00:00 GMT") + self.assertHeader('Pragma', 'no-cache') + if cherrypy.server.protocol_version == 'HTTP/1.1': + self.assertHeader('Cache-Control', 'no-cache, must-revalidate') + self.assertHeader('Expires', 'Sun, 28 Jan 2007 00:00:00 GMT') def testLastModified(self): - self.getPage("/a.gif") + self.getPage('/a.gif') self.assertStatus(200) self.assertBody(gif_bytes) - lm1 = self.assertHeader("Last-Modified") + lm1 = self.assertHeader('Last-Modified') # this request should get the cached copy. - self.getPage("/a.gif") + self.getPage('/a.gif') self.assertStatus(200) self.assertBody(gif_bytes) - self.assertHeader("Age") - lm2 = self.assertHeader("Last-Modified") + self.assertHeader('Age') + lm2 = self.assertHeader('Last-Modified') self.assertEqual(lm1, lm2) # this request should match the cached copy, but raise 304. - self.getPage("/a.gif", [('If-Modified-Since', lm1)]) + self.getPage('/a.gif', [('If-Modified-Since', lm1)]) self.assertStatus(304) - self.assertNoHeader("Last-Modified") - if not getattr(cherrypy.server, "using_apache", False): - self.assertHeader("Age") + self.assertNoHeader('Last-Modified') + if not getattr(cherrypy.server, 'using_apache', False): + self.assertHeader('Age') def test_antistampede(self): SECONDS = 4 - slow_url = "/long_process?seconds={SECONDS}".format(**locals()) + slow_url = '/long_process?seconds={SECONDS}'.format(**locals()) # We MUST make an initial synchronous request in order to create the # AntiStampedeCache object, and populate its selecting_headers, # before the actual stampede. self.getPage(slow_url) self.assertBody('success!') - self.getPage("/clear_cache?path=" + quote(slow_url, safe='')) + self.getPage('/clear_cache?path=' + quote(slow_url, safe='')) self.assertStatus(200) start = datetime.datetime.now() @@ -317,23 +317,23 @@ class CacheTest(helper.CPWebCase): self.assertEqualDates(start, finish, seconds=allowance) def test_cache_control(self): - self.getPage("/control") + self.getPage('/control') self.assertBody('visit #1') - self.getPage("/control") + self.getPage('/control') self.assertBody('visit #1') - self.getPage("/control", headers=[('Cache-Control', 'no-cache')]) + self.getPage('/control', headers=[('Cache-Control', 'no-cache')]) self.assertBody('visit #2') - self.getPage("/control") + self.getPage('/control') self.assertBody('visit #2') - self.getPage("/control", headers=[('Pragma', 'no-cache')]) + self.getPage('/control', headers=[('Pragma', 'no-cache')]) self.assertBody('visit #3') - self.getPage("/control") + self.getPage('/control') self.assertBody('visit #3') time.sleep(1) - self.getPage("/control", headers=[('Cache-Control', 'max-age=0')]) + self.getPage('/control', headers=[('Cache-Control', 'max-age=0')]) self.assertBody('visit #4') - self.getPage("/control") + self.getPage('/control') self.assertBody('visit #4') |