package org.infinispan.commands;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.util.Collections;
import java.util.concurrent.Future;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.context.Flag;
import org.infinispan.distribution.MagicKey;
import org.infinispan.test.MultipleCacheManagersTest;
import org.infinispan.test.fwk.CleanupAfterMethod;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "commands.PutMapCommandNonTxTest")
@CleanupAfterMethod
public class PutMapCommandNonTxTest extends MultipleCacheManagersTest {
@Override
protected void createCacheManagers() {
ConfigurationBuilder dcc = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false);
dcc.clustering().hash().numOwners(3).l1().disable();
createCluster(dcc, 3);
waitForClusterToForm();
}
public void testPutMapCommandSyncOnPrimaryOwner() throws Exception {
testPutMapCommand(true, true);
}
public void testPutMapCommandAsyncOnPrimaryOwner() throws Exception {
testPutMapCommand(false, true);
}
public void testPutMapCommandSyncOnBackupOwner() throws Exception {
testPutMapCommand(true, false);
}
public void testPutMapCommandAsyncOnBackupOwner() throws Exception {
testPutMapCommand(false, false);
}
private void testPutMapCommand(boolean sync, boolean putOnPrimary) throws Exception {
MagicKey key = new MagicKey("key", cache(0));
if (sync) {
cache(putOnPrimary ? 0 : 1).putAll(Collections.singletonMap(key, "value"));
} else {
Future<Void> f = cache(putOnPrimary ? 0 : 1).putAllAsync(Collections.singletonMap(key, "value"));
assertNotNull(f);
assertNull(f.get());
assertTrue(f.isDone());
assertFalse(f.isCancelled());
}
assertEquals("value", cache(0).getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).get(key));
assertEquals("value", cache(1).getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).get(key));
assertEquals("value", cache(2).getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).get(key));
}
}