package org.infinispan.stream;
import static org.testng.AssertJUnit.assertEquals;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.container.entries.CacheEntry;
import org.testng.annotations.Test;
/**
* Base class to test if evicted entries are not returned via stream
*
* @author wburns
* @since 8.0
*/
@Test(groups = "functional", testName = "stream.BaseStreamIteratorEvictionTest")
public abstract class BaseStreamIteratorEvictionTest extends BaseSetupStreamIteratorTest {
public BaseStreamIteratorEvictionTest(boolean tx, CacheMode mode) {
super(tx, mode);
}
public void testExpiredEntryNotReturned() throws InterruptedException {
Cache<Object, String> cache = cache(0, CACHE_NAME);
// First put some values in there
Map<Object, String> valuesInserted = new LinkedHashMap<Object, String>();
for (int i = 0; i < 5; ++i) {
Object key = i;
String value = key + " stay in cache";
cache.put(key, value);
valuesInserted.put(key, value);
}
int expectedTime = 2;
// Now we insert a value that will expire in 2 seconds
cache.put("expired", "this shouldn't be returned", expectedTime, TimeUnit.SECONDS);
// We have to wait the time limit to make sure it is evicted before proceeding
Thread.sleep(TimeUnit.SECONDS.toMillis(expectedTime) + 50);
Map<Object, String> results;
try (Stream<CacheEntry<Object, String>> stream = cache.getAdvancedCache().cacheEntrySet().stream()) {
results = mapFromStream(stream);
}
assertEquals(valuesInserted, results);
}
}