//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.logging;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import com.google.common.collect.Lists;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.spi.FilterReply;
public class LoggerFilterTest {
private static final String LOGGER_NAME = "uk.gov.dstl.baleen.testing.DummyAnnotator1";
private static final String TRUE_LOGGER_PACKAGE = "uk.gov.dstl.baleen.testing";
private static final String FALSE_LOGGER_PACKAGE = "uk.gov.dstl.baleen.testing.fail";
private static final List<String> TRUE_LOGGER_PACKAGE_LIST = Lists.newArrayList("uk.gov.dstl.baleen.testing", FALSE_LOGGER_PACKAGE);
private static final List<String> FALSE_LOGGER_PACKAGE_LIST = Lists.newArrayList(FALSE_LOGGER_PACKAGE, "uk.gov.dstl.baleen.testing.anotherfail");
@Test
public void testInclude(){
assertNeutral(LOGGER_NAME, LOGGER_NAME, false);
assertNeutral(LOGGER_NAME, TRUE_LOGGER_PACKAGE, false);
assertDeny(LOGGER_NAME, FALSE_LOGGER_PACKAGE, false);
}
@Test
public void testExclude(){
assertDeny(LOGGER_NAME, LOGGER_NAME, true);
assertDeny(LOGGER_NAME, TRUE_LOGGER_PACKAGE, true);
assertNeutral(LOGGER_NAME, FALSE_LOGGER_PACKAGE, true);
}
@Test
public void testNullTerminated(){
assertNeutral(LOGGER_NAME, LOGGER_NAME+"/0", false);
assertDeny(LOGGER_NAME+"Test", LOGGER_NAME+"/0", false);
}
@Test
public void testIncludeList(){
assertNeutral(LOGGER_NAME, TRUE_LOGGER_PACKAGE_LIST, false);
assertDeny(LOGGER_NAME, FALSE_LOGGER_PACKAGE_LIST, false);
}
@Test
public void testExcludeList(){
assertDeny(LOGGER_NAME, TRUE_LOGGER_PACKAGE_LIST, true);
assertNeutral(LOGGER_NAME, FALSE_LOGGER_PACKAGE_LIST, true);
}
private LoggerFilter create(String loggerName, Boolean exclude) {
return new LoggerFilter(loggerName, exclude);
}
private LoggerFilter create(List<String> loggerName, Boolean exclude) {
return new LoggerFilter(loggerName, exclude);
}
private void assertNeutral(String logger, String loggerName, Boolean exclude) {
LoggerFilter filter = create(loggerName, exclude);
LoggingEvent event = new LoggingEvent();
event.setLevel(Level.INFO);
event.setLoggerName(logger);
assertEquals(FilterReply.NEUTRAL, filter.decide(event));
}
private void assertDeny(String logger, String loggerName, Boolean exclude) {
LoggerFilter filter = create(loggerName, exclude);
LoggingEvent event = new LoggingEvent();
event.setLevel(Level.INFO);
event.setLoggerName(logger);
assertEquals(FilterReply.DENY, filter.decide(event));
}
private void assertNeutral(String logger, List<String> loggerName, Boolean exclude) {
LoggerFilter filter = create(loggerName, exclude);
LoggingEvent event = new LoggingEvent();
event.setLevel(Level.INFO);
event.setLoggerName(logger);
assertEquals(FilterReply.NEUTRAL, filter.decide(event));
}
private void assertDeny(String logger, List<String> loggerName, Boolean exclude) {
LoggerFilter filter = create(loggerName, exclude);
LoggingEvent event = new LoggingEvent();
event.setLevel(Level.INFO);
event.setLoggerName(logger);
assertEquals(FilterReply.DENY, filter.decide(event));
}
}