|
| 1 | +from contextlib import contextmanager |
| 2 | + |
1 | 3 | from large_image.cache_util.base import BaseCache |
2 | 4 | import pytest |
3 | 5 |
|
4 | 6 | from django_large_image import tilesource |
5 | 7 | from django_large_image.cache import DjangoCache |
6 | 8 |
|
7 | 9 |
|
8 | | -@pytest.fixture |
9 | | -def cache_miss_counter(): |
| 10 | +@contextmanager |
| 11 | +def cache_tracker(): |
| 12 | + cache, _ = DjangoCache.getCache() |
| 13 | + cache.clear() |
| 14 | + |
10 | 15 | class Counter: |
11 | 16 | def __init__(self): |
12 | | - self.count = 0 |
| 17 | + self.reset() |
| 18 | + self.cache = cache |
13 | 19 |
|
14 | 20 | def reset(self): |
15 | 21 | self.count = 0 |
| 22 | + self.keys = set() |
16 | 23 |
|
17 | 24 | counter = Counter() |
18 | 25 |
|
19 | | - def missing(*args, **kwargs): |
| 26 | + def missing(self, key, *args, **kwargs): |
20 | 27 | counter.count += 1 |
21 | | - BaseCache.__missing__(*args, **kwargs) |
| 28 | + counter.keys.add(key) |
| 29 | + BaseCache.__missing__(self, key, *args, **kwargs) |
22 | 30 |
|
23 | 31 | original = DjangoCache.__missing__ |
24 | 32 | DjangoCache.__missing__ = missing |
25 | 33 | yield counter |
26 | 34 | DjangoCache.__missing__ = original |
27 | 35 |
|
28 | 36 |
|
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): |
30 | 47 | 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