package org.infinispan.api;
import static org.infinispan.context.Flag.CACHE_MODE_LOCAL;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import org.infinispan.AdvancedCache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.distribution.MagicKey;
import org.infinispan.test.MultipleCacheManagersTest;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "api.MixedModeTest")
public class MixedModeTest extends MultipleCacheManagersTest {
protected void createCacheManagers() throws Throwable {
ConfigurationBuilder replSync = getDefaultClusteredCacheConfig(CacheMode.REPL_SYNC, false);
ConfigurationBuilder replAsync = getDefaultClusteredCacheConfig(CacheMode.REPL_ASYNC, false);
ConfigurationBuilder invalSync = getDefaultClusteredCacheConfig(CacheMode.INVALIDATION_SYNC, false);
ConfigurationBuilder invalAsync = getDefaultClusteredCacheConfig(CacheMode.INVALIDATION_ASYNC, false);
ConfigurationBuilder local = getDefaultClusteredCacheConfig(CacheMode.LOCAL, false);
createClusteredCaches(2, "replSync", replSync);
defineConfigurationOnAllManagers("replAsync", replAsync);
waitForClusterToForm("replAsync");
defineConfigurationOnAllManagers("invalSync", invalSync);
waitForClusterToForm("invalSync");
defineConfigurationOnAllManagers("invalAsync", invalAsync);
waitForClusterToForm("invalAsync");
defineConfigurationOnAllManagers("local", local);
}
public void testMixedMode() {
AdvancedCache replSyncCache1, replSyncCache2;
AdvancedCache replAsyncCache1, replAsyncCache2;
AdvancedCache invalAsyncCache1, invalAsyncCache2;
AdvancedCache invalSyncCache1, invalSyncCache2;
AdvancedCache localCache1, localCache2;
replSyncCache1 = cache(0, "replSync").getAdvancedCache();
replSyncCache2 = cache(1, "replSync").getAdvancedCache();
replAsyncCache1 = cache(0, "replAsync").getAdvancedCache();
replAsyncCache2 = cache(1, "replAsync").getAdvancedCache();
invalSyncCache1 = cache(0, "invalSync").getAdvancedCache();
invalSyncCache2 = cache(1, "invalSync").getAdvancedCache();
invalAsyncCache1 = cache(0, "invalAsync").getAdvancedCache();
invalAsyncCache2 = cache(1, "invalAsync").getAdvancedCache();
localCache1 = cache(0, "local").getAdvancedCache();
localCache2 = cache(1, "local").getAdvancedCache();
// With the default SyncConsistentHashFactory, the same key will work for all caches
MagicKey key = new MagicKey("k", replAsyncCache1);
invalSyncCache2.withFlags(CACHE_MODE_LOCAL).put(key, "v");
assertEquals("v", invalSyncCache2.get(key));
assertNull(invalSyncCache1.get(key));
invalAsyncCache2.withFlags(CACHE_MODE_LOCAL).put(key, "v");
assertEquals("v", invalAsyncCache2.get(key));
assertNull(invalAsyncCache1.get(key));
replListener(replAsyncCache2).expectAny();
replListener(invalAsyncCache2).expectAny();
replSyncCache1.put(key, "replSync");
replAsyncCache1.put(key, "replAsync");
invalSyncCache1.put(key, "invalSync");
invalAsyncCache1.put(key, "invalAsync");
localCache1.put(key, "local");
replListener(replAsyncCache2).waitForRpc();
replListener(invalAsyncCache2).waitForRpc();
assertEquals("replSync", replSyncCache1.get(key));
assertEquals("replSync", replSyncCache2.get(key));
assertEquals("replAsync", replAsyncCache1.get(key));
assertEquals("replAsync", replAsyncCache2.get(key));
assertEquals("invalSync", invalSyncCache1.get(key));
assertNull(invalSyncCache2.get(key));
assertEquals("invalAsync", invalAsyncCache1.get(key));
assertNull(invalAsyncCache2.get(key));
assertEquals("local", localCache1.get(key));
assertNull(localCache2.get(key));
}
}