Commit 4529af9e authored by Vincent-Vega's avatar Vincent-Vega Committed by Tim Graham
Browse files

Fixed #22845 -- Correctly handled memcached default timeout value.

parent b341f336
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ class BaseMemcachedCache(six.with_metaclass(BaseMemcachedCacheMethods, BaseCache
        way. Call this function to obtain a safe value for your timeout.
        """
        if timeout == DEFAULT_TIMEOUT:
            return self.default_timeout
            timeout = self.default_timeout

        if timeout is None:
            # Using 0 in memcache sets a non-expiring timeout.
+18 −0
Original line number Diff line number Diff line
@@ -1078,6 +1078,12 @@ for _cache_params in settings.CACHES.values():
    if _cache_params['BACKEND'].startswith('django.core.cache.backends.memcached.'):
        memcached_params = _cache_params

memcached_never_expiring_params = memcached_params.copy()
memcached_never_expiring_params['TIMEOUT'] = None

memcached_far_future_params = memcached_params.copy()
memcached_far_future_params['TIMEOUT'] = 31536000  # 60*60*24*365, 1 year


@unittest.skipUnless(memcached_params, "memcached not available")
@override_settings(CACHES=caches_setting_for_tests(base=memcached_params))
@@ -1109,6 +1115,18 @@ class MemcachedCacheTests(BaseCacheTests, TestCase):
                self.assertEqual(caches[cache_key]._cache.pickleProtocol,
                                 pickle.HIGHEST_PROTOCOL)

    @override_settings(CACHES=caches_setting_for_tests(base=memcached_never_expiring_params))
    def test_default_never_expiring_timeout(self):
        # Regression test for #22845
        cache.set('infinite_foo', 'bar')
        self.assertEqual(cache.get('infinite_foo'), 'bar')

    @override_settings(CACHES=caches_setting_for_tests(base=memcached_far_future_params))
    def test_default_far_future_timeout(self):
        # Regression test for #22845
        cache.set('future_foo', 'bar')
        self.assertEqual(cache.get('future_foo'), 'bar')

    def test_cull(self):
        # culling isn't implemented, memcached deals with it.
        pass