package org.infinispan.persistence;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.marshall.core.MarshalledEntryImpl;
import org.infinispan.persistence.dummy.DummyInMemoryStoreConfigurationBuilder;
import org.infinispan.persistence.spi.CacheLoader;
import org.infinispan.persistence.spi.CacheWriter;
import org.infinispan.test.MultipleCacheManagersTest;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.InCacheMode;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
/**
* Tester for {@link org.infinispan.persistence.cluster.ClusterLoader}
*
* @author Mircea.Markus@jboss.com
*/
@Test(groups = "functional", testName = "persistence.ClusterCacheLoaderTest")
@InCacheMode({ CacheMode.INVALIDATION_SYNC, CacheMode.DIST_SYNC, CacheMode.REPL_SYNC })
public class ClusterCacheLoaderTest extends MultipleCacheManagersTest {
@Override
protected void createCacheManagers() throws Throwable {
EmbeddedCacheManager cacheManager1 = TestCacheManagerFactory.createClusteredCacheManager();
EmbeddedCacheManager cacheManager2 = TestCacheManagerFactory.createClusteredCacheManager();
registerCacheManager(cacheManager1, cacheManager2);
ConfigurationBuilder config1 = getDefaultClusteredCacheConfig(cacheMode, false);
config1.persistence().addClusterLoader();
ConfigurationBuilder config2 = getDefaultClusteredCacheConfig(cacheMode, false);
config2.persistence().addClusterLoader();
config2.persistence().addStore(DummyInMemoryStoreConfigurationBuilder.class);
cacheManager1.defineConfiguration("clusteredCl", config1.build());
cacheManager2.defineConfiguration("clusteredCl", config2.build());
waitForClusterToForm("clusteredCl");
}
public void testRemoteLoad() {
Cache<String, String> cache1 = cache(0, "clusteredCl");
Cache<String, String> cache2 = cache(1, "clusteredCl");
assertNull(cache1.get("key"));
assertNull(cache1.get("key"));
cache2.put("key", "value");
assertEquals(cache1.get("key"), "value");
}
public void testRemoteLoadFromCacheLoader() throws Exception {
Cache<String, String> cache1 = cache(0, "clusteredCl");
Cache<String, String> cache2 = cache(1, "clusteredCl");
CacheWriter writer = TestingUtil.getFirstWriter(cache2);
assertNull(cache1.get("key"));
assertNull(cache2.get("key"));
writer.write(new MarshalledEntryImpl("key", "value", null, cache2.getAdvancedCache().getComponentRegistry().getCacheMarshaller()));
assertEquals(((CacheLoader)writer).load("key").getValue(), "value");
assertEquals(cache1.get("key"), "value");
}
}