/*
* JBoss, Home of Professional Open Source
* Copyright 2010 Red Hat Inc. and/or its affiliates and other
* contributors as indicated by the @author tags. All rights reserved.
* See the copyright.txt in the distribution for a full listing of
* individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.infinispan.eviction;
import org.infinispan.Cache;
import org.infinispan.config.Configuration;
import org.infinispan.loaders.CacheStoreConfig;
import org.infinispan.loaders.dummy.DummyInMemoryCacheStore;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.SingleCacheManagerTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "eviction.EvictionWithPassivationTest")
public class EvictionWithPassivationTest extends SingleCacheManagerTest {
private Configuration buildCfg(EvictionThreadPolicy threadPolicy, EvictionStrategy strategy) {
Configuration cfg = new Configuration();
CacheStoreConfig cacheStoreConfig = new DummyInMemoryCacheStore.Cfg();
cacheStoreConfig.setPurgeOnStartup(true);
cfg.getCacheLoaderManagerConfig().addCacheLoaderConfig(cacheStoreConfig);
cfg.getCacheLoaderManagerConfig().setPassivation(true);
cfg.setEvictionStrategy(strategy);
cfg.setEvictionThreadPolicy(threadPolicy);
cfg.setEvictionMaxEntries(2);
cfg.setInvocationBatchingEnabled(true);
return cfg;
}
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
cacheManager = TestCacheManagerFactory.createCacheManager(getDefaultStandaloneConfig(true));
for (EvictionStrategy s : EvictionStrategy.values()) {
for (EvictionThreadPolicy p : EvictionThreadPolicy.values()) {
cacheManager.defineConfiguration("test-" + p + "-" + s, buildCfg(p, s));
}
}
return cacheManager;
}
public void testPiggybackLRU() {
runTest(EvictionThreadPolicy.PIGGYBACK, EvictionStrategy.LRU);
}
public void testPiggybackLIRS() {
runTest(EvictionThreadPolicy.PIGGYBACK, EvictionStrategy.LIRS);
}
public void testPiggybackNONE() {
runTest(EvictionThreadPolicy.PIGGYBACK, EvictionStrategy.NONE);
}
public void testPiggybackUNORDERED() {
runTest(EvictionThreadPolicy.PIGGYBACK, EvictionStrategy.UNORDERED);
}
public void testDefaultLRU() {
runTest(EvictionThreadPolicy.DEFAULT, EvictionStrategy.LRU);
}
public void testDefaultLIRS() {
runTest(EvictionThreadPolicy.DEFAULT, EvictionStrategy.LIRS);
}
public void testDefaultNONE() {
runTest(EvictionThreadPolicy.DEFAULT, EvictionStrategy.NONE);
}
public void testDefaultUNORDERED() {
runTest(EvictionThreadPolicy.DEFAULT, EvictionStrategy.UNORDERED);
}
private void runTest(EvictionThreadPolicy p, EvictionStrategy s) {
String name = "test-" + p + "-" + s;
Cache<String, String> testCache = cacheManager.getCache(name);
testCache.clear();
testCache.put("X", "4567");
testCache.put("Y", "4568");
testCache.put("Z", "4569");
assert "4567".equals( testCache.get("X") ) : "Failure on test " + name;
assert "4568".equals( testCache.get("Y") ) : "Failure on test " + name;
assert "4569".equals( testCache.get("Z") ) : "Failure on test " + name;
for (int i=0; i<10; i++) {
testCache.getAdvancedCache().startBatch();
String k = "A"+i;
testCache.put(k, k);
k = "B"+i;
testCache.put(k, k);
testCache.getAdvancedCache().endBatch(true);
}
for (int i=0; i<10; i++) {
String k = "A"+i;
assert k.equals(testCache.get(k)) : "Failure on test " + name;
k = "B"+i;
assert k.equals(testCache.get(k)) : "Failure on test " + name;
}
}
}