Skip to content

Commit 188ce5f

Browse files
committed
Improve cache testing
1 parent 3666b66 commit 188ce5f

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

django_large_image/cache.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
class DjangoCache(BaseCache):
1111
"""Use Django cache as the backing cache for large-image."""
1212

13-
def __init__(self, cache, getsizeof=None):
13+
def __init__(self, cache, alias, getsizeof=None):
1414
super().__init__(0, getsizeof=getsizeof)
1515
self._django_cache = cache
16+
self._alias = alias
1617

1718
def __repr__(self): # pragma: no cover
18-
return f'DjangoCache<{repr(self._django_cache._alias)}>'
19+
return f'DjangoCache<{repr(self._alias)}>'
1920

2021
def __iter__(self): # pragma: no cover
2122
# return invalid iter
@@ -65,8 +66,8 @@ def getCache(): # noqa: N802
6566
try:
6667
name = getattr(settings, 'LARGE_IMAGE_CACHE_NAME', 'default')
6768
dajngo_cache = caches[name]
68-
except ImproperlyConfigured:
69+
except ImproperlyConfigured: # pragma: no cover
6970
raise TileCacheConfigurationError
7071
cache_lock = threading.Lock()
71-
cache = DjangoCache(dajngo_cache)
72+
cache = DjangoCache(dajngo_cache, alias=name)
7273
return cache, cache_lock
Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,57 @@
1+
from contextlib import contextmanager
2+
13
from large_image.cache_util.base import BaseCache
24
import pytest
35

46
from django_large_image import tilesource
57
from django_large_image.cache import DjangoCache
68

79

8-
@pytest.fixture
9-
def cache_miss_counter():
10+
@contextmanager
11+
def cache_tracker():
12+
cache, _ = DjangoCache.getCache()
13+
cache.clear()
14+
1015
class Counter:
1116
def __init__(self):
12-
self.count = 0
17+
self.reset()
18+
self.cache = cache
1319

1420
def reset(self):
1521
self.count = 0
22+
self.keys = set()
1623

1724
counter = Counter()
1825

19-
def missing(*args, **kwargs):
26+
def missing(self, key, *args, **kwargs):
2027
counter.count += 1
21-
BaseCache.__missing__(*args, **kwargs)
28+
counter.keys.add(key)
29+
BaseCache.__missing__(self, key, *args, **kwargs)
2230

2331
original = DjangoCache.__missing__
2432
DjangoCache.__missing__ = missing
2533
yield counter
2634
DjangoCache.__missing__ = original
2735

2836

29-
def test_tile(geotiff_path, cache_miss_counter):
37+
def test_cache_tile(geotiff_path):
38+
source = tilesource.get_tilesource_from_path(geotiff_path)
39+
with cache_tracker() as tracker:
40+
_ = source.getTile(0, 0, 0, encoding='PNG')
41+
assert tracker.count == 1
42+
_ = source.getTile(0, 0, 0, encoding='PNG')
43+
assert tracker.count == 1
44+
45+
46+
def test_cache_access(geotiff_path):
3047
source = tilesource.get_tilesource_from_path(geotiff_path)
31-
cache_miss_counter.reset()
32-
# Check size of cache
33-
_ = source.getTile(0, 0, 0, encoding='PNG')
34-
assert cache_miss_counter.count == 1
35-
_ = source.getTile(0, 0, 0, encoding='PNG')
36-
assert cache_miss_counter.count == 1
48+
with cache_tracker() as tracker:
49+
_ = source.getTile(0, 0, 0, encoding='PNG')
50+
assert tracker.count == 1
51+
assert all([k in tracker.cache for k in tracker.keys])
52+
for k in tracker.keys:
53+
del tracker.cache[k]
54+
assert all([k not in tracker.cache for k in tracker.keys])
55+
_ = source.getTile(0, 0, 0, encoding='PNG')
56+
assert tracker.count == 2
57+
assert len(tracker.keys) == 1

0 commit comments

Comments
 (0)