summaryrefslogtreecommitdiff
path: root/cherrypy/test/test_caching.py
diff options
context:
space:
mode:
Diffstat (limited to 'cherrypy/test/test_caching.py')
-rw-r--r--cherrypy/test/test_caching.py176
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')