package org.infinispan.persistence.leveldb.config; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import java.io.IOException; import java.io.InputStream; import org.infinispan.Cache; import org.infinispan.commons.test.skip.SkipOnOs; import org.infinispan.commons.util.Util; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.StoreConfiguration; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.configuration.parsing.ConfigurationBuilderHolder; import org.infinispan.configuration.parsing.ParserRegistry; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.persistence.leveldb.configuration.LevelDBStoreConfiguration; import org.infinispan.persistence.leveldb.configuration.LevelDBStoreConfigurationBuilder; import org.infinispan.test.AbstractInfinispanTest; import org.infinispan.test.TestingUtil; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; /** * * @author <a href="mailto:rtsang@redhat.com">Ray Tsang</a> * */ @Test(groups = "unit", testName = "persistence.leveldb.configuration.ConfigurationTest") @SkipOnOs({SkipOnOs.OS.SOLARIS, SkipOnOs.OS.WINDOWS}) public class ConfigurationTest extends AbstractInfinispanTest { private String tmpDirectory = TestingUtil.tmpDirectory(this.getClass()); private String tmpDataDirectory = tmpDirectory + "/data"; private String tmpExpiredDirectory = tmpDirectory + "/expired"; @AfterClass(alwaysRun = true) protected void clearTempDir() { Util.recursiveFileRemove(tmpDirectory); } public void testConfigBuilder() { GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .globalJmxStatistics().allowDuplicateDomains(true) .transport().defaultTransport() .build(); Configuration cacheConfig = new ConfigurationBuilder().persistence().addStore(LevelDBStoreConfigurationBuilder.class).location(tmpDataDirectory) .expiredLocation(tmpExpiredDirectory).implementationType(LevelDBStoreConfiguration.ImplementationType.AUTO).build(); StoreConfiguration cacheLoaderConfig = cacheConfig.persistence().stores().get(0); assertTrue(cacheLoaderConfig instanceof LevelDBStoreConfiguration); LevelDBStoreConfiguration leveldbConfig = (LevelDBStoreConfiguration) cacheLoaderConfig; assertEquals(tmpDataDirectory, leveldbConfig.location()); assertEquals(tmpExpiredDirectory, leveldbConfig.expiredLocation()); EmbeddedCacheManager cacheManager = new DefaultCacheManager(globalConfig); cacheManager.defineConfiguration("testCache", cacheConfig); cacheManager.start(); Cache<String, String> cache = cacheManager.getCache("testCache"); cache.put("hello", "there"); cache.stop(); cacheManager.stop(); } public void testXmlConfig() throws IOException { InputStream configSTream = ConfigurationTest.class.getResourceAsStream("/config/leveldb-config-auto.xml"); ConfigurationBuilderHolder configHolder = new ParserRegistry().parse(configSTream); // check persistence attributes Configuration cacheConfig = configHolder.getNamedConfigurationBuilders().get("testCache").build(); assertFalse(cacheConfig.persistence().passivation()); assertEquals(cacheConfig.persistence().stores().size(), 1); // check generic store attributes StoreConfiguration cacheLoaderConfig = cacheConfig.persistence().stores().get(0); assertFalse(cacheLoaderConfig.shared()); assertTrue(cacheLoaderConfig.preload()); assertTrue(cacheLoaderConfig instanceof LevelDBStoreConfiguration); // check LevelDB store attributes LevelDBStoreConfiguration leveldbConfig = (LevelDBStoreConfiguration) cacheLoaderConfig; assertEquals("/tmp/leveldb/52/data", leveldbConfig.location()); assertEquals("/tmp/leveldb/52/expired", leveldbConfig.expiredLocation()); assertEquals(LevelDBStoreConfiguration.ImplementationType.AUTO, leveldbConfig.implementationType()); } }