package org.jgroups.tests;
import org.jgroups.Global;
import org.jgroups.util.ExpiryCache;
import org.jgroups.util.Util;
import org.testng.annotations.Test;
/**
* @author Bela Ban
* @since 3.3
*/
@Test(groups=Global.FUNCTIONAL,sequential=false)
public class ExpiryCacheTest {
public void testAdd() {
ExpiryCache<String> cache=new ExpiryCache<>(10000);
boolean added=add(cache, "Bela");
assert added;
added=add(cache, "Michelle");
assert added;
added=add(cache, "Nicole");
assert added;
System.out.println("cache = " + cache);
assert cache.size() == 3;
added=add(cache, "Bela");
assert !added;
assert cache.size() == 3;
}
public void testReplaceExpiredElement() {
ExpiryCache<String> cache=new ExpiryCache<>(200);
add(cache, "Bela");
for(int i=0; i < 20; i++) {
if(cache.hasExpired("Bela"))
break;
Util.sleep(500);
}
assert cache.hasExpired("Bela");
boolean added=cache.addIfAbsentOrExpired("Bela");
assert added : "cache is " + cache;
}
public void testRemovedExpiredElements() {
ExpiryCache<String> cache=new ExpiryCache<>(200);
add(cache, "Bela");
add(cache, "Michelle");
add(cache, "Nicole");
assert cache.size() == 3;
for(int i=0; i < 20; i++) {
if(cache.removeExpiredElements() > 0 && cache.size() == 0)
break;
Util.sleep(500);
}
assert cache.size() == 0;
}
protected static <T> boolean add(ExpiryCache<T> cache, T key) {
boolean added=cache.addIfAbsentOrExpired(key);
System.out.println((added? "added " : "didn't add ") + key);
return added;
}
}