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();