aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_util_cache.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2015-12-27 12:29:28 +0100
committerKim Alvefur <zash@zash.se>2015-12-27 12:29:28 +0100
commit0664d7ebf65a3ca356ec80ad4f706919ac745300 (patch)
tree50c569b3a43e2bf21301dba4606a02940a6ed127 /tests/test_util_cache.lua
parentb3d8c070f940572d53e8bea734a7abef38411c56 (diff)
parentb50935a87c03246fac1541b275da4464a5b63b3b (diff)
downloadprosody-0664d7ebf65a3ca356ec80ad4f706919ac745300.tar.gz
prosody-0664d7ebf65a3ca356ec80ad4f706919ac745300.zip
Merge 0.10->trunk
Diffstat (limited to 'tests/test_util_cache.lua')
-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