//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.logging;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.junit.Test;
import uk.gov.dstl.baleen.core.logging.builders.BaleenConsoleLoggerBuilder;
import uk.gov.dstl.baleen.core.logging.builders.BaleenFileLoggerBuilder;
import uk.gov.dstl.baleen.core.logging.builders.BaleenLoggerBuilder;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.encoder.Encoder;
import ch.qos.logback.core.filter.Filter;
/**
* Test the {@link BaleenLoggerBuilder} implementations.
*
*
*
*/
public class BaleenLoggerBuilderTest {
private static final String LOG_FILENAME = "log.filename";
private static final String NAME = "test";
/**
* Test abstract functions (using console implementation) and the functions
* of console
*
*/
@Test
public void testAbstractAndConsole() {
BaleenConsoleLoggerBuilder builder = new BaleenConsoleLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN,
new MinMaxFilter(Level.INFO, Level.WARN));
LoggerContext context = new LoggerContext();
Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder();
Appender<ILoggingEvent> appender = builder.build(context, encoder);
assertEquals(NAME, builder.getName());
assertTrue(appender instanceof ConsoleAppender);
assertEquals(encoder, ((ConsoleAppender<ILoggingEvent>) appender).getEncoder());
assertNotNull(appender);
assertEquals(NAME, appender.getName());
Filter<ILoggingEvent> filter = appender.getCopyOfAttachedFiltersList().get(0);
assertTrue(filter instanceof MinMaxFilter);
assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin());
assertEquals(Level.WARN, ((MinMaxFilter) filter).getMax());
}
@Test
public void testNullFilters() {
BaleenConsoleLoggerBuilder singleBuilder = new BaleenConsoleLoggerBuilder(BaleenLogging.DEFAULT_PATTERN,
(Filter<ILoggingEvent>) null);
List<Filter<ILoggingEvent>> list = null;
BaleenConsoleLoggerBuilder listBuilder = new BaleenConsoleLoggerBuilder(BaleenLogging.DEFAULT_PATTERN, list);
singleBuilder.build(null, null);
listBuilder.build(null, null);
}
@Test
public void testAbstractAndConsoleMultipleFilters() {
BaleenConsoleLoggerBuilder builder = new BaleenConsoleLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN,
Arrays.asList(new MinMaxFilter(Level.INFO, Level.ERROR), new MinMaxFilter(Level.INFO, Level.WARN)));
LoggerContext context = new LoggerContext();
Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder();
Appender<ILoggingEvent> appender = builder.build(context, encoder);
assertEquals(NAME, builder.getName());
assertTrue(appender instanceof ConsoleAppender);
assertEquals(encoder, ((ConsoleAppender<ILoggingEvent>) appender).getEncoder());
assertNotNull(appender);
assertEquals(NAME, appender.getName());
assertEquals(2, appender.getCopyOfAttachedFiltersList().size());
Filter<ILoggingEvent> filter = appender.getCopyOfAttachedFiltersList().get(0);
assertTrue(filter instanceof MinMaxFilter);
assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin());
assertEquals(Level.ERROR, ((MinMaxFilter) filter).getMax());
filter = appender.getCopyOfAttachedFiltersList().get(1);
assertTrue(filter instanceof MinMaxFilter);
assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin());
assertEquals(Level.WARN, ((MinMaxFilter) filter).getMax());
// TODO: Test that both filters are being applied
}
@Test
public void testFileWithDailyRolling() {
BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN,
LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), true, Optional.of(5), Optional.of(10));
LoggerContext context = new LoggerContext();
Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder();
Appender<ILoggingEvent> appender = builder.build(context, encoder);
assertTrue(appender instanceof FileAppender);
assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder());
// TODO: Add tests on the (current private) methods
}
@Test
public void testFileWithDailyRollingWithoutSize() {
BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN,
LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), true, Optional.empty(), Optional.of(10));
LoggerContext context = new LoggerContext();
Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder();
Appender<ILoggingEvent> appender = builder.build(context, encoder);
assertTrue(appender instanceof FileAppender);
assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder());
// TODO: Add tests on the (current private) methods
}
@Test
public void testFileWithoutDailyRolling() {
BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN,
LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), false, Optional.of(5), Optional.of(10));
LoggerContext context = new LoggerContext();
Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder();
Appender<ILoggingEvent> appender = builder.build(context, encoder);
assertTrue(appender instanceof FileAppender);
assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder());
// TODO: Add tests on the (current private) methods
}
}