/*
* Copyright 2011 Red Hat, Inc. and/or its affiliates.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
package org.infinispan.client.hotrod;
import org.infinispan.client.hotrod.test.MultiHotRodServersTest;
import org.infinispan.commands.write.PutKeyValueCommand;
import org.infinispan.config.Configuration;
import org.infinispan.test.ReplListener;
import org.testng.annotations.Test;
import java.lang.reflect.Method;
import static org.infinispan.test.TestingUtil.v;
import static org.testng.AssertJUnit.assertEquals;
@Test(groups = "functional", testName = "client.hotrod.HotRodAsyncReplicationTest")
public class HotRodAsyncReplicationTest extends MultiHotRodServersTest {
@Override
protected void createCacheManagers() throws Throwable {
Configuration cfg = new Configuration().fluent()
.clustering()
.mode(Configuration.CacheMode.REPL_ASYNC)
.async()
.replQueueInterval(1000L)
.useReplQueue(true)
.eviction()
.maxEntries(3)
.build();
createHotRodServers(2, cfg);
}
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;
}
}