package io.dropwizard.request.logging.old;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.Resources;
import io.dropwizard.configuration.YamlConfigurationFactory;
import io.dropwizard.jackson.DiscoverableSubtypeResolver;
import io.dropwizard.jackson.Jackson;
import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.logging.ConsoleAppenderFactory;
import io.dropwizard.logging.FileAppenderFactory;
import io.dropwizard.logging.SyslogAppenderFactory;
import io.dropwizard.request.logging.RequestLogFactory;
import io.dropwizard.validation.BaseValidator;
import org.eclipse.jetty.server.RequestLog;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.TimeZone;
import static org.assertj.core.api.Assertions.assertThat;
public class LogbackClassicRequestLogFactoryTest {
static {
BootstrapLogging.bootstrap();
}
private RequestLogFactory requestLog;
@Before
public void setUp() throws Exception {
final ObjectMapper objectMapper = Jackson.newObjectMapper();
objectMapper.getSubtypeResolver().registerSubtypes(ConsoleAppenderFactory.class, FileAppenderFactory.class,
SyslogAppenderFactory.class);
this.requestLog = new YamlConfigurationFactory<>(RequestLogFactory.class,
BaseValidator.newValidator(), objectMapper, "dw")
.build(new File(Resources.getResource("yaml/logbackClassicRequestLog.yml").toURI()));
}
@Test
public void testDeserialized() {
LogbackClassicRequestLogFactory classicRequestLogFactory = (LogbackClassicRequestLogFactory) requestLog;
assertThat(classicRequestLogFactory.getTimeZone()).isEqualTo(TimeZone.getTimeZone("Europe/Amsterdam"));
assertThat(classicRequestLogFactory.getAppenders()).hasSize(3).extractingResultOf("getClass").contains(
ConsoleAppenderFactory.class, FileAppenderFactory.class, SyslogAppenderFactory.class
);
}
@Test
public void testBuild() {
final RequestLog requestLog = this.requestLog.build("classic-request-log");
assertThat(requestLog).isInstanceOf(DropwizardSlf4jRequestLog.class);
}
@Test
public void isDiscoverable() throws Exception {
assertThat(new DiscoverableSubtypeResolver().getDiscoveredSubtypes())
.contains(LogbackClassicRequestLogFactory.class);
}
}