aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2015-12-22 20:10:07 +0000
committerMatthew Wild <mwild1@gmail.com>2015-12-22 20:10:07 +0000
commit7e1480d62e00d5260e39406fde27ae854e11ab74 (patch)
treef783300ed6da959b1e3af4e37002c43375c98fbc /tests
parent32e49dccd82a8e392cc20a33881644b435dc269d (diff)
downloadprosody-7e1480d62e00d5260e39406fde27ae854e11ab74.tar.gz
prosody-7e1480d62e00d5260e39406fde27ae854e11ab74.zip
util.cache (and tests): Call on_evict after insertion of the new key, so inside on_evict we can be more certain about the current state of the cache (i.e. full, new item added, old item removed)
Diffstat (limited to 'tests')
-rw-r--r--tests/test_util_cache.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/test_util_cache.lua b/tests/test_util_cache.lua
index a174eea7..72cb5a85 100644
--- a/tests/test_util_cache.lua
+++ b/tests/test_util_cache.lua
@@ -170,5 +170,60 @@ function new(new)
end
assert_equal(i, 4);
+ local evicted_key, evicted_value;
+ local c = new(3, function (_key, _value)
+ evicted_key, evicted_value = _key, _value;
+ end);
+ local function set(k, v, should_evict_key, should_evict_value)
+ evicted_key, evicted_value = nil, nil;
+ c:set(k, v);
+ assert_equal(evicted_key, should_evict_key);
+ assert_equal(evicted_value, should_evict_value);
+ end
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+
+ set("b", 2)
+ set("c", 3)
+ set("b", 2)
+ set("d", 4, "a", 1)
+ set("e", 5, "c", 3)
+
+
+ local evicted_key, evicted_value;
+ local c3 = new(1, function (_key, _value, c3)
+ evicted_key, evicted_value = _key, _value;
+ if _key == "a" then
+ -- Put it back in...
+ -- Check that the newest key/value was set before on_evict was called
+ assert_equal(c3:get("b"), 2);
+ -- Sanity check for what we're evicting
+ assert_equal(_key, "a");
+ assert_equal(_value, 1);
+ -- Re-insert the evicted key (causes this evict function to run again with "b",2)
+ c3:set(_key, _value)
+ assert_equal(c3:get(_key), _value)
+ end
+ end);
+ local function set(k, v, should_evict_key, should_evict_value)
+ evicted_key, evicted_value = nil, nil;
+ c3:set(k, v);
+ assert_equal(evicted_key, should_evict_key);
+ assert_equal(evicted_value, should_evict_value);
+ end
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+ set("a", 1)
+ -- The evict handler re-inserts "a"->1, so "b" gets evicted:
+ set("b", 2, "b", 2)
+ -- Check the final state is what we expect
+ assert_equal(c3:get("a"), 1);
+ assert_equal(c3:get("b"), nil);
+ assert_equal(c3:count(), 1);
end