package io.dropwizard.servlets.tasks; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import com.google.common.collect.ImmutableMultimap; import org.junit.Before; import org.junit.Test; import java.io.PrintWriter; import java.io.StringWriter; import static org.assertj.core.api.Assertions.assertThat; public class LogConfigurationTaskTest { private static final Level DEFAULT_LEVEL = Level.ALL; private final LoggerContext loggerContext = new LoggerContext(); private final Logger logger1 = loggerContext.getLogger("logger.one"); private final Logger logger2 = loggerContext.getLogger("logger.two"); private final StringWriter stringWriter = new StringWriter(); private final PrintWriter output = new PrintWriter(stringWriter); private final LogConfigurationTask task = new LogConfigurationTask(loggerContext); @Before public void setUp() throws Exception { logger1.setLevel(DEFAULT_LEVEL); logger2.setLevel(DEFAULT_LEVEL); } @Test public void configuresSpecificLevelForALogger() throws Exception { // given ImmutableMultimap<String, String> parameters = ImmutableMultimap.of( "logger", "logger.one", "level", "debug"); // when task.execute(parameters, output); // then assertThat(logger1.getLevel()).isEqualTo(Level.DEBUG); assertThat(logger2.getLevel()).isEqualTo(DEFAULT_LEVEL); assertThat(stringWriter.toString()).isEqualTo(String.format("Configured logging level for logger.one to DEBUG%n")); } @Test public void configuresDefaultLevelForALogger() throws Exception { // given ImmutableMultimap<String, String> parameters = ImmutableMultimap.of( "logger", "logger.one"); // when task.execute(parameters, output); // then assertThat(logger1.getLevel()).isNull(); assertThat(logger2.getLevel()).isEqualTo(DEFAULT_LEVEL); assertThat(stringWriter.toString()).isEqualTo(String.format("Configured logging level for logger.one to null%n")); } @Test public void configuresLevelForMultipleLoggers() throws Exception { // given ImmutableMultimap<String, String> parameters = ImmutableMultimap.of( "logger", "logger.one", "logger", "logger.two", "level", "INFO"); // when task.execute(parameters, output); // then assertThat(logger1.getLevel()).isEqualTo(Level.INFO); assertThat(logger2.getLevel()).isEqualTo(Level.INFO); assertThat(stringWriter.toString()) .isEqualTo(String.format("Configured logging level for logger.one to INFO%nConfigured logging level for logger.two to INFO%n")); } }