package org.infinispan.lucene.configuration;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.lucene.directory.DirectoryBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.persistence.dummy.DummyInMemoryStoreConfigurationBuilder;
import org.infinispan.test.AbstractInfinispanTest;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
/**
* Verifies that the Lucene Directory correctly refuses to use a cache without fetching state from other nodes (i.e.
* state transfer)
*
* @author Pedro Ruivo
* @since 6.0
*/
@Test(groups = "functional", testName = "lucene.configuration.NoStateTransferValidationTest")
public class NoStateTransferValidationTest extends AbstractInfinispanTest {
private static final String INDEX_NAME = "test-index";
private static final String CACHE_NAME = "test-cache";
private static final String ERROR_MESSAGE_EXP = "ISPN(\\d)*: Lucene Directory for index '" + INDEX_NAME +
"' can not use Cache '" + CACHE_NAME + "': fetch in state is not enabled in Cache configuration!";
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ERROR_MESSAGE_EXP)
public void testFailWithoutFetchAnyState() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(false);
doConfigurationTest(builder);
}
public void testNoFailWithFetchInMemoryState() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(true);
doConfigurationTest(builder);
}
public void testNoFailWithFetchPersistenceState() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(false);
builder.persistence()
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(true).preload(true);
doConfigurationTest(builder);
}
public void testNoFailWithCacheLoaderAndFetchInMemoryState() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(true);
builder.persistence()
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(false).preload(true);
doConfigurationTest(builder);
}
public void testNoFailWithSharedCacheLoader() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(false);
builder.persistence()
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(false).preload(true).shared(true);
doConfigurationTest(builder);
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ERROR_MESSAGE_EXP)
public void testNoFailWithPassivationCacheLoader() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(false);
builder.persistence()
.passivation(true)
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(false).preload(true);
doConfigurationTest(builder);
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ERROR_MESSAGE_EXP)
public void testNoFailWithPassivationCacheLoader2() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(false);
builder.persistence()
.passivation(true)
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(true).preload(true);
doConfigurationTest(builder);
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ERROR_MESSAGE_EXP)
public void testNoFailWithPassivationCacheLoader3() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(true);
builder.persistence()
.passivation(true)
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(false).preload(true);
doConfigurationTest(builder);
}
public void testNoFailWithPassivationCacheLoader4() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.stateTransfer().fetchInMemoryState(true);
builder.persistence()
.passivation(true)
.addStore(DummyInMemoryStoreConfigurationBuilder.class).fetchPersistentState(true).preload(true);
doConfigurationTest(builder);
}
private void doConfigurationTest(ConfigurationBuilder configuration) {
EmbeddedCacheManager cacheManager = null;
try {
cacheManager = TestCacheManagerFactory.createClusteredCacheManager(configuration);
cacheManager.defineConfiguration(CACHE_NAME, configuration.build());
Cache cache = cacheManager.getCache(CACHE_NAME);
DirectoryBuilder.newDirectoryInstance(cache, cache, cache, INDEX_NAME).create();
} finally {
if (cacheManager != null) {
TestingUtil.killCacheManagers(cacheManager);
}
}
}
}