Use a latch instead of a sleep. More deterministic
diff --git a/src/test/java/org/apache/geronimo/jcache/simple/tck/ExpiryListenerTest.java b/src/test/java/org/apache/geronimo/jcache/simple/tck/ExpiryListenerTest.java
index 2045437..ded8f40 100644
--- a/src/test/java/org/apache/geronimo/jcache/simple/tck/ExpiryListenerTest.java
+++ b/src/test/java/org/apache/geronimo/jcache/simple/tck/ExpiryListenerTest.java
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.cache.Cache;
@@ -54,32 +55,42 @@
new Properties() {{
setProperty("evictionPause", "2");
}});
- final CacheEntryExpiredListenerImpl listener = new CacheEntryExpiredListenerImpl();
+
+ final CountDownLatch latch = new CountDownLatch(1);
+ final CacheEntryExpiredListenerImpl listener = new CacheEntryExpiredListenerImpl(latch);
cacheManager.createCache("default", new MutableConfiguration<String, String>()
.setExpiryPolicyFactory(new FactoryBuilder.SingletonFactory<ExpiryPolicy>(
new CreatedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, 2))))
- .addCacheEntryListenerConfiguration(new MutableCacheEntryListenerConfiguration<String, String>(
+ .addCacheEntryListenerConfiguration(new MutableCacheEntryListenerConfiguration<>(
FactoryBuilder.factoryOf(listener),
null, false, false
)));
final Cache<String, String> cache = cacheManager.getCache("default");
assertFalse(cache.containsKey("foo"));
cache.put("foo", "bar");
- Thread.sleep(20);
+ latch.await(1, TimeUnit.MINUTES);
assertEquals(1, listener.events.size());
cachingProvider.close();
}
private static class CacheEntryExpiredListenerImpl implements CacheEntryExpiredListener<String, String>, Serializable {
+
private final Collection<CacheEntryEvent<? extends String, ? extends String>> events =
new ArrayList<CacheEntryEvent<? extends String, ? extends String>>();
+ private CountDownLatch latch;
+
+ public CacheEntryExpiredListenerImpl(final CountDownLatch latch) {
+ this.latch = latch;
+ }
+
@Override
public void onExpired(final Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents)
throws CacheEntryListenerException {
for (final CacheEntryEvent<? extends String, ? extends String> cacheEntryEvent : cacheEntryEvents) {
events.add(cacheEntryEvent);
}
+ latch.countDown();
}
}
}