summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-12-21 15:19:19 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-12-21 15:19:19 +0000
commit673e6fc7fb243ed44841b9969d26a161c25733b3 (patch)
tree01bb413490cf72d003d6a31b3938686b84476fb8 /tests
parent3cf8502d35cdfbb4f868a848b1f38dcc275f6be1 (diff)
Fixed #11675 -- Added support for the PyLibMC cache library. In order to support this, and clean up some other 1.3 caching additions, this patch also includes some changes to the way caches are defined. This means you can now have multiple caches, in the same way you have multiple databases. A huge thanks to Jacob Burch for the work on the PyLibMC backend, and to Jannis for his work on the cache definition changes.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15005 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/cache/liberal_backend.py4
-rw-r--r--tests/regressiontests/cache/tests.py107
-rw-r--r--tests/regressiontests/templates/tests.py4
3 files changed, 69 insertions, 46 deletions
diff --git a/tests/regressiontests/cache/liberal_backend.py b/tests/regressiontests/cache/liberal_backend.py
index 5c7e312690..cc15b66465 100644
--- a/tests/regressiontests/cache/liberal_backend.py
+++ b/tests/regressiontests/cache/liberal_backend.py
@@ -1,9 +1,9 @@
-from django.core.cache.backends.locmem import CacheClass as LocMemCacheClass
+from django.core.cache.backends.locmem import LocMemCache
class LiberalKeyValidationMixin(object):
def validate_key(self, key):
pass
-class CacheClass(LiberalKeyValidationMixin, LocMemCacheClass):
+class CacheClass(LiberalKeyValidationMixin, LocMemCache):
pass
diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
index 941ab70b8a..6c5775830a 100644
--- a/tests/regressiontests/cache/tests.py
+++ b/tests/regressiontests/cache/tests.py
@@ -11,7 +11,7 @@ import warnings
from django.conf import settings
from django.core import management
-from django.core.cache import get_cache
+from django.core.cache import get_cache, DEFAULT_CACHE_ALIAS
from django.core.cache.backends.base import InvalidCacheBackendError, CacheKeyWarning
from django.http import HttpResponse, HttpRequest
from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware
@@ -33,7 +33,7 @@ class DummyCacheTests(unittest.TestCase):
# The Dummy cache backend doesn't really behave like a test backend,
# so it has different test requirements.
def setUp(self):
- self.cache = get_cache('dummy://')
+ self.cache = get_cache('django.core.cache.backends.dummy.DummyCache')
def test_simple(self):
"Dummy cache backend ignores cache set calls"
@@ -429,9 +429,6 @@ class BaseCacheTests(object):
self.assertEqual(self.cache.get('answer1', version=2), None)
self.assertEqual(self.v2_cache.get('answer1'), None)
- # print '---'
- # print 'c1',self.cache._cache
- # print 'v2',self.v2_cache._cache
self.assertEqual(self.v2_cache.get('answer1', version=1), 42)
self.assertEqual(self.v2_cache.get('answer1', version=2), None)
@@ -704,11 +701,11 @@ class DBCacheTests(unittest.TestCase, BaseCacheTests):
# Spaces are used in the table name to ensure quoting/escaping is working
self._table_name = 'test cache table'
management.call_command('createcachetable', self._table_name, verbosity=0, interactive=False)
- self.cache = get_cache('db://%s?max_entries=30' % self._table_name)
- self.prefix_cache = get_cache('db://%s' % self._table_name, key_prefix='cacheprefix')
- self.v2_cache = get_cache('db://%s' % self._table_name, version=2)
- self.custom_key_cache = get_cache('db://%s' % self._table_name, key_func=custom_key_func)
- self.custom_key_cache2 = get_cache('db://%s' % self._table_name, key_func='regressiontests.cache.tests.custom_key_func')
+ self.cache = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, OPTIONS={'MAX_ENTRIES': 30})
+ self.prefix_cache = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, KEY_PREFIX='cacheprefix')
+ self.v2_cache = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, VERSION=2)
+ self.custom_key_cache = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, KEY_FUNCTION=custom_key_func)
+ self.custom_key_cache2 = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, KEY_FUNCTION='regressiontests.cache.tests.custom_key_func')
def tearDown(self):
from django.db import connection
@@ -719,16 +716,20 @@ class DBCacheTests(unittest.TestCase, BaseCacheTests):
self.perform_cull_test(50, 29)
def test_zero_cull(self):
+ self.cache = get_cache('django.core.cache.backends.db.DatabaseCache', LOCATION=self._table_name, OPTIONS={'MAX_ENTRIES': 30, 'CULL_FREQUENCY': 0})
+ self.perform_cull_test(50, 18)
+
+ def test_old_initialization(self):
self.cache = get_cache('db://%s?max_entries=30&cull_frequency=0' % self._table_name)
self.perform_cull_test(50, 18)
class LocMemCacheTests(unittest.TestCase, BaseCacheTests):
def setUp(self):
- self.cache = get_cache('locmem://?max_entries=30')
- self.prefix_cache = get_cache('locmem://', key_prefix='cacheprefix')
- self.v2_cache = get_cache('locmem://', version=2)
- self.custom_key_cache = get_cache('locmem://?max_entries=30', key_func=custom_key_func)
- self.custom_key_cache2 = get_cache('locmem://?max_entries=30', key_func='regressiontests.cache.tests.custom_key_func')
+ self.cache = get_cache('django.core.cache.backends.locmem.LocMemCache', OPTIONS={'MAX_ENTRIES': 30})
+ self.prefix_cache = get_cache('django.core.cache.backends.locmem.LocMemCache', KEY_PREFIX='cacheprefix')
+ self.v2_cache = get_cache('django.core.cache.backends.locmem.LocMemCache', VERSION=2)
+ self.custom_key_cache = get_cache('django.core.cache.backends.locmem.LocMemCache', OPTIONS={'MAX_ENTRIES': 30}, KEY_FUNCTION=custom_key_func)
+ self.custom_key_cache2 = get_cache('django.core.cache.backends.locmem.LocMemCache', OPTIONS={'MAX_ENTRIES': 30}, KEY_FUNCTION='regressiontests.cache.tests.custom_key_func')
# LocMem requires a hack to make the other caches
# share a data store with the 'normal' cache.
@@ -744,24 +745,32 @@ class LocMemCacheTests(unittest.TestCase, BaseCacheTests):
self.custom_key_cache2._cache = self.cache._cache
self.custom_key_cache2._expire_info = self.cache._expire_info
+ def tearDown(self):
+ self.cache.clear()
+
def test_cull(self):
self.perform_cull_test(50, 29)
def test_zero_cull(self):
+ self.cache = get_cache('django.core.cache.backends.locmem.LocMemCache', OPTIONS={'MAX_ENTRIES': 30, 'CULL_FREQUENCY': 0})
+ self.perform_cull_test(50, 19)
+
+ def test_old_initialization(self):
self.cache = get_cache('locmem://?max_entries=30&cull_frequency=0')
self.perform_cull_test(50, 19)
# 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
+# need to contain a cache backend setting that points at
# your memcache server.
class MemcachedCacheTests(unittest.TestCase, BaseCacheTests):
def setUp(self):
- self.cache = get_cache(settings.CACHE_BACKEND)
- self.prefix_cache = get_cache(settings.CACHE_BACKEND, key_prefix='cacheprefix')
- self.v2_cache = get_cache(settings.CACHE_BACKEND, version=2)
- self.custom_key_cache = get_cache(settings.CACHE_BACKEND, key_func=custom_key_func)
- self.custom_key_cache2 = get_cache(settings.CACHE_BACKEND, key_func='regressiontests.cache.tests.custom_key_func')
+ name = settings.CACHES[DEFAULT_CACHE_ALIAS]['LOCATION']
+ self.cache = get_cache('django.core.cache.backends.memcached.MemcachedCache', LOCATION=name)
+ self.prefix_cache = get_cache('django.core.cache.backends.memcached.MemcachedCache', LOCATION=name, KEY_PREFIX='cacheprefix')
+ self.v2_cache = get_cache('django.core.cache.backends.memcached.MemcachedCache', LOCATION=name, VERSION=2)
+ self.custom_key_cache = get_cache('django.core.cache.backends.memcached.MemcachedCache', LOCATION=name, KEY_FUNCTION=custom_key_func)
+ self.custom_key_cache2 = get_cache('django.core.cache.backends.memcached.MemcachedCache', LOCATION=name, KEY_FUNCTION='regressiontests.cache.tests.custom_key_func')
def tearDown(self):
self.cache.clear()
@@ -781,7 +790,7 @@ class MemcachedCacheTests(unittest.TestCase, BaseCacheTests):
# memcached limits key length to 250
self.assertRaises(Exception, self.cache.set, 'a' * 251, 'value')
-MemcachedCacheTests = unittest.skipUnless(settings.CACHE_BACKEND.startswith('memcached://'), "memcached not available")(MemcachedCacheTests)
+MemcachedCacheTests = unittest.skipUnless(settings.CACHES[DEFAULT_CACHE_ALIAS]['BACKEND'].startswith('django.core.cache.backends.memcached.'), "memcached not available")(MemcachedCacheTests)
class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
"""
@@ -789,11 +798,11 @@ class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
"""
def setUp(self):
self.dirname = tempfile.mkdtemp()
- self.cache = get_cache('file://%s?max_entries=30' % self.dirname)
- self.prefix_cache = get_cache('file://%s' % self.dirname, key_prefix='cacheprefix')
- self.v2_cache = get_cache('file://%s' % self.dirname, version=2)
- self.custom_key_cache = get_cache('file://%s' % self.dirname, key_func=custom_key_func)
- self.custom_key_cache2 = get_cache('file://%s' % self.dirname, key_func='regressiontests.cache.tests.custom_key_func')
+ self.cache = get_cache('django.core.cache.backends.filebased.FileBasedCache', LOCATION=self.dirname, OPTIONS={'MAX_ENTRIES': 30})
+ self.prefix_cache = get_cache('django.core.cache.backends.filebased.FileBasedCache', LOCATION=self.dirname, KEY_PREFIX='cacheprefix')
+ self.v2_cache = get_cache('django.core.cache.backends.filebased.FileBasedCache', LOCATION=self.dirname, VERSION=2)
+ self.custom_key_cache = get_cache('django.core.cache.backends.filebased.FileBasedCache', LOCATION=self.dirname, KEY_FUNCTION=custom_key_func)
+ self.custom_key_cache2 = get_cache('django.core.cache.backends.filebased.FileBasedCache', LOCATION=self.dirname, KEY_FUNCTION='regressiontests.cache.tests.custom_key_func')
def tearDown(self):
self.cache.clear()
@@ -824,6 +833,10 @@ class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
def test_cull(self):
self.perform_cull_test(50, 29)
+ 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
@@ -911,28 +924,35 @@ class CacheUtils(unittest.TestCase):
class PrefixedCacheUtils(CacheUtils):
def setUp(self):
super(PrefixedCacheUtils, self).setUp()
- self.old_cache_key_prefix = settings.CACHE_KEY_PREFIX
- settings.CACHE_KEY_PREFIX = 'cacheprefix'
+ self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
+ settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
def tearDown(self):
super(PrefixedCacheUtils, self).tearDown()
- settings.CACHE_KEY_PREFIX = self.old_cache_key_prefix
+ 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_cache_backend = settings.CACHE_BACKEND
+ self.orig_caches = settings.CACHES
settings.CACHE_MIDDLEWARE_SECONDS = 60
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'test'
- settings.CACHE_BACKEND = 'locmem:///'
+ 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.CACHE_BACKEND = self.orig_cache_backend
+ settings.CACHES = self.orig_caches
def _get_request(self, method):
request = HttpRequest()
@@ -981,7 +1001,7 @@ 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_cache_backend = settings.CACHE_BACKEND
+ self.orig_caches = settings.CACHES
self.orig_use_i18n = settings.USE_I18N
self.orig_languages = settings.LANGUAGES
settings.LANGUAGES = (
@@ -994,7 +1014,7 @@ class CacheI18nTest(unittest.TestCase):
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
+ settings.CACHES = self.orig_caches
settings.USE_I18N = self.orig_use_i18n
settings.LANGUAGES = self.orig_languages
translation.deactivate()
@@ -1046,8 +1066,12 @@ class CacheI18nTest(unittest.TestCase):
return UpdateCacheMiddleware().process_response(request, response)
settings.CACHE_MIDDLEWARE_SECONDS = 60
- settings.CACHE_MIDDLEWARE_KEY_PREFIX="test"
- settings.CACHE_BACKEND='locmem:///'
+ settings.CACHE_MIDDLEWARE_KEY_PREFIX = "test"
+ settings.CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
+ }
+ }
settings.USE_ETAGS = True
settings.USE_I18N = True
en_message ="Hello world!"
@@ -1083,12 +1107,15 @@ class CacheI18nTest(unittest.TestCase):
class PrefixedCacheI18nTest(CacheI18nTest):
def setUp(self):
super(PrefixedCacheI18nTest, self).setUp()
- self.old_cache_key_prefix = settings.CACHE_KEY_PREFIX
- settings.CACHE_KEY_PREFIX = 'cacheprefix'
+ self.old_cache_key_prefix = settings.CACHES['default'].get('KEY_PREFIX', None)
+ settings.CACHES['default']['KEY_PREFIX'] = 'cacheprefix'
def tearDown(self):
super(PrefixedCacheI18nTest, self).tearDown()
- settings.CACHE_KEY_PREFIX = self.old_cache_key_prefix
+ 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
if __name__ == '__main__':
unittest.main()
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index 2bd6a878ca..99776e611a 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -1453,8 +1453,6 @@ class Templates(unittest.TestCase):
'url-asvar03': ('{% load url from future %}{% url "no_such_view" as url %}{{ url }}', {}, ''),
### CACHE TAG ######################################################
- 'cache01': ('{% load cache %}{% cache -1 test %}cache01{% endcache %}', {}, 'cache01'),
- 'cache02': ('{% load cache %}{% cache -1 test %}cache02{% endcache %}', {}, 'cache02'),
'cache03': ('{% load cache %}{% cache 2 test %}cache03{% endcache %}', {}, 'cache03'),
'cache04': ('{% load cache %}{% cache 2 test %}cache04{% endcache %}', {}, 'cache03'),
'cache05': ('{% load cache %}{% cache 2 test foo %}cache05{% endcache %}', {'foo': 1}, 'cache05'),
@@ -1463,8 +1461,6 @@ class Templates(unittest.TestCase):
# Allow first argument to be a variable.
'cache08': ('{% load cache %}{% cache time test foo %}cache08{% endcache %}', {'foo': 2, 'time': 2}, 'cache06'),
- 'cache09': ('{% load cache %}{% cache time test foo %}cache09{% endcache %}', {'foo': 3, 'time': -1}, 'cache09'),
- 'cache10': ('{% load cache %}{% cache time test foo %}cache10{% endcache %}', {'foo': 3, 'time': -1}, 'cache10'),
# Raise exception if we don't have at least 2 args, first one integer.
'cache11': ('{% load cache %}{% cache %}{% endcache %}', {}, template.TemplateSyntaxError),