//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.logging;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import uk.gov.dstl.baleen.core.logging.builders.EvictingQueueAppender;
import uk.gov.dstl.baleen.core.logging.builders.EvictingQueueBuilder;
import ch.qos.logback.classic.spi.ILoggingEvent;
/**
* Tests for {@link EvictingQueueAppender}.
*
*
*
*/
public class EvictingQueueAppenderTest {
@Test
public void testBuilder() throws Exception {
EvictingQueueBuilder builder = new EvictingQueueBuilder("test",
Collections.emptyList(), 10);
assertSame(builder.build(null, null), builder.getAppender());
}
@Test
public void testAppend() {
EvictingQueueAppender<ILoggingEvent> appender = new EvictingQueueAppender<ILoggingEvent>(
10);
for (int i = 1; i <= appender.getMaxSize(); i++) {
String s = Integer.toString(i);
ILoggingEvent n = createLog(s);
appender.append(n);
List<RecentLog> list = appender.getAll();
assertEquals(list.get(list.size()-1).getMessage(),s );
assertEquals(i, appender.size());
}
RecentLog f = appender.getAll().get(0);
// Check that pushing one more will check f out!
assertEquals(appender.getMaxSize(), appender.getAll().size());
ILoggingEvent next = createLog("next");
appender.append(next);
assertEquals(appender.getMaxSize(), appender.getAll().size());
assertTrue(appender.getAll().stream().filter(e -> e.getMessage().equals(next.getMessage())).toArray().length == 1);
assertTrue(appender.getAll().stream().filter(e -> e.getMessage().equals(f.getMessage())).toArray().length == 0);
}
@Test
public void testNegativeSize() {
EvictingQueueAppender<ILoggingEvent> appender = new EvictingQueueAppender<ILoggingEvent>(
-1);
assertEquals(0, appender.getMaxSize());
}
@Test
public void testGetMaxSize() {
EvictingQueueAppender<ILoggingEvent> appender = new EvictingQueueAppender<ILoggingEvent>(
100);
assertEquals(100, appender.getMaxSize());
}
@Test
public void testClear() {
EvictingQueueAppender<ILoggingEvent> appender = new EvictingQueueAppender<ILoggingEvent>(
10);
appender.append(createLog("test"));
appender.clear();
assertTrue(appender.getAll().isEmpty());
}
public ILoggingEvent createLog(String msg) {
ILoggingEvent m = mock(ILoggingEvent.class);
doReturn(msg).when(m).getMessage();
doReturn(msg).when(m).getFormattedMessage();
return m;
}
}