# -*- coding: utf-8 -*- # Copyright 2015 OpenMarket Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from twisted.internet import defer from tests import unittest from synapse.util.caches.dictionary_cache import DictionaryCache class DictCacheTestCase(unittest.TestCase): def setUp(self): self.cache = DictionaryCache("foobar") def test_simple_cache_hit_full(self): key = "test_simple_cache_hit_full" v = self.cache.get(key) self.assertEqual((False, {}), v) seq = self.cache.sequence test_value = {"test": "test_simple_cache_hit_full"} self.cache.update(seq, key, test_value, full=True) c = self.cache.get(key) self.assertEqual(test_value, c.value) def test_simple_cache_hit_partial(self): key = "test_simple_cache_hit_partial" seq = self.cache.sequence test_value = { "test": "test_simple_cache_hit_partial" } self.cache.update(seq, key, test_value, full=True) c = self.cache.get(key, ["test"]) self.assertEqual(test_value, c.value) def test_simple_cache_miss_partial(self): key = "test_simple_cache_miss_partial" seq = self.cache.sequence test_value = { "test": "test_simple_cache_miss_partial" } self.cache.update(seq, key, test_value, full=True) c = self.cache.get(key, ["test2"]) self.assertEqual({}, c.value) def test_simple_cache_hit_miss_partial(self): key = "test_simple_cache_hit_miss_partial" seq = self.cache.sequence test_value = { "test": "test_simple_cache_hit_miss_partial", "test2": "test_simple_cache_hit_miss_partial2", "test3": "test_simple_cache_hit_miss_partial3", } self.cache.update(seq, key, test_value, full=True) c = self.cache.get(key, ["test2"]) self.assertEqual({"test2": "test_simple_cache_hit_miss_partial2"}, c.value) def test_multi_insert(self): key = "test_simple_cache_hit_miss_partial" seq = self.cache.sequence test_value_1 = { "test": "test_simple_cache_hit_miss_partial", } self.cache.update(seq, key, test_value_1, full=False) seq = self.cache.sequence test_value_2 = { "test2": "test_simple_cache_hit_miss_partial2", } self.cache.update(seq, key, test_value_2, full=False) c = self.cache.get(key) self.assertEqual( { "test": "test_simple_cache_hit_miss_partial", "test2": "test_simple_cache_hit_miss_partial2", }, c.value )