package org.jgroups.blocks; import org.testng.annotations.Test; import org.jgroups.Global; import org.jgroups.util.UUID; import org.jgroups.util.Util; import java.util.Arrays; import java.util.List; /** * @author Bela Ban */ @Test(groups=Global.FUNCTIONAL,sequential=false) public class LazyRemovalCacheTest { public static void testAdd() { LazyRemovalCache<UUID, String> cache=new LazyRemovalCache<UUID, String>(); UUID uuid=UUID.randomUUID(); cache.add(uuid, "node-1"); System.out.println("cache = " + cache); assert 1 == cache.size(); String val=cache.get(uuid); assert val != null && val.equals("node-1"); cache.remove(uuid); System.out.println("cache = " + cache); } public static void testRemoveAll() { LazyRemovalCache<UUID, String> cache=new LazyRemovalCache<UUID, String>(10, 0); List<UUID> list=Arrays.asList(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()); int cnt=1; for(UUID uuid: list) cache.add(uuid, "node-" + cnt++); UUID uuid1=UUID.randomUUID(); UUID uuid2=UUID.randomUUID(); cache.add(uuid1, "foo"); cache.add(uuid2, "bar"); System.out.println("cache = " + cache); assert cache.size() == 5; System.out.println("removing " + list); cache.removeAll(list); System.out.println("cache = " + cache); assert cache.size() == 5; assert cache.get(uuid1).equals("foo"); assert cache.get(uuid2).equals("bar"); cache.removeMarkedElements(); System.out.println("cache = " + cache); assert cache.size() == 2; assert cache.get(uuid1).equals("foo"); assert cache.get(uuid2).equals("bar"); } public static void testRetainAll() { LazyRemovalCache<UUID, String> cache=new LazyRemovalCache<UUID, String>(10, 0); List<UUID> list=Arrays.asList(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()); int cnt=1; for(UUID uuid: list) cache.add(uuid, "node-" + cnt++); UUID uuid1=UUID.randomUUID(); UUID uuid2=UUID.randomUUID(); cache.add(uuid1, "foo"); cache.add(uuid2, "bar"); System.out.println("cache = " + cache); assert cache.size() == 5; List<UUID> retain=Arrays.asList(uuid1, uuid2); System.out.println("retaining " + retain); cache.retainAll(retain); System.out.println("cache = " + cache); assert cache.size() == 5; assert cache.get(uuid1).equals("foo"); assert cache.get(uuid2).equals("bar"); cache.removeMarkedElements(); System.out.println("cache = " + cache); assert cache.size() == 2; assert cache.get(uuid1).equals("foo"); assert cache.get(uuid2).equals("bar"); } public static void testRemovalOnExceedingMaxSize() { LazyRemovalCache<UUID, String> cache=new LazyRemovalCache<UUID, String>(2, 0); UUID u1=UUID.randomUUID(), u2=UUID.randomUUID(), u3=UUID.randomUUID(), u4=UUID.randomUUID(); cache.add(u1, "u1"); cache.add(u2, "u2"); assert cache.size() == 2; cache.add(u3, "u3"); cache.add(u4, "u4"); System.out.println("cache = " + cache); assert cache.size() == 4; cache.remove(u3); System.out.println("cache = " + cache); assert cache.size() == 3; cache.remove(u1); System.out.println("cache = " + cache); assert cache.size() == 2; cache.remove(u4); System.out.println("cache = " + cache); assert cache.size() == 2; cache.removeMarkedElements(); System.out.println("cache = " + cache); assert cache.size() == 1; } public static void testRemovalOnExceedingMaxSizeAndMaxTime() { LazyRemovalCache<UUID, String> cache=new LazyRemovalCache<UUID, String>(2, 1000); UUID u1=UUID.randomUUID(), u2=UUID.randomUUID(), u3=UUID.randomUUID(), u4=UUID.randomUUID(); cache.add(u1, "u1"); cache.add(u2, "u2"); assert cache.size() == 2; cache.add(u3, "u3"); cache.add(u4, "u4"); System.out.println("cache = " + cache); assert cache.size() == 4; cache.remove(u3); System.out.println("cache = " + cache); assert cache.size() == 4; cache.remove(u1); System.out.println("cache = " + cache); assert cache.size() == 4; cache.remove(u4); System.out.println("cache = " + cache); assert cache.size() == 4; cache.removeMarkedElements(); System.out.println("cache = " + cache); assert cache.size() == 4; System.out.println("sleeping for 1 sec"); Util.sleep(1100); cache.remove(u4); System.out.println("cache = " + cache); assert cache.size() == 1; } }