Skip to content

Commit 4819797

Browse files
committed
Improved settings manipulation in the cache tests with the suitable decorators and context managers.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17039 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent 5a16b64 commit 4819797

File tree

1 file changed

+104
-125
lines changed

1 file changed

+104
-125
lines changed

tests/regressiontests/cache/tests.py

Lines changed: 104 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@
3434
# functions/classes for complex data type tests
3535
def f():
3636
return 42
37+
3738
class C:
3839
def m(n):
3940
return 24
4041

42+
4143
class DummyCacheTests(unittest.TestCase):
4244
# The Dummy cache backend doesn't really behave like a test backend,
4345
# so it has different test requirements.
@@ -737,10 +739,12 @@ def test_custom_key_func(self):
737739
self.assertEqual(self.custom_key_cache.get('answer2'), 42)
738740
self.assertEqual(self.custom_key_cache2.get('answer2'), 42)
739741

742+
740743
def custom_key_func(key, key_prefix, version):
741744
"A customized cache key function"
742745
return 'CUSTOM-' + '-'.join([key_prefix, str(version), key])
743746

747+
744748
class DBCacheTests(unittest.TestCase, BaseCacheTests):
745749
backend_name = 'django.core.cache.backends.db.DatabaseCache'
746750

@@ -818,6 +822,7 @@ def test_multiple_caches(self):
818822
self.assertEqual(mirror_cache.get('value1'), 42)
819823
self.assertEqual(other_cache.get('value1'), None)
820824

825+
821826
# memcached backend isn't guaranteed to be available.
822827
# To check the memcached backend, the test settings file will
823828
# need to contain a cache backend setting that points at
@@ -853,6 +858,7 @@ def test_invalid_keys(self):
853858

854859
MemcachedCacheTests = unittest.skipUnless(settings.CACHES[DEFAULT_CACHE_ALIAS]['BACKEND'].startswith('django.core.cache.backends.memcached.'), "memcached not available")(MemcachedCacheTests)
855860

861+
856862
class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
857863
"""
858864
Specific test cases for the file-based cache.
@@ -900,6 +906,7 @@ def test_old_initialization(self):
900906
self.cache = get_cache('file://%s?max_entries=30' % self.dirname)
901907
self.perform_cull_test(50, 29)
902908

909+
903910
class CustomCacheKeyValidationTests(unittest.TestCase):
904911
"""
905912
Tests for the ability to mixin a custom ``validate_key`` method to
@@ -933,22 +940,12 @@ def test_simple(self):
933940

934941
self.assertRaises(InvalidCacheBackendError, get_cache, 'does_not_exist')
935942

943+
936944
class CacheUtils(unittest.TestCase):
937945
"""TestCase for django.utils.cache functions."""
938946

939947
def setUp(self):
940948
self.path = '/cache/test/'
941-
self.old_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
942-
self.old_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
943-
self.orig_use_i18n = settings.USE_I18N
944-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
945-
settings.CACHE_MIDDLEWARE_SECONDS = 1
946-
settings.USE_I18N = False
947-
948-
def tearDown(self):
949-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.old_cache_middleware_key_prefix
950-
settings.CACHE_MIDDLEWARE_SECONDS = self.old_cache_middleware_seconds
951-
settings.USE_I18N = self.orig_use_i18n
952949

953950
def _get_request(self, path, method='GET'):
954951
request = HttpRequest()
@@ -1036,39 +1033,32 @@ def test_patch_cache_control(self):
10361033
parts = set(cc_delim_re.split(response['Cache-Control']))
10371034
self.assertEqual(parts, expected_cc)
10381035

