protected void updateSizeMetric() { statistics.size.set(size()); }
protected void updateSizeMetric() { statistics.size.set(size()); }
@Test public void testTTL() throws InterruptedException { Cache<String, String> cache = new Cache<String, String>(1, new Computable<String, String>() { @Override public String compute(String s) { return s.toUpperCase(); } }); cache.get("foo", true); Thread.sleep(500); cache.get("bar"); Thread.sleep(490); Assert.assertEquals(2, cache.size()); Thread.sleep(500); Assert.assertEquals(1, cache.size()); Thread.sleep(20); Assert.assertEquals(0, cache.size()); }
@Test public void sizeLimitedCacheTest() throws InterruptedException { Cache<String, String> cache = new SizeLimitedCache<String, String>(1, 1, new Computable<String, String>() { @Override public String compute(String s) { return s.toUpperCase(); } }); Assert.assertEquals(0, cache.size()); cache.get("foo1"); Assert.assertEquals(1, cache.size()); cache.get("foo2"); Assert.assertEquals(1, cache.size()); cache.get("foo3"); Assert.assertEquals(1, cache.size()); cache.get("foo4"); Assert.assertEquals(1, cache.size()); }
@Test public void outdated_test() throws InterruptedException { final Cache<String, String> cache = new Cache<String, String>(1, new Computable<String, String>() { AtomicInteger counter = new AtomicInteger(); @Override public String compute(String s) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return s + "_" + counter.getAndIncrement(); } }).allowOutdated(); Assert.assertEquals("foo_0", cache.get("foo")); Assert.assertEquals(1, cache.size()); Thread.sleep(1200); final CountDownLatch latch = new CountDownLatch(1); new Thread(new Runnable() { @Override public void run() { Assert.assertEquals("foo_1", cache.get("foo")); latch.countDown(); } }).start(); Thread.sleep(100); Assert.assertEquals("foo_0", cache.get("foo")); latch.await(); }
@Test public void removeOldestTest() throws InterruptedException { Cache<String, String> cache = new Cache<String, String>(1, new Computable<String, String>() { @Override public String compute(String s) { return s.toUpperCase(); } }) { int i = 1; @Override public void onRemoveItem(String s, String s2) { Assert.assertEquals("foo" + (i++), s); } }; cache.get("foo1"); cache.get("foo2"); cache.get("foo3"); Assert.assertEquals(3, cache.size()); cache.removeOldest(); Assert.assertEquals(2, cache.size()); cache.removeOldest(); Assert.assertEquals(1, cache.size()); cache.removeOldest(); Assert.assertEquals(0, cache.size()); }
@Test public void destroy_test() throws InterruptedException { System.gc(); Cache<String, String> cache = new Cache<String, String>(1, new Computable<String, String>() { @Override public String compute(String s) { return s.toUpperCase(); } }); cache.get("foo"); Assert.assertEquals(1, cache.size()); Thread.sleep(1020); Assert.assertEquals(0, cache.size()); Assert.assertEquals(1, CacheCleaner.size()); cache.get("foo"); Assert.assertEquals(1, cache.size()); cache.destroy(); Assert.assertEquals(0, cache.size()); Assert.assertEquals(true, cache.isDestroyed()); Assert.assertEquals(1, CacheCleaner.size()); Thread.sleep(1020); Assert.assertEquals(0, CacheCleaner.size()); }