package org.infinispan.it.compatibility;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.io.IOException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.it.compatibility.EmbeddedRestMemcachedHotRodTest.SpyMemcachedCompatibleMarshaller;
import org.infinispan.test.AbstractInfinispanTest;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Tests embedded and Memcached compatibility in a distributed
* clustered environment, using SpyMemcachedCompatibleMarshaller.
*
* @author Martin Gencur
* @since 6.0
*/
@Test(groups = "functional", testName = "it.compatibility.DistMemcachedEmbeddedTest")
public class DistMemcachedEmbeddedTest extends AbstractInfinispanTest {
private final int numOwners = 1;
//make sure the number of entries is big enough so that at least on entry
//is stored on non-local node to the Memcached client
private final int numEntries = 100;
private final String cacheName = "memcachedCache";
private CompatibilityCacheFactory<String, Object> cacheFactory1;
private CompatibilityCacheFactory<String, Object> cacheFactory2;
@BeforeClass
protected void setup() throws Exception {
cacheFactory1 = new CompatibilityCacheFactory<String, Object>(cacheName, new SpyMemcachedCompatibleMarshaller(), CacheMode.DIST_SYNC, numOwners).setup();
cacheFactory2 = new CompatibilityCacheFactory<String, Object>(cacheName, new SpyMemcachedCompatibleMarshaller(), CacheMode.DIST_SYNC, numOwners)
.setup(cacheFactory1.getMemcachedPort(), 100);
}
@AfterClass
protected void teardown() {
CompatibilityCacheFactory.killCacheFactories(cacheFactory1, cacheFactory2);
}
public void testMemcachedPutEmbeddedGet() throws Exception {
// 1. Put with Memcached
for (int i=0; i != numEntries; i++) {
Future<Boolean> f = cacheFactory2.getMemcachedClient().set("k" + i, 0, "v" + i);
assertTrue(f.get(60, TimeUnit.SECONDS));
}
// 2. Get with Embedded from a different node
for (int i=0; i != numEntries; i++) {
assertEquals("v" + i, cacheFactory1.getEmbeddedCache().get("k" + i));
cacheFactory1.getEmbeddedCache().remove("k" + i);
}
}
public void testEmbeddedPutMemcachedGet() throws IOException {
// 1. Put with Embedded
for (int i=0; i != numEntries; i++) {
assertEquals(null, cacheFactory2.getEmbeddedCache().put("k" + i, "v" + i));
}
// 2. Get with Memcached from a different node
for (int i=0; i != numEntries; i++) {
assertEquals("v" + i, cacheFactory1.getMemcachedClient().get("k" + i));
}
}
}