package org.infinispan.persistence.file;
import static org.infinispan.test.TestingUtil.INFINISPAN_END_TAG;
import static org.infinispan.test.TestingUtil.INFINISPAN_START_TAG_NO_SCHEMA;
import static org.infinispan.test.TestingUtil.withCacheManager;
import static org.testng.AssertJUnit.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import org.infinispan.Cache;
import org.infinispan.commons.util.Util;
import org.infinispan.configuration.cache.PersistenceConfigurationBuilder;
import org.infinispan.persistence.BaseStoreFunctionalTest;
import org.infinispan.test.CacheManagerCallable;
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.Test;
/**
* Single file cache store functional test.
*
* @author Galder ZamarreƱo
* @since 6.0
*/
@Test(groups = {"unit", "smoke"}, testName = "persistence.file.SingleFileStoreFunctionalTest")
public class SingleFileStoreFunctionalTest extends BaseStoreFunctionalTest {
private String tmpDirectory;
@BeforeClass
protected void setUpTempDir() {
tmpDirectory = TestingUtil.tmpDirectory(this.getClass());
}
@AfterClass
protected void clearTempDir() {
Util.recursiveFileRemove(tmpDirectory);
new File(tmpDirectory).mkdirs();
}
@Override
protected PersistenceConfigurationBuilder createCacheStoreConfig(PersistenceConfigurationBuilder persistence, boolean preload) {
persistence
.addSingleFileStore()
.location(tmpDirectory)
.preload(preload);
return persistence;
}
public void testParsingEmptyElement() throws Exception {
String config = INFINISPAN_START_TAG_NO_SCHEMA +
"<cache-container default-cache=\"default\">" +
" <local-cache name=\"default\">\n" +
" <persistence passivation=\"false\"> \n" +
" <file-store shared=\"false\" preload=\"true\"/> \n" +
" </persistence>\n" +
" </local-cache>\n" +
"</cache-container>" +
INFINISPAN_END_TAG;
InputStream is = new ByteArrayInputStream(config.getBytes());
withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.fromStream(is)) {
@Override
public void call() {
Cache<Object, Object> cache = cm.getCache();
cache.put(1, "v1");
assertEquals("v1", cache.get(1));
SingleFileStore cacheLoader = (SingleFileStore) TestingUtil.getFirstLoader(cache);
assertEquals("Infinispan-SingleFileStore", cacheLoader.getConfiguration().location());
assertEquals(-1, cacheLoader.getConfiguration().maxEntries());
}
});
Util.recursiveFileRemove("Infinispan-SingleFileStore");
}
public void testParsingElement() throws Exception {
String config = INFINISPAN_START_TAG_NO_SCHEMA +
"<cache-container default-cache=\"default\">" +
" <local-cache name=\"default\">\n" +
" <persistence passivation=\"false\"> \n" +
" <file-store path=\"other-location\" max-entries=\"100\" shared=\"false\" preload=\"true\" fragmentation-factor=\"0.75\"/> \n" +
" </persistence>\n" +
" </local-cache>\n" +
"</cache-container>" +
INFINISPAN_END_TAG;
InputStream is = new ByteArrayInputStream(config.getBytes());
withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.fromStream(is)) {
@Override
public void call() {
Cache<Object, Object> cache = cm.getCache();
cache.put(1, "v1");
assertEquals("v1", cache.get(1));
SingleFileStore store = (SingleFileStore) TestingUtil.getFirstLoader(cache);
assertEquals("other-location", store.getConfiguration().location());
assertEquals(100, store.getConfiguration().maxEntries());
assertEquals(0.75f, store.getConfiguration().fragmentationFactor(), 0f);
}
});
Util.recursiveFileRemove("other-location");
}
}