tests: Add small test for util.throttle
authorKim Alvefur <zash@zash.se>
Wed, 23 Dec 2015 07:49:38 +0000 (08:49 +0100)
committerKim Alvefur <zash@zash.se>
Wed, 23 Dec 2015 07:49:38 +0000 (08:49 +0100)
tests/test.lua
tests/test_util_throttle.lua [new file with mode: 0644]

index f7fdee91308ad948054eaae0b50f60a7cb1a83f1..1666fcf5199e8de327b05db19cb78162e03e6bff 100644 (file)
@@ -21,6 +21,7 @@ function run_all_tests()
        dotest "util.stanza"
        dotest "util.sasl.scram"
        dotest "util.cache"
+       dotest "util.throttle"
 
        dosingletest("test_sasl.lua", "latin1toutf8");
        dosingletest("test_utf8.lua", "valid");
diff --git a/tests/test_util_throttle.lua b/tests/test_util_throttle.lua
new file mode 100644 (file)
index 0000000..582f499
--- /dev/null
@@ -0,0 +1,34 @@
+
+local now = 0; -- wibbly-wobbly... timey-wimey... stuff
+local function predictable_gettime()
+       return now;
+end
+local function later(n)
+       now = now + n; -- time passes at a different rate
+end
+
+local function override_gettime(throttle)
+       local i = 0;
+       repeat
+               i = i + 1;
+               local name = debug.getupvalue(throttle.update, i);
+               if name then
+                       debug.setupvalue(throttle.update, i, predictable_gettime);
+                       return throttle;
+               end
+       until not name;
+end
+
+function create(create)
+       local a = override_gettime( create(3, 10) );
+
+       assert_equal(a:poll(1), true);  -- 3 -> 2
+       assert_equal(a:poll(1), true);  -- 2 -> 1
+       assert_equal(a:poll(1), true);  -- 1 -> 0
+       assert_equal(a:poll(1), false); -- MEEP, out of credits!
+       later(1);                       -- ... what about
+       assert_equal(a:poll(1), false); -- now? - Still no!
+       later(9);                       -- Later that day
+       assert_equal(a:poll(1), true);  -- Should be back at 3 credits ... 2
+end
+