diff options
| author | Honza Král <honza.kral@gmail.com> | 2010-10-29 01:31:15 +0000 |
|---|---|---|
| committer | Honza Král <honza.kral@gmail.com> | 2010-10-29 01:31:15 +0000 |
| commit | cb17f7ca2252265ab4a844e7924cb8ebab4a1a76 (patch) | |
| tree | 7aaf1bdfab5ea33a83bab1567b3967f90ed792e8 /tests | |
| parent | 8a724802c5b3b8d4f8d51bcf276838bf0f4ba176 (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.py | 69 |
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): |
