Ticket #15806: patch_with_tests_for_15806.diff

File patch_with_tests_for_15806.diff, 3.0 KB (added by Nikolay Zakharov, 13 years ago)

United diff (code + tests)

  • django/core/cache/backends/filebased.py

    diff --git a/django/core/cache/backends/filebased.py b/django/core/cache/backends/filebased.py
    index 57bb63e..9596774 100644
    a b class FileBasedCache(BaseCache):  
    118118            return
    119119
    120120        if self._cull_frequency == 0:
    121             doomed = filelist
     121            doomed = (os.path.join(self._dir, k) for k in filelist)
    122122        else:
    123123            doomed = [os.path.join(self._dir, k) for (i, k) in enumerate(filelist) if i % self._cull_frequency == 0]
    124124
  • tests/regressiontests/cache/tests.py

    diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
    index c5349d5..aeef4b6 100644
    a b class BaseCacheTests(object):  
    408408        self.assertEqual(self.cache.get('key3'), 'sausage')
    409409        self.assertEqual(self.cache.get('key4'), 'lobster bisque')
    410410
    411     def perform_cull_test(self, initial_count, final_count):
     411    def perform_cull_test(self, initial_count, final_count, cache=None):
    412412        """This is implemented as a utility method, because only some of the backends
    413413        implement culling. The culling algorithm also varies slightly, so the final
    414414        number of entries will vary between backends"""
     415        if cache is None:
     416            cache = self.cache
     417
    415418        # Create initial cache key entries. This will overflow the cache, causing a cull
    416419        for i in range(1, initial_count):
    417             self.cache.set('cull%d' % i, 'value', 1000)
     420            cache.set('cull%d' % i, 'value', 1000)
    418421        count = 0
    419422        # Count how many keys are left in the cache.
    420423        for i in range(1, initial_count):
    421             if self.cache.has_key('cull%d' % i):
     424            if cache.has_key('cull%d' % i):
    422425                count = count + 1
    423426        self.assertEqual(count, final_count)
    424427
    class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):  
    848851    def setUp(self):
    849852        self.dirname = tempfile.mkdtemp()
    850853        self.cache = get_cache(self.backend_name, LOCATION=self.dirname, OPTIONS={'MAX_ENTRIES': 30})
     854        self.full_cull_cache = get_cache(self.backend_name,
     855                LOCATION=self.dirname,
     856                OPTIONS={'MAX_ENTRIES': 30, 'CULL_FREQUENCY': 0})
    851857        self.prefix_cache = get_cache(self.backend_name, LOCATION=self.dirname, KEY_PREFIX='cacheprefix')
    852858        self.v2_cache = get_cache(self.backend_name, LOCATION=self.dirname, VERSION=2)
    853859        self.custom_key_cache = get_cache(self.backend_name, LOCATION=self.dirname, KEY_FUNCTION=custom_key_func)
    class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):  
    879885        self.assertTrue(not os.path.exists(os.path.dirname(keypath)))
    880886        self.assertTrue(not os.path.exists(os.path.dirname(os.path.dirname(keypath))))
    881887
     888    def test_full_cull(self):
     889        self.perform_cull_test(32, 1, self.full_cull_cache)
     890
    882891    def test_cull(self):
    883892        self.perform_cull_test(50, 29)
    884893
Back to Top