package biz.paluch.logging.gelf.jul;
import static org.mockito.Matchers.any;
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 static org.mockito.Mockito.when;
import java.util.logging.ErrorManager;
import java.util.logging.Level;
import java.util.logging.LogRecord;
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.GelfSenderConfiguration;
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 GelfLogHandlerErrorsTests {
public static final String THE_HOST = "the host";
public static final LogRecord MESSAGE = new LogRecord(Level.INFO, "message");
@Mock
private ErrorManager errorManager;
@Mock
private GelfSenderProvider senderProvider;
@Mock
private GelfMessageAssembler assembler;
private GelfLogHandler sut = new GelfLogHandler();
@BeforeEach
public void before() throws Exception {
GelfSenderFactory.addGelfSenderProvider(senderProvider);
when(senderProvider.supports(anyString())).thenReturn(true);
sut.setErrorManager(errorManager);
}
@AfterEach
public void after() throws Exception {
GelfSenderFactory.removeGelfSenderProvider(senderProvider);
GelfSenderFactory.removeAllAddedSenderProviders();
}
@Test
public void testRuntimeExceptionOnCreateSender() throws Exception {
sut.setGraylogHost(THE_HOST);
when(senderProvider.create(any(GelfSenderConfiguration.class))).thenThrow(new IllegalStateException());
sut.publish(MESSAGE);
verify(errorManager, atLeast(1)).error(anyString(), any(IllegalStateException.class), anyInt());
}
@Test
public void testInvalidMessage() throws Exception {
sut.publish(MESSAGE);
verify(errorManager, atLeast(1)).error(anyString(), ArgumentMatchers.<Exception> isNull(), anyInt());
}
@Test
public void testErrorOnSend() throws Exception {
sut.publish(MESSAGE);
verify(errorManager, atLeast(1)).error(anyString(), ArgumentMatchers.<Exception> isNull(), anyInt());
}
}