summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHonza Král <honza.kral@gmail.com>2010-10-29 01:31:15 +0000
committerHonza Král <honza.kral@gmail.com>2010-10-29 01:31:15 +0000
commitcb17f7ca2252265ab4a844e7924cb8ebab4a1a76 (patch)
tree7aaf1bdfab5ea33a83bab1567b3967f90ed792e8 /tests
parent8a724802c5b3b8d4f8d51bcf276838bf0f4ba176 (diff)
Fixed #14560 -- Enable HEAD requests to be cached properly. Thanks, codemonkey!
Introducing ability to cache HEAD requests and GET requests separately by adding the method to the cache key while preserving the functionality that HEAD requests can use cached reponses generated by a GET request. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14391 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/cache/tests.py69
1 files changed, 64 insertions, 5 deletions
diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
index a91b842ebd..9818b03661 100644
--- a/tests/regressiontests/cache/tests.py
+++ b/tests/regressiontests/cache/tests.py
@@ -507,12 +507,13 @@ class CacheUtils(unittest.TestCase):
settings.CACHE_MIDDLEWARE_SECONDS = self.old_middleware_seconds
settings.USE_I18N = self.orig_use_i18n
- def _get_request(self, path):
+ def _get_request(self, path, method='GET'):
request = HttpRequest()
request.META = {
'SERVER_NAME': 'testserver',
'SERVER_PORT': 80,
}
+ request.method = method
request.path = request.path_info = "/cache/%s" % path
return request
@@ -544,18 +545,76 @@ class CacheUtils(unittest.TestCase):
self.assertEqual(get_cache_key(request), None)
# Set headers to an empty list.
learn_cache_key(request, response)
- self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
+ self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.GET.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
# Verify that a specified key_prefix is taken in to account.
learn_cache_key(request, response, key_prefix=key_prefix)
- self.assertEqual(get_cache_key(request, key_prefix=key_prefix), 'views.decorators.cache.cache_page.localprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
+ self.assertEqual(get_cache_key(request, key_prefix=key_prefix), 'views.decorators.cache.cache_page.localprefix.GET.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
def test_learn_cache_key(self):
- request = self._get_request(self.path)
+ request = self._get_request(self.path, 'HEAD')
response = HttpResponse()
response['Vary'] = 'Pony'
# Make sure that the Vary header is added to the key hash
learn_cache_key(request, response)
- self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
+ self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.HEAD.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
+
+class CacheHEADTest(unittest.TestCase):
+
+ def setUp(self):
+ self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
+ self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
+ self.orig_cache_backend = settings.CACHE_BACKEND
+ settings.CACHE_MIDDLEWARE_SECONDS = 60
+ settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'test'
+ settings.CACHE_BACKEND = 'locmem:///'
+ self.path = '/cache/test/'
+
+ def tearDown(self):
+ settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
+ settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
+ settings.CACHE_BACKEND = self.orig_cache_backend
+
+ def _get_request(self, method):
+ request = HttpRequest()
+ request.META = {
+ 'SERVER_NAME': 'testserver',
+ 'SERVER_PORT': 80,
+ }
+ request.method = method
+ request.path = request.path_info = self.path
+ return request
+
+ def _get_request_cache(self, method):
+ request = self._get_request(method)
+ request._cache_update_cache = True
+ return request
+
+ def _set_cache(self, request, msg):
+ response = HttpResponse()
+ response.content = msg
+ return UpdateCacheMiddleware().process_response(request, response)
+
+ def test_head_caches_correctly(self):
+ test_content = 'test content'
+
+ request = self._get_request_cache('HEAD')
+ self._set_cache(request, test_content)
+
+ request = self._get_request('HEAD')
+ get_cache_data = FetchFromCacheMiddleware().process_request(request)
+ self.assertNotEqual(get_cache_data, None)
+ self.assertEqual(test_content, get_cache_data.content)
+
+ def test_head_with_cached_get(self):
+ test_content = 'test content'
+
+ request = self._get_request_cache('GET')
+ self._set_cache(request, test_content)
+
+ request = self._get_request('HEAD')
+ get_cache_data = FetchFromCacheMiddleware().process_request(request)
+ self.assertNotEqual(get_cache_data, None)
+ self.assertEqual(test_content, get_cache_data.content)
class CacheI18nTest(unittest.TestCase):