//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.history;
import static org.junit.Assert.*;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.impl.CustomResourceSpecifier_impl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Maps;
import uk.gov.dstl.baleen.core.history.memory.AbstractCachingBaleenHistory;
import uk.gov.dstl.baleen.core.history.memory.InMemoryDocumentHistory;
import uk.gov.dstl.baleen.exceptions.BaleenException;
public class AbstractCachingBaleenHistoryTest {
// This does not test the caching, as that's testing Guava
private FakeCachingBaleenHistory history;
@Before
public void setUp() throws ResourceInitializationException {
history = new FakeCachingBaleenHistory();
history.initialize(new CustomResourceSpecifier_impl(), Maps.newHashMap());
}
@After
public void tearDown() {
history.destroy();
}
@Test
public void destroyTwice() {
history.destroy();
history.destroy();
// Called a third time in tearDown
}
@Test
public void testNew() {
history.setReturnNull(true);
assertNull(history.getCachedHistoryIfPresentPublic("1"));
DocumentHistory a = history.getHistory("1");
assertTrue(history.loadCalled);
assertTrue(history.createdCalled);
assertNotNull(history.getCachedHistoryIfPresentPublic("1"));
history.reset();
DocumentHistory b = history.getHistory("1");
assertSame(a, b);
assertFalse(history.loadCalled);
assertFalse(history.createdCalled);
history.reset();
history.closeHistory("1");
assertNull(history.getCachedHistoryIfPresentPublic("1"));
DocumentHistory c = history.getHistory("1");
assertTrue(history.loadCalled);
assertTrue(history.createdCalled);
assertNotSame(a, c);
}
@Test
public void testExisting() {
history.setReturnNull(false);
assertNull(history.getCachedHistoryIfPresentPublic("1"));
history.getHistory("1");
assertTrue(history.loadCalled);
assertFalse(history.createdCalled);
assertNotNull(history.getCachedHistoryIfPresentPublic("1"));
}
@Test
public void testException() {
history.setThrowException(true);
assertNull(history.getCachedHistoryIfPresentPublic("1"));
history.getHistory("1");
assertTrue(history.loadCalled);
assertTrue(history.createdCalled);
assertNotNull(history.getCachedHistoryIfPresentPublic("1"));
}
public class FakeCachingBaleenHistory extends AbstractCachingBaleenHistory<InMemoryDocumentHistory> {
private boolean throwException = false;
private boolean returnNull = false;
private boolean createdCalled = false;
private boolean loadCalled = false;
public void reset() {
createdCalled = false;
loadCalled = false;
}
public void setReturnNull(boolean returnNull) {
this.returnNull = returnNull;
}
public InMemoryDocumentHistory getCachedHistoryIfPresentPublic(String documentId) {
return super.getCachedHistoryIfPresent(documentId);
}
public void setThrowException(boolean throwException) {
this.throwException = throwException;
}
@Override
protected InMemoryDocumentHistory createNewDocumentHistory(String documentId) {
createdCalled = true;
return new InMemoryDocumentHistory(this, documentId);
}
@Override
protected InMemoryDocumentHistory loadExistingDocumentHistory(String documentId) throws BaleenException {
loadCalled = true;
if(throwException) {
throw new BaleenException();
} else if(returnNull) {
return null;
} else {
return new InMemoryDocumentHistory(this, documentId);
}
}
}
}