75 lines
2.2 KiB
Lua
75 lines
2.2 KiB
Lua
local createLibTest = require('/apis/libtest');
|
|
local createRouter = require('/apis/librouter');
|
|
|
|
local testlib = createLibTest({ ... });
|
|
|
|
local function makeClock()
|
|
local now = 0;
|
|
return function() return now; end, function(delta) now = now + delta; end;
|
|
end
|
|
|
|
testlib.test('register accepts a new label', function()
|
|
local now, _ = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
local ok, err = router.register('alice', 5);
|
|
testlib.assertEquals(ok, true);
|
|
testlib.assertEquals(err, nil);
|
|
testlib.assertEquals(router.resolve('alice'), 5);
|
|
end);
|
|
|
|
testlib.test('register rejects a duplicate label from a different id', function()
|
|
local now, _ = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
router.register('alice', 5);
|
|
local ok, err = router.register('alice', 7);
|
|
testlib.assertEquals(ok, false);
|
|
testlib.assertEquals(err, 'duplicate label');
|
|
testlib.assertEquals(router.resolve('alice'), 5);
|
|
end);
|
|
|
|
testlib.test('register refreshes a label from the same id', function()
|
|
local now, advance = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
router.register('alice', 5);
|
|
advance(5);
|
|
local ok = router.register('alice', 5);
|
|
testlib.assertEquals(ok, true);
|
|
|
|
advance(8);
|
|
testlib.assertEquals(router.resolve('alice'), 5);
|
|
end);
|
|
|
|
testlib.test('resolve returns nil after TTL expiry', function()
|
|
local now, advance = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
router.register('alice', 5);
|
|
advance(11);
|
|
testlib.assertEquals(router.resolve('alice'), nil);
|
|
end);
|
|
|
|
testlib.test('expired entries can be re-registered by a different id', function()
|
|
local now, advance = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
router.register('alice', 5);
|
|
advance(11);
|
|
local ok = router.register('alice', 7);
|
|
testlib.assertEquals(ok, true);
|
|
testlib.assertEquals(router.resolve('alice'), 7);
|
|
end);
|
|
|
|
testlib.test('forget removes a label', function()
|
|
local now, _ = makeClock();
|
|
local router = createRouter({ now = now, ttl = 10 });
|
|
|
|
router.register('alice', 5);
|
|
router.forget('alice');
|
|
testlib.assertEquals(router.resolve('alice'), nil);
|
|
end);
|
|
|
|
testlib.run();
|