package biz.paluch.logging.gelf.log4j;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.verify;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.xml.DOMConfigurator;
import org.junit.Ignore;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import biz.paluch.logging.gelf.GelfMessageAssembler;
import biz.paluch.logging.gelf.intern.GelfSenderFactory;
import biz.paluch.logging.gelf.intern.GelfSenderProvider;
import external.MockitoExtension;
/**
* @author Mark Paluch
*/
@ExtendWith(MockitoExtension.class)
public class GelfLogAppenderErrorsUnitTests {
public static final String THE_HOST = "the host";
public static final LoggingEvent LOGGING_EVENT = new LoggingEvent("my.class", Logger.getLogger("my.class"),
org.apache.log4j.Level.INFO, "message", null);
@Mock
private ErrorHandler errorHandler;
@Mock
private GelfSenderProvider senderProvider;
@Mock
private GelfMessageAssembler assembler;
private GelfLogAppender sut = new GelfLogAppender();
@BeforeEach
public void before() throws Exception {
GelfSenderFactory.addGelfSenderProvider(senderProvider);
sut.setErrorHandler(errorHandler);
}
@AfterEach
public void after() throws Exception {
GelfSenderFactory.removeGelfSenderProvider(senderProvider);
GelfSenderFactory.removeAllAddedSenderProviders();
}
@Test
public void testRuntimeExceptionOnCreateSender() throws Exception {
sut.setGraylogHost(THE_HOST);
sut.append(LOGGING_EVENT);
verify(errorHandler, atLeast(1)).error(anyString(), ArgumentMatchers.<Exception> isNull(), anyInt());
}
@Test
public void testInvalidMessage() throws Exception {
sut.append(LOGGING_EVENT);
verify(errorHandler, atLeast(1)).error(anyString(), ArgumentMatchers.<Exception> isNull(), anyInt());
}
@Test
public void testErrorOnSend() throws Exception {
sut.append(LOGGING_EVENT);
verify(errorHandler, atLeast(1)).error(anyString(), ArgumentMatchers.<Exception> isNull(), anyInt());
}
@Test
@Ignore("Flakey during to execution environment")
public void gelfPortNotReachable() throws Exception {
LogManager.getLoggerRepository().resetConfiguration();
DOMConfigurator.configure(getClass().getResource("/log4j/log4j-gelf-not-reachable.xml"));
Logger logger = Logger.getLogger(getClass());
logger.info(LOGGING_EVENT);
}
}