Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Improved settings manipulation in the cache tests with the suitable d…

…ecorators and context managers.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17039 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 4819797f70ce718276466962418ba5ecc80d0fba 1 parent 5a16b64
@aaugustin aaugustin authored
Showing with 104 additions and 125 deletions.
  1. +104 −125 tests/regressiontests/cache/tests.py
View
229 tests/regressiontests/cache/tests.py
@@ -34,10 +34,12 @@
# functions/classes for complex data type tests
def f():
return 42
+
class C:
def m(n):
return 24
+
class DummyCacheTests(unittest.TestCase):
# The Dummy cache backend doesn't really behave like a test backend,
# so it has different test requirements.
@@ -737,10 +739,12 @@ def test_custom_key_func(self):
self.assertEqual(self.custom_key_cache.get('answer2'), 42)
self.assertEqual(self.custom_key_cache2.get('answer2'), 42)
+
def custom_key_func(key, key_prefix, version):
"A customized cache key function"
return 'CUSTOM-' + '-'.join([key_prefix, str(version), key])
+
class DBCacheTests(unittest.TestCase, BaseCacheTests):
backend_name = 'django.core.cache.backends.db.DatabaseCache'
@@ -818,6 +822,7 @@ def test_multiple_caches(self):
self.assertEqual(mirror_cache.get('value1'), 42)
self.assertEqual(other_cache.get('value1'), None)
+
# memcached backend isn't guaranteed to be available.
# To check the memcached backend, the test settings file will
# need to contain a cache backend setting that points at
@@ -853,6 +858,7 @@ def test_invalid_keys(self):
MemcachedCacheTests = unittest.skipUnless(settings.CACHES[DEFAULT_CACHE_ALIAS]['BACKEND'].startswith('django.core.cache.backends.memcached.'), "memcached not available")(MemcachedCacheTests)
+
class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
"""
Specific test cases for the file-based cache.
@@ -900,6 +906,7 @@ def test_old_initialization(self):
self.cache = get_cache('file://%s?max_entries=30' % self.dirname)
self.perform_cull_test(50, 29)
+
class CustomCacheKeyValidationTests(unittest.TestCase):
"""
Tests for the ability to mixin a custom ``validate_key`` method to
@@ -933,22 +940,12 @@ def test_simple(self):
self.assertRaises(InvalidCacheBackendError, get_cache, 'does_not_exist')
+
class CacheUtils(unittest.TestCase):
"""TestCase for django.utils.cache functions."""
def setUp(self):
self.path = '/cache/test/'
- self.old_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.old_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
- self.orig_use_i18n = settings.USE_I18N
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
- settings.CACHE_MIDDLEWARE_SECONDS = 1
- settings.USE_I18N = False
-
- def tearDown(self):
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.old_cache_middleware_key_prefix
- settings.CACHE_MIDDLEWARE_SECONDS = self.old_cache_middleware_seconds
- settings.USE_I18N = self.orig_use_i18n
def _get_request(self, path, method='GET'):
request = HttpRequest()
@@ -1036,39 +1033,32 @@ def test_patch_cache_control(self):
parts = set(cc_delim_re.split(response['Cache-Control']))
self.assertEqual(parts, expected_cc)
-class PrefixedCacheUtils(CacheUtils):
- def setUp(self):
- super(PrefixedCacheUtils, self).setUp()
- self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
- settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
+CacheUtils = override_settings(
+ CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',
+ CACHE_MIDDLEWARE_SECONDS=1,
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ },
+ },
+ USE_I18N=False,
+)(CacheUtils)
+
+PrefixedCacheUtils = override_settings(
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ 'KEY_PREFIX': 'cacheprefix',
+ },
+ },
+)(CacheUtils)
- def tearDown(self):
- super(PrefixedCacheUtils, self).tearDown()
- if self.old_cache_key_prefix is None:
- del settings.CACHES['default']['KEY_PREFIX']
- else:
- settings.CACHES['default']['KEY_PREFIX'] = self.old_cache_key_prefix
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_caches = settings.CACHES
- settings.CACHE_MIDDLEWARE_SECONDS = 60
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'test'
- settings.CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
- }
- }
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.CACHES = self.orig_caches
-
def _get_request(self, method):
request = HttpRequest()
request.META = {
@@ -1111,29 +1101,22 @@ def test_head_with_cached_get(self):
self.assertNotEqual(get_cache_data, None)
self.assertEqual(test_content, get_cache_data.content)
+CacheHEADTest = override_settings(
+ CACHE_MIDDLEWARE_SECONDS=60,
+ CACHE_MIDDLEWARE_KEY_PREFIX='test',
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ },
+ },
+)(CacheHEADTest)
+
+
class CacheI18nTest(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_caches = settings.CACHES
- self.orig_use_i18n = settings.USE_I18N
- self.orig_languages = settings.LANGUAGES
- settings.LANGUAGES = (
- ('en', 'English'),
- ('es', 'Spanish'),
- )
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
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.CACHES = self.orig_caches
- settings.USE_I18N = self.orig_use_i18n
- settings.LANGUAGES = self.orig_languages
- translation.deactivate()
-
def _get_request(self):
request = HttpRequest()
request.META = {
@@ -1158,8 +1141,8 @@ def _get_request_cache(self, query_string=None):
request.session = {}
return request
+ @override_settings(USE_I18N=True)
def test_cache_key_i18n(self):
- settings.USE_I18N = True
request = self._get_request()
lang = translation.get_language()
response = HttpResponse()
@@ -1168,30 +1151,26 @@ def test_cache_key_i18n(self):
key2 = get_cache_key(request)
self.assertEqual(key, key2)
+ @override_settings(USE_I18N=False)
def test_cache_key_no_i18n (self):
- settings.USE_I18N = False
request = self._get_request()
lang = translation.get_language()
response = HttpResponse()
key = learn_cache_key(request, response)
self.assertFalse(key.endswith(lang), "Cache keys shouldn't include the language name when i18n is inactive")
+ @override_settings(
+ CACHE_MIDDLEWARE_KEY_PREFIX="test",
+ CACHE_MIDDLEWARE_SECONDS=60,
+ USE_ETAGS=True,
+ USE_I18N=True,
+ )
def test_middleware(self):
def set_cache(request, lang, msg):
- translation.activate(lang)
- response = HttpResponse()
- response.content= msg
- return UpdateCacheMiddleware().process_response(request, response)
-
- settings.CACHE_MIDDLEWARE_SECONDS = 60
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = "test"
- settings.CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
- }
- }
- settings.USE_ETAGS = True
- settings.USE_I18N = True
+ with translation.override(lang):
+ response = HttpResponse()
+ response.content= msg
+ return UpdateCacheMiddleware().process_response(request, response)
# cache with non empty request.GET
request = self._get_request_cache(query_string='foo=bar&other=true')
@@ -1224,74 +1203,56 @@ def set_cache(request, lang, msg):
# Check that we use etags
self.assertTrue(get_cache_data.has_header('ETag'))
# Check that we can disable etags
- settings.USE_ETAGS = False
- request._cache_update_cache = True
- set_cache(request, 'en', en_message)
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertFalse(get_cache_data.has_header('ETag'))
+ with self.settings(USE_ETAGS=False):
+ request._cache_update_cache = True
+ set_cache(request, 'en', en_message)
+ get_cache_data = FetchFromCacheMiddleware().process_request(request)
+ self.assertFalse(get_cache_data.has_header('ETag'))
# change the session language and set content
request = self._get_request_cache()
set_cache(request, 'es', es_message)
# change again the language
- translation.activate('en')
- # retrieve the content from cache
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data.content, en_message)
+ with translation.override('en'):
+ # retrieve the content from cache
+ get_cache_data = FetchFromCacheMiddleware().process_request(request)
+ self.assertEqual(get_cache_data.content, en_message)
# change again the language
- translation.activate('es')
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data.content, es_message)
-
-class PrefixedCacheI18nTest(CacheI18nTest):
- def setUp(self):
- super(PrefixedCacheI18nTest, self).setUp()
- self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
- settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
+ with translation.override('es'):
+ get_cache_data = FetchFromCacheMiddleware().process_request(request)
+ self.assertEqual(get_cache_data.content, es_message)
- def tearDown(self):
- super(PrefixedCacheI18nTest, self).tearDown()
- if self.old_cache_key_prefix is not None:
- del settings.CACHES['default']['KEY_PREFIX']
- else:
- settings.CACHES['default']['KEY_PREFIX'] = self.old_cache_key_prefix
+CacheI18nTest = override_settings(
+ CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ },
+ },
+ LANGUAGES=(
+ ('en', 'English'),
+ ('es', 'Spanish'),
+ ),
+)(CacheI18nTest)
+
+PrefixedCacheI18nTest = override_settings(
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ 'KEY_PREFIX': 'cacheprefix'
+ },
+ },
+)(CacheI18nTest)
def hello_world_view(request, value):
return HttpResponse('Hello World %s' % value)
+
class CacheMiddlewareTest(unittest.TestCase):
def setUp(self):
self.factory = RequestFactory()
- self.orig_cache_middleware_alias = settings.CACHE_MIDDLEWARE_ALIAS
- self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
- self.orig_cache_middleware_anonymous_only = getattr(settings, 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
- self.orig_caches = settings.CACHES
-
- settings.CACHE_MIDDLEWARE_ALIAS = 'other'
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'middlewareprefix'
- settings.CACHE_MIDDLEWARE_SECONDS = 30
- settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False
- settings.CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
- },
- 'other': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
- 'LOCATION': 'other',
- 'TIMEOUT': '1'
- }
- }
-
- def tearDown(self):
- settings.CACHE_MIDDLEWARE_ALIAS = self.orig_cache_middleware_alias
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
- settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
- settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = self.orig_cache_middleware_anonymous_only
- settings.CACHES = self.orig_caches
-
def test_constructor(self):
"""
Ensure the constructor is correctly distinguishing between usage of CacheMiddleware as
@@ -1354,11 +1315,11 @@ def test_middleware(self):
self.assertNotEquals(result, None)
self.assertEqual(result.content, 'Hello World 1')
+ @override_settings(CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True)
def test_cache_middleware_anonymous_only_wont_cause_session_access(self):
""" The cache middleware shouldn't cause a session access due to
CACHE_MIDDLEWARE_ANONYMOUS_ONLY if nothing else has accessed the
session. Refs 13283 """
- settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.auth.middleware import AuthenticationMiddleware
@@ -1383,11 +1344,11 @@ def test_cache_middleware_anonymous_only_wont_cause_session_access(self):
self.assertEqual(request.session.accessed, False)
+ @override_settings(CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True)
def test_cache_middleware_anonymous_only_with_cache_page(self):
"""CACHE_MIDDLEWARE_ANONYMOUS_ONLY should still be effective when used
with the cache_page decorator: the response to a request from an
authenticated user should not be cached."""
- settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
request = self.factory.get('/view_anon/')
@@ -1498,6 +1459,23 @@ def test_view_decorator(self):
response = other_with_timeout_view(request, '18')
self.assertEqual(response.content, 'Hello World 18')
+CacheMiddlewareTest = override_settings(
+ CACHE_MIDDLEWARE_ALIAS='other',
+ CACHE_MIDDLEWARE_KEY_PREFIX='middlewareprefix',
+ CACHE_MIDDLEWARE_SECONDS=30,
+ CACHE_MIDDLEWARE_ANONYMOUS_ONLY=False,
+ CACHES={
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ },
+ 'other': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ 'LOCATION': 'other',
+ 'TIMEOUT': '1',
+ },
+ },
+)(CacheMiddlewareTest)
+
class TestWithTemplateResponse(TestCase):
"""
@@ -1604,6 +1582,7 @@ def test_admin(self):
self.assertEqual(response.status_code, 200)
self.assertTrue(response.has_header('ETag'))
+
if __name__ == '__main__':
unittest.main()
Please sign in to comment.
Something went wrong with that request. Please try again.