Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Combine the two sets of DeferredCache tests
Browse files Browse the repository at this point in the history
  • Loading branch information
richvdh committed Oct 14, 2020
1 parent 4182bb8 commit 470dedd
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 74 deletions.
72 changes: 0 additions & 72 deletions tests/storage/test__base.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,83 +20,11 @@
from twisted.internet import defer

from synapse.util.async_helpers import ObservableDeferred
from synapse.util.caches.deferred_cache import DeferredCache
from synapse.util.caches.descriptors import cached

from tests import unittest


class DeferredCacheTestCase(unittest.HomeserverTestCase):
def prepare(self, reactor, clock, homeserver):
self.cache = DeferredCache("test")

def test_empty(self):
failed = False
try:
self.cache.get("foo")
except KeyError:
failed = True

self.assertTrue(failed)

def test_hit(self):
self.cache.prefill("foo", 123)

self.assertEquals(self.cache.get("foo"), 123)

def test_invalidate(self):
self.cache.prefill(("foo",), 123)
self.cache.invalidate(("foo",))

failed = False
try:
self.cache.get(("foo",))
except KeyError:
failed = True

self.assertTrue(failed)

def test_eviction(self):
cache = DeferredCache("test", max_entries=2)

cache.prefill(1, "one")
cache.prefill(2, "two")
cache.prefill(3, "three") # 1 will be evicted

failed = False
try:
cache.get(1)
except KeyError:
failed = True

self.assertTrue(failed)

cache.get(2)
cache.get(3)

def test_eviction_lru(self):
cache = DeferredCache("test", max_entries=2)

cache.prefill(1, "one")
cache.prefill(2, "two")

# Now access 1 again, thus causing 2 to be least-recently used
cache.get(1)

cache.prefill(3, "three")

failed = False
try:
cache.get(2)
except KeyError:
failed = True

self.assertTrue(failed)

cache.get(1)
cache.get(3)


class CacheDecoratorTestCase(unittest.HomeserverTestCase):
@defer.inlineCallbacks
def test_passthrough(self):
Expand Down
77 changes: 75 additions & 2 deletions tests/util/caches/test_deferred_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,41 @@

from twisted.internet import defer

import synapse.util.caches.deferred_cache
from synapse.util.caches.deferred_cache import DeferredCache


class DeferredCacheTestCase(unittest.TestCase):
def test_empty(self):
cache = DeferredCache("test")
failed = False
try:
cache.get("foo")
except KeyError:
failed = True

self.assertTrue(failed)

def test_hit(self):
cache = DeferredCache("test")
cache.prefill("foo", 123)

self.assertEquals(cache.get("foo"), 123)

def test_invalidate(self):
cache = DeferredCache("test")
cache.prefill(("foo",), 123)
cache.invalidate(("foo",))

failed = False
try:
cache.get(("foo",))
except KeyError:
failed = True

self.assertTrue(failed)

def test_invalidate_all(self):
cache = synapse.util.caches.deferred_cache.DeferredCache("testcache")
cache = DeferredCache("testcache")

callback_record = [False, False]

Expand Down Expand Up @@ -62,3 +91,47 @@ def record_callback(idx):
# letting the other lookup complete should do nothing
d1.callback("result1")
self.assertIsNone(cache.get("key1", None))

def test_eviction(self):
cache = DeferredCache(
"test", max_entries=2, apply_cache_factor_from_config=False
)

cache.prefill(1, "one")
cache.prefill(2, "two")
cache.prefill(3, "three") # 1 will be evicted

failed = False
try:
cache.get(1)
except KeyError:
failed = True

self.assertTrue(failed)

cache.get(2)
cache.get(3)

def test_eviction_lru(self):
cache = DeferredCache(
"test", max_entries=2, apply_cache_factor_from_config=False
)

cache.prefill(1, "one")
cache.prefill(2, "two")

# Now access 1 again, thus causing 2 to be least-recently used
cache.get(1)

cache.prefill(3, "three")

failed = False
try:
cache.get(2)
except KeyError:
failed = True

self.assertTrue(failed)

cache.get(1)
cache.get(3)

0 comments on commit 470dedd

Please sign in to comment.