package biz.paluch.logging.gelf.logback; import static org.mockito.Matchers.any; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; 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.Mock; import biz.paluch.logging.gelf.intern.GelfSenderFactory; import biz.paluch.logging.gelf.intern.GelfSenderProvider; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.core.Context; import ch.qos.logback.core.status.Status; import ch.qos.logback.core.status.StatusManager; import external.MockitoExtension; @ExtendWith(MockitoExtension.class) public class GelfLogbackAppenderErrorsUnitTests { public static final String THE_HOST = "the host"; public static final LoggingEvent LOGGING_EVENT = new LoggingEvent("my.class", new LoggerContext().getLogger("my.class"), Level.INFO, "message", null, null); @Mock private GelfSenderProvider senderProvider; @Mock private Context context; @Mock private StatusManager statusManager; private GelfLogbackAppender sut = new GelfLogbackAppender(); @BeforeEach public void before() throws Exception { GelfSenderFactory.addGelfSenderProvider(senderProvider); sut.setContext(context); when(context.getStatusManager()).thenReturn(statusManager); LOGGING_EVENT.setCallerData(new StackTraceElement[] { new StackTraceElement("a", "b", "c", 1) }); } @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(statusManager, atLeast(1)).add(any(Status.class)); } @Test public void testInvalidMessage() throws Exception { sut.append(LOGGING_EVENT); verify(statusManager, atLeast(1)).add(any(Status.class)); } @Test public void testErrorOnSend() throws Exception { sut.append(LOGGING_EVENT); verify(statusManager, atLeast(1)).add(any(Status.class)); } }