cc-libs/tests/router.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();