package org.infinispan.persistence.remote;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration;
import static org.testng.AssertJUnit.assertEquals;
import java.util.concurrent.TimeUnit;
import org.infinispan.Cache;
import org.infinispan.client.hotrod.MetadataValue;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.test.HotRodClientTestingUtil;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.container.entries.InternalCacheEntry;
import org.infinispan.eviction.EvictionStrategy;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.persistence.remote.configuration.RemoteStoreConfigurationBuilder;
import org.infinispan.server.hotrod.HotRodServer;
import org.infinispan.test.AbstractInfinispanTest;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@Test(testName = "persistence.remote.RemoteStoreMixedAccessTest", groups="functional")
public class RemoteStoreMixedAccessTest extends AbstractInfinispanTest {
private HotRodServer hrServer;
private EmbeddedCacheManager serverCacheManager;
private Cache<String, String> serverCache;
private EmbeddedCacheManager clientCacheManager;
private Cache<String, String> clientCache;
private RemoteCacheManager remoteCacheManager;
private RemoteCache<String, String> remoteCache;
@BeforeClass
public void setup() throws Exception {
ConfigurationBuilder serverBuilder = TestCacheManagerFactory.getDefaultCacheConfiguration(false);
serverBuilder.eviction().maxEntries(100).strategy(EvictionStrategy.UNORDERED)
.expiration().wakeUpInterval(10L);
serverCacheManager = TestCacheManagerFactory.createCacheManager(
hotRodCacheConfiguration(serverBuilder));
serverCache = serverCacheManager.getCache();
hrServer = HotRodClientTestingUtil.startHotRodServer(serverCacheManager);
ConfigurationBuilder clientBuilder = TestCacheManagerFactory.getDefaultCacheConfiguration(false);
clientBuilder.persistence().addStore(RemoteStoreConfigurationBuilder.class)
.rawValues(true)
.addServer()
.host(hrServer.getHost())
.port(hrServer.getPort());
clientCacheManager = TestCacheManagerFactory.createCacheManager(clientBuilder);
clientCache = clientCacheManager.getCache();
org.infinispan.client.hotrod.configuration.ConfigurationBuilder rcmBuilder = new org.infinispan.client.hotrod.configuration.ConfigurationBuilder();
rcmBuilder.addServer()
.host(hrServer.getHost())
.port(hrServer.getPort());
remoteCacheManager = new RemoteCacheManager(rcmBuilder.build());
remoteCacheManager.start();
remoteCache = remoteCacheManager.getCache();
}
public void testMixedAccess() {
remoteCache.put("k1", "v1");
String rv1 = remoteCache.get("k1");
assertEquals("v1", rv1);
MetadataValue<String> mv1 = remoteCache.getWithMetadata("k1");
assertEquals("v1", mv1.getValue());
String cv1 = clientCache.get("k1");
assertEquals("v1", cv1);
}
public void testMixedAccessWithLifespan() {
remoteCache.put("k1", "v1", 120, TimeUnit.SECONDS);
MetadataValue<String> mv1 = remoteCache.getWithMetadata("k1");
assertEquals("v1", mv1.getValue());
assertEquals(120, mv1.getLifespan());
String cv1 = clientCache.get("k1");
assertEquals("v1", cv1);
InternalCacheEntry ice1 = clientCache.getAdvancedCache().getDataContainer().get("k1");
assertEquals(120000, ice1.getLifespan());
}
public void testMixedAccessWithLifespanAndMaxIdle() {
remoteCache.put("k1", "v1", 120, TimeUnit.SECONDS, 30, TimeUnit.SECONDS);
MetadataValue<String> mv1 = remoteCache.getWithMetadata("k1");
assertEquals("v1", mv1.getValue());
assertEquals(120, mv1.getLifespan());
assertEquals(30, mv1.getMaxIdle());
String cv1 = clientCache.get("k1");
assertEquals("v1", cv1);
InternalCacheEntry ice1 = clientCache.getAdvancedCache().getDataContainer().get("k1");
assertEquals(120000, ice1.getLifespan());
assertEquals(30000, ice1.getMaxIdle());
}
@BeforeMethod
public void cleanup() {
serverCache.clear();
clientCache.clear();
}
@AfterClass
public void tearDown() {
HotRodClientTestingUtil.killRemoteCacheManager(remoteCacheManager);
HotRodClientTestingUtil.killServers(hrServer);
TestingUtil.killCacheManagers(clientCacheManager, serverCacheManager);
}
}