package org.infinispan.client.hotrod;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration;
import static org.infinispan.test.TestingUtil.v;
import static org.testng.AssertJUnit.assertEquals;
import java.lang.reflect.Method;
import org.infinispan.client.hotrod.test.MultiHotRodServersTest;
import org.infinispan.commands.write.PutKeyValueCommand;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.test.ReplListener;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "client.hotrod.HotRodAsyncReplicationTest")
public class HotRodAsyncReplicationTest extends MultiHotRodServersTest {
@Override
protected void createCacheManagers() throws Throwable {
ConfigurationBuilder builder = hotRodCacheConfiguration(
getDefaultClusteredCacheConfig(CacheMode.REPL_ASYNC, false));
builder.eviction().maxEntries(3);
createHotRodServers(2, builder);
}
public void testPutKeyValue(Method m) {
final RemoteCache<Object, Object> remoteCache0 = client(0).getCache();
final RemoteCache<Object, Object> remoteCache1 = client(1).getCache();
ReplListener replList0 = getReplListener(0);
ReplListener replList1 = getReplListener(1);
replList0.expect(PutKeyValueCommand.class);
replList1.expect(PutKeyValueCommand.class);
final String v1 = v(m);
remoteCache0.put(1, v1);
replList0.waitForRpc();
replList1.waitForRpc();
assertEquals(v1, remoteCache1.get(1));
assertEquals(v1, remoteCache1.get(1)); // Called twice to cover all round robin options
assertEquals(v1, remoteCache0.get(1));
assertEquals(v1, remoteCache0.get(1)); // Called twice to cover all round robin options
}
private ReplListener getReplListener(int cacheIndex) {
ReplListener replList = listeners.get(cache(cacheIndex));
if (replList == null)
replList = new ReplListener(cache(cacheIndex), true, true);
else
replList.reconfigureListener(true, true);
return replList;
}
}