1039-
class PrefixedCacheUtils(CacheUtils):
1040-
def setUp(self):
1041-
super(PrefixedCacheUtils, self).setUp()
1042-
self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
1043-
settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
1036+
CacheUtils = override_settings(
1037+
CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',
1038+
CACHE_MIDDLEWARE_SECONDS=1,
1039+
CACHES={
1040+
'default': {
1041+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1042+
},
1043+
},
1044+
USE_I18N=False,
1045+
)(CacheUtils)
1046+
1047+
PrefixedCacheUtils = override_settings(
1048+
CACHES={
1049+
'default': {
1050+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1051+
'KEY_PREFIX': 'cacheprefix',
1052+
},
1053+
},
1054+
)(CacheUtils)
10441055

1045-
def tearDown(self):
1046-
super(PrefixedCacheUtils, self).tearDown()
1047-
if self.old_cache_key_prefix is None:
1048-
del settings.CACHES['default']['KEY_PREFIX']
1049-
else:
1050-
settings.CACHES['default']['KEY_PREFIX'] = self.old_cache_key_prefix
10511056

10521057
class CacheHEADTest(unittest.TestCase):
10531058

10541059
def setUp(self):
1055-
self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
1056-
self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
1057-
self.orig_caches = settings.CACHES
1058-
settings.CACHE_MIDDLEWARE_SECONDS = 60
1059-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'test'
1060-
settings.CACHES = {
1061-
'default': {
1062-
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
1063-
}
1064-
}
10651060
self.path = '/cache/test/'
10661061

1067-
def tearDown(self):
1068-
settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
1069-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
1070-
settings.CACHES = self.orig_caches
1071-
10721062
def _get_request(self, method):
10731063
request = HttpRequest()
10741064
request.META = {
@@ -1111,29 +1101,22 @@ def test_head_with_cached_get(self):
11111101
self.assertNotEqual(get_cache_data, None)
11121102
self.assertEqual(test_content, get_cache_data.content)
11131103

1104+
CacheHEADTest = override_settings(
1105+
CACHE_MIDDLEWARE_SECONDS=60,
1106+
CACHE_MIDDLEWARE_KEY_PREFIX='test',
1107+
CACHES={
1108+
'default': {
1109+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1110+
},
1111+
},
1112+
)(CacheHEADTest)
1113+
1114+
11141115
class CacheI18nTest(unittest.TestCase):
11151116

11161117
def setUp(self):
1117-
self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
1118-
self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
1119-
self.orig_caches = settings.CACHES
1120-
self.orig_use_i18n = settings.USE_I18N
1121-
self.orig_languages = settings.LANGUAGES
1122-
settings.LANGUAGES = (
1123-
('en', 'English'),
1124-
('es', 'Spanish'),
1125-
)
1126-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
11271118
self.path = '/cache/test/'
11281119

1129-
def tearDown(self):
1130-
settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
1131-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
1132-
settings.CACHES = self.orig_caches
1133-
settings.USE_I18N = self.orig_use_i18n
1134-
settings.LANGUAGES = self.orig_languages
1135-
translation.deactivate()
1136-
11371120
def _get_request(self):
11381121
request = HttpRequest()
11391122
request.META = {
@@ -1158,8 +1141,8 @@ def _get_request_cache(self, query_string=None):
11581141
request.session = {}
11591142
return request
11601143

1144+
@override_settings(USE_I18N=True)
11611145
def test_cache_key_i18n(self):
1162-
settings.USE_I18N = True
11631146
request = self._get_request()
11641147
lang = translation.get_language()
11651148
response = HttpResponse()
@@ -1168,30 +1151,26 @@ def test_cache_key_i18n(self):
11681151
key2 = get_cache_key(request)
11691152
self.assertEqual(key, key2)
11701153

1154+
@override_settings(USE_I18N=False)
11711155
def test_cache_key_no_i18n (self):
1172-
settings.USE_I18N = False
11731156
request = self._get_request()
11741157
lang = translation.get_language()
11751158
response = HttpResponse()
11761159
key = learn_cache_key(request, response)
11771160
self.assertFalse(key.endswith(lang), "Cache keys shouldn't include the language name when i18n is inactive")
11781161

1162+
@override_settings(
1163+
CACHE_MIDDLEWARE_KEY_PREFIX="test",
1164+
CACHE_MIDDLEWARE_SECONDS=60,
1165+
USE_ETAGS=True,
1166+
USE_I18N=True,
1167+
)
11791168
def test_middleware(self):
11801169
def set_cache(request, lang, msg):
1181-
translation.activate(lang)
1182-
response = HttpResponse()
1183-
response.content= msg
1184-
return UpdateCacheMiddleware().process_response(request, response)
1185-
1186-
settings.CACHE_MIDDLEWARE_SECONDS = 60
1187-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = "test"
1188-
settings.CACHES = {
1189-
'default': {
1190-
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
1191-
}
1192-
}
1193-
settings.USE_ETAGS = True
1194-
settings.USE_I18N = True
1170+
with translation.override(lang):
1171+
response = HttpResponse()
1172+
response.content= msg
1173+
return UpdateCacheMiddleware().process_response(request, response)
11951174

11961175
# cache with non empty request.GET
11971176
request = self._get_request_cache(query_string='foo=bar&other=true')
@@ -1224,74 +1203,56 @@ def set_cache(request, lang, msg):
12241203
# Check that we use etags
12251204
self.assertTrue(get_cache_data.has_header('ETag'))
12261205
# Check that we can disable etags
1227-
settings.USE_ETAGS = False
1228-
request._cache_update_cache = True
1229-
set_cache(request, 'en', en_message)
1230-
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1231-
self.assertFalse(get_cache_data.has_header('ETag'))
1206+
with self.settings(USE_ETAGS=False):
1207+
request._cache_update_cache = True
1208+
set_cache(request, 'en', en_message)
1209+
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1210+
self.assertFalse(get_cache_data.has_header('ETag'))
12321211
# change the session language and set content
12331212
request = self._get_request_cache()
12341213
set_cache(request, 'es', es_message)
12351214
# change again the language
1236-
translation.activate('en')
1237-
# retrieve the content from cache
1238-
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1239-
self.assertEqual(get_cache_data.content, en_message)
1215+
with translation.override('en'):
1216+
# retrieve the content from cache
1217+
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1218+
self.assertEqual(get_cache_data.content, en_message)
12401219
# change again the language
1241-
translation.activate('es')
1242-
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1243-
self.assertEqual(get_cache_data.content, es_message)
1244-
1245-
class PrefixedCacheI18nTest(CacheI18nTest):
1246-
def setUp(self):
1247-
super(PrefixedCacheI18nTest, self).setUp()
1248-
self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
1249-
settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
1220+
with translation.override('es'):
1221+
get_cache_data = FetchFromCacheMiddleware().process_request(request)
1222+
self.assertEqual(get_cache_data.content, es_message)
12501223

1251-
def tearDown(self):
1252-
super(PrefixedCacheI18nTest, self).tearDown()
1253-
if self.old_cache_key_prefix is not None:
1254-
del settings.CACHES['default']['KEY_PREFIX']
1255-
else:
1256-
settings.CACHES['default']['KEY_PREFIX'] = self.old_cache_key_prefix
1224+
CacheI18nTest = override_settings(
1225+
CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',
1226+
CACHES={
1227+
'default': {
1228+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1229+
},
1230+
},
1231+
LANGUAGES=(
1232+
('en', 'English'),
1233+
('es', 'Spanish'),
1234+
),
1235+
)(CacheI18nTest)
1236+
1237+
PrefixedCacheI18nTest = override_settings(
1238+
CACHES={
1239+
'default': {
1240+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1241+
'KEY_PREFIX': 'cacheprefix'
1242+
},
1243+
},
1244+
)(CacheI18nTest)
12571245

12581246

12591247
def hello_world_view(request, value):
12601248
return HttpResponse('Hello World %s' % value)
12611249

1250+
12621251
class CacheMiddlewareTest(unittest.TestCase):
12631252

12641253
def setUp(self):
12651254
self.factory = RequestFactory()
12661255

1267-
self.orig_cache_middleware_alias = settings.CACHE_MIDDLEWARE_ALIAS
1268-
self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
1269-
self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
1270-
self.orig_cache_middleware_anonymous_only = getattr(settings, 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
1271-
self.orig_caches = settings.CACHES
1272-
1273-
settings.CACHE_MIDDLEWARE_ALIAS = 'other'
1274-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'middlewareprefix'
1275-
settings.CACHE_MIDDLEWARE_SECONDS = 30
1276-
settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False
1277-
settings.CACHES = {
1278-
'default': {
1279-
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
1280-
},
1281-
'other': {
1282-
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1283-
'LOCATION': 'other',
1284-
'TIMEOUT': '1'
1285-
}
1286-
}
1287-
1288-
def tearDown(self):
1289-
settings.CACHE_MIDDLEWARE_ALIAS = self.orig_cache_middleware_alias
1290-
settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
1291-
settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
1292-
settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = self.orig_cache_middleware_anonymous_only
1293-
settings.CACHES = self.orig_caches
1294-
12951256
def test_constructor(self):
12961257
"""
12971258
Ensure the constructor is correctly distinguishing between usage of CacheMiddleware as
@@ -1354,11 +1315,11 @@ def test_middleware(self):
13541315
self.assertNotEquals(result, None)
13551316
self.assertEqual(result.content, 'Hello World 1')
13561317

1318+
@override_settings(CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True)
13571319
def test_cache_middleware_anonymous_only_wont_cause_session_access(self):
13581320
""" The cache middleware shouldn't cause a session access due to
13591321
CACHE_MIDDLEWARE_ANONYMOUS_ONLY if nothing else has accessed the
13601322
session. Refs 13283 """
1361-
settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
13621323

13631324
from django.contrib.sessions.middleware import SessionMiddleware
13641325
from django.contrib.auth.middleware import AuthenticationMiddleware
@@ -1383,11 +1344,11 @@ def test_cache_middleware_anonymous_only_wont_cause_session_access(self):
13831344

13841345
self.assertEqual(request.session.accessed, False)
13851346

1347+
@override_settings(CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True)
13861348
def test_cache_middleware_anonymous_only_with_cache_page(self):
13871349
"""CACHE_MIDDLEWARE_ANONYMOUS_ONLY should still be effective when used
13881350
with the cache_page decorator: the response to a request from an
13891351
authenticated user should not be cached."""
1390-
settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
13911352

13921353
request = self.factory.get('/view_anon/')
13931354

@@ -1498,6 +1459,23 @@ def test_view_decorator(self):
14981459
response = other_with_timeout_view(request, '18')
14991460
self.assertEqual(response.content, 'Hello World 18')
15001461

1462+
CacheMiddlewareTest = override_settings(
1463+
CACHE_MIDDLEWARE_ALIAS='other',
1464+
CACHE_MIDDLEWARE_KEY_PREFIX='middlewareprefix',
1465+
CACHE_MIDDLEWARE_SECONDS=30,
1466+
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=False,
1467+
CACHES={
1468+
'default': {
1469+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1470+
},
1471+
'other': {
1472+
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
1473+
'LOCATION': 'other',
1474+
'TIMEOUT': '1',
1475+
},
1476+
},
1477+
)(CacheMiddlewareTest)
1478+
15011479

15021480
class TestWithTemplateResponse(TestCase):
15031481
"""
@@ -1604,6 +1582,7 @@ def test_admin(self):
16041582
self.assertEqual(response.status_code, 200)
16051583
self.assertTrue(response.has_header('ETag'))
16061584

1585+
16071586
if __name__ == '__main__':
16081587
unittest.main()
16091588

0 commit comments

Comments
 (0)