package org.infinispan.it.compatibility;
import static org.testng.AssertJUnit.assertArrayEquals;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import org.infinispan.client.hotrod.Flag;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.VersionedValue;
import org.infinispan.commons.equivalence.ByteArrayEquivalence;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.test.AbstractInfinispanTest;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Tests embedded and Hot Rod compatibility in a replicated clustered environment using byte array values.
*
* @author Martin Gencur
* @author Pedro Ruivo
* @since 6.0
*/
@Test(groups = "functional", testName = "it.compatibility.ByteArrayValueReplEmbeddedHotRodTest")
public class ByteArrayValueReplEmbeddedHotRodTest extends AbstractInfinispanTest {
CompatibilityCacheFactory<Object, Object> cacheFactory1;
CompatibilityCacheFactory<Object, Object> cacheFactory2;
public void testHotRodPutEmbeddedGet() throws Exception {
final String key = "4";
final byte[] value = "v1".getBytes();
// 1. Put with HotRod
RemoteCache<Object, Object> remote = cacheFactory1.getHotRodCache();
assertNull(remote.withFlags(Flag.FORCE_RETURN_VALUE).put(key, value));
// 2. Get with Embedded
assertArrayEquals(value, (byte[]) cacheFactory2.getEmbeddedCache().get(key));
}
public void testHotRodReplace() throws Exception {
final String key = "5";
final byte[] value1 = "v1".getBytes();
final byte[] value2 = "v2".getBytes();
// 1. Put with HotRod
RemoteCache<Object, Object> remote = cacheFactory1.getHotRodCache();
assertNull(remote.withFlags(Flag.FORCE_RETURN_VALUE).put(key, value1));
// 2. Replace with HotRod
VersionedValue versioned = cacheFactory1.getHotRodCache().getVersioned(key);
assertTrue(cacheFactory1.getHotRodCache().replaceWithVersion(key, value2, versioned.getVersion()));
}
public void testHotRodRemove() throws Exception {
final String key = "7";
final byte[] value = "v1".getBytes();
// 1. Put with HotRod
RemoteCache<Object, Object> remote = cacheFactory1.getHotRodCache();
assertNull(remote.withFlags(Flag.FORCE_RETURN_VALUE).put(key, value));
// 2. Remove with HotRod
VersionedValue versioned = cacheFactory1.getHotRodCache().getVersioned(key);
assertTrue(cacheFactory1.getHotRodCache().removeWithVersion(key, versioned.getVersion()));
}
//This test can fail only if there's a marshaller specified for EmbeddedTypeConverter
public void testEmbeddedPutHotRodGet() throws Exception {
final String key = "8";
final byte[] value = "v1".getBytes();
// 1. Put with Embedded
assertNull(cacheFactory2.getEmbeddedCache().put(key, value));
// 2. Get with HotRod
assertArrayEquals(value, (byte[]) cacheFactory1.getHotRodCache().get(key));
}
@BeforeClass
protected void setup() throws Exception {
cacheFactory1 = new CompatibilityCacheFactory<Object, Object>(CacheMode.REPL_SYNC)
.valueEquivalence(ByteArrayEquivalence.INSTANCE).setup();
cacheFactory2 = new CompatibilityCacheFactory<Object, Object>(CacheMode.REPL_SYNC)
.valueEquivalence(ByteArrayEquivalence.INSTANCE)
.setup(cacheFactory1.getHotRodPort(), 100);
}
@AfterClass
protected void teardown() {
CompatibilityCacheFactory.killCacheFactories(cacheFactory1, cacheFactory2);
}
}