package org.infinispan.lucene.configuration; import org.infinispan.Cache; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; 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 Metadata Cache with eviction or with persistence * without preload enabled. * * @author Pedro Ruivo * @since 6.0 */ @Test(groups = "functional", testName = "lucene.configuration.MetadataCacheValidationTest") public class MetadataCacheValidationTest extends AbstractInfinispanTest { private static final String INDEX_NAME = "test-index"; private static final String CACHE_NAME = "test-cache"; @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "ISPN(\\d)*: Lucene Directory for index '" + INDEX_NAME + "' can not use Metadata Cache '" + CACHE_NAME + "': eviction enabled on the Cache configuration!") public void testFailOnEviction() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.eviction().strategy(EvictionStrategy.LIRS).maxEntries(1l); doConfigurationTest(builder); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "ISPN(\\d)*: Lucene Directory for index '" + INDEX_NAME + "' can not use Metadata Cache '" + CACHE_NAME + "': persistence enabled without preload on the Cache " + "configuration!") public void testFailOnPersistenceWithoutPreload() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.persistence().addStore(DummyInMemoryStoreConfigurationBuilder.class).preload(false); doConfigurationTest(builder); } public void testSuccessfullConfiguration() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.persistence().addStore(DummyInMemoryStoreConfigurationBuilder.class).preload(true); builder.eviction().strategy(EvictionStrategy.NONE).maxEntries(-1l); doConfigurationTest(builder); } private void doConfigurationTest(ConfigurationBuilder configuration) { EmbeddedCacheManager cacheManager = null; try { cacheManager = TestCacheManagerFactory.createCacheManager(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); } } } }