/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.services.caching;
import static org.junit.Assert.*;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import org.dspace.services.caching.model.EhcacheCache;
import org.dspace.services.model.Cache;
import org.dspace.services.model.CacheConfig;
import org.dspace.services.model.CacheConfig.CacheScope;
import org.dspace.test.DSpaceAbstractKernelTest;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Testing the functionality of the DSpace caches
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public class EhcacheCacheTest extends DSpaceAbstractKernelTest {
static String cacheName = "org.dspace.aaronz.test.Cache";
static CacheManager cacheManager;
static Cache cache = null;
@BeforeClass
public static void initClass() {
CachingServiceImpl cachingService = getService(CachingServiceImpl.class);
cacheManager = cachingService.getCacheManager();
cache = cachingService.getCache(cacheName, new CacheConfig(CacheScope.INSTANCE));
}
@AfterClass
public static void tearDownClass() {
if(cacheManager!=null)
cacheManager.shutdown();
cacheManager = null;
cache = null;
}
@Before
public void init() {
cache.clear();
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#getCache()}.
*/
@Test
public void testGetCache() {
assertTrue(cache instanceof EhcacheCache);
assertNotNull( ((EhcacheCache) cache).getCache() );
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#EhcacheCache(net.sf.ehcache.Ehcache, org.dspace.services.model.CacheConfig)}.
*/
@Test
public void testEhcacheCache() {
cacheManager.addCache("org.dspace.ehcache");
Ehcache ehcache = cacheManager.getEhcache("org.dspace.ehcache");
assertNotNull(ehcache);
EhcacheCache cache = new EhcacheCache(ehcache, new CacheConfig(CacheScope.INSTANCE));
assertEquals("org.dspace.ehcache", cache.getName());
//trash the references
ehcache = null;
cache = null;
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#getConfig()}.
*/
@Test
public void testGetConfig() {
CacheConfig cacheConfig = cache.getConfig();
assertNotNull(cacheConfig);
cacheConfig = null;
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#getName()}.
*/
@Test
public void testGetName() {
String name = cache.getName();
assertNotNull(name);
assertEquals(cacheName, name);
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#clear()}.
*/
@Test
public void testClear() {
cache.put("XX", "XXXX");
assertTrue(cache.size() > 0);
cache.clear();
assertEquals(0, cache.size());
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#exists(java.lang.String)}.
*/
@Test
public void testExists() {
assertFalse(cache.exists("XXX"));
cache.put("XXX", 123);
assertTrue(cache.exists("XXX"));
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#get(java.lang.String)}.
*/
@Test
public void testGet() {
cache.put("XXX", 123);
Integer i = (Integer) cache.get("XXX");
assertNotNull(i);
assertEquals(new Integer(123), i);
Object o = cache.get("YYYYYYYY");
assertNull(o);
try {
cache.get(null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#look(java.lang.String)}.
*/
@Test
public void testLook() {
cache.put("XXX", "AZ");
String thing = (String) cache.look("XXX");
assertNotNull(thing);
assertEquals("AZ", thing);
// TODO better way to test this
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#put(java.lang.String, java.lang.Object)}.
*/
@Test
public void testPut() {
assertEquals(0, cache.size());
cache.put("XXX", 123);
assertEquals(1, cache.size());
cache.put("YYY", null);
assertEquals(2, cache.size());
cache.put("XXX", "ABC");
assertEquals(2, cache.size());
cache.put("XXX", null);
assertEquals(2, cache.size());
Object o = cache.get("XXX");
assertNull(o);
try {
cache.put(null, "XXX");
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#remove(java.lang.String)}.
*/
@Test
public void testRemove() {
cache.put("XXX", 123);
cache.put("YYY", null);
assertEquals(2, cache.size());
cache.remove("XXX");
assertEquals(1, cache.size());
cache.remove("XXX");
assertEquals(1, cache.size());
cache.remove("ZZZ");
assertEquals(1, cache.size());
try {
cache.remove(null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.dspace.services.caching.model.EhcacheCache#size()}.
*/
@Test
public void testSize() {
assertEquals(0, cache.size());
cache.put("A", "AASSDDFF");
assertEquals(1, cache.size());
cache.put("B", "AASSDDFF");
cache.put("C", "AASSDDFF");
assertEquals(3, cache.size());
}
}