dnet-core/dnet-core-services/src/test/java/eu/dnetlib/enabling/resultset/ResultSetRegistryImplTest.java

185 lines
5.0 KiB
Java

package eu.dnetlib.enabling.resultset;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.matches;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import eu.dnetlib.miscutils.cache.EhCache;
/**
* Test ResultSetRegistryImpl.
*
* @author marko
*
*/
@RunWith(MockitoJUnitRunner.class)
public class ResultSetRegistryImplTest {
/**
* max in memory elements.
*/
private static final int MAX_IN_MEM = 100;
/**
* default time.
*/
private static final int DEFAULT_TTI = 1000;
/**
* default time to live.
*/
private static final int DEFAULT_TTL = 1000;
/**
* class under test.
*/
private transient ResultSetRegistryImpl registry;
/**
* mock of a resultset object.
*/
@Mock
private transient ResultSet resultSet;
/**
* ehcache manager.
*/
private final transient CacheManager cacheManager = CacheManager.create();
/**
* Set up basic mocks.
*/
@Before
public void setUp() {
final Cache ehCache = new net.sf.ehcache.Cache("testCache", MAX_IN_MEM, false, false, DEFAULT_TTL, DEFAULT_TTI);
cacheManager.addCache(ehCache);
final Cache mtEhCache = new net.sf.ehcache.Cache("testMTCache", MAX_IN_MEM, false, false, DEFAULT_TTL, DEFAULT_TTI);
cacheManager.addCache(mtEhCache);
final EhCache<String, ResultSet> cache = new EhCache<String, ResultSet>(ehCache);
cache.setCache(ehCache);
final EhCache<String, Integer> mtCache = new EhCache<String, Integer>(mtEhCache);
mtCache.setCache(mtEhCache);
registry = new ResultSetRegistryImpl();
registry.setCache(cache);
registry.setMaxIdleTimeCache(mtCache);
when(resultSet.getIdentifier()).thenReturn("123456");
when(resultSet.isOpen()).thenReturn(true);
}
/**
* remove ehcache from ehcachemanager.
*/
@After
public void tearDown() {
cacheManager.removeAllCaches();
}
/**
* Test that registered resultsets are really registered.
*/
@Test
public void testAddResultSet() {
final String rsId = resultSet.getIdentifier();
assertNotNull("the resultset should not be null", rsId);
registry.addResultSet(resultSet);
verify(resultSet).setIdentifier(matches("rs-" + registry.getIdGenerator().getRegEx()));
final ResultSet res = registry.getResultSetById(rsId); // NOPMD
assertNotNull("the resultset is not found", res);
assertEquals("the resultsets don't have the same id", rsId, res.getIdentifier());
assertEquals("the resultsets are not the same instance", resultSet, res);
}
/**
* Test that registered resultsets are really registered.
*/
@Test
public void testAddResultSetWithId() {
resultSet = mock(ResultSet.class);
when(resultSet.getIdentifier()).thenReturn("123");
final String rsId = resultSet.getIdentifier();
registry.addResultSet(resultSet, rsId);
verify(resultSet).setIdentifier(rsId);
final ResultSet res = registry.getResultSetById(rsId); // NOPMD
assertNotNull("the resultset is not found", res);
assertEquals("the resultsets don't have the same id", rsId, res.getIdentifier());
assertEquals("the resultsets are not the same instance", resultSet, res);
}
/**
* try to obtain a inexistent resultset.
*/
@Test
public void testInexistentResultSet() {
final String rsId = resultSet.getIdentifier();
assertNull("inexisten resultset returns null", registry.getResultSetById(rsId));
}
/**
* test closing of resultset and its pruning from the registry.
*/
@Test
public void testResultSetClose() {
final String rsId = resultSet.getIdentifier();
assertTrue("check if resultset is open", resultSet.isOpen());
registry.addResultSet(resultSet);
verify(resultSet).addObserver(registry);
// simulate a resultset close on the mock
when(resultSet.isOpen()).thenReturn(false);
registry.update(resultSet, null);
assertFalse("check if resultset is closed", resultSet.isOpen());
assertNull("check if the object is pruned from the registry", registry.getResultSetById(rsId));
}
/**
* same as testResultSetClose() but with a real observer/observable mechanism, i.e. without resultset mock class.
*
*/
@Test
public void testWithRealObservable() {
final LocalResultSetImpl rset = new LocalResultSetImpl(null);
rset.setIdentifier("123456");
resultSet = rset;
final String rsId = resultSet.getIdentifier();
assertFalse("check if resultset is not destroyed", resultSet.isDestroyed());
registry.addResultSet(resultSet);
resultSet.destroy();
assertTrue("check if resultset is destroyed", resultSet.isDestroyed());
assertNull("check if the object is pruned from the registry", registry.getResultSetById(rsId));
}
}