package org.infinispan.distribution; import static org.testng.AssertJUnit.assertEquals; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import org.infinispan.commands.read.GetCacheEntryCommand; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.interceptors.impl.EntryWrappingInterceptor; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.Test; @Test(groups = "functional", testName = "distribution.CacheStoppedDuringReadTest") public class CacheStoppedDuringReadTest extends MultipleCacheManagersTest { @Override protected void createCacheManagers() throws Throwable { createClusteredCaches(3, getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC)); } public void test() throws Exception { MagicKey key = new MagicKey(cache(0), cache(1)); cache(2).put(key, "value"); CyclicBarrier barrier0 = new CyclicBarrier(2); cache(0).getAdvancedCache().getAsyncInterceptorChain().addInterceptorBefore( new BlockingInterceptor<>(barrier0, GetCacheEntryCommand.class, false, false), EntryWrappingInterceptor.class); Future<Object> f = fork(() -> cache(2).get(key)); barrier0.await(10, TimeUnit.SECONDS); cache(0).stop(); barrier0.await(10, TimeUnit.SECONDS); assertEquals("value", f.get(10, TimeUnit.SECONDS)); } }