package biz.paluch.logging.gelf.intern; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Collections; import java.util.HashMap; 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.GelfMessageAssembler; import external.MockitoExtension; /** * @author Mark Paluch */ @ExtendWith(MockitoExtension.class) public class GelfSenderFactoryUnitTests { public static final String THE_HOST = "thehost"; @Mock private ErrorReporter errorReporter; @Mock private GelfSender sender; @Mock private GelfSenderProvider senderProvider; @Mock private GelfMessageAssembler assembler; @BeforeEach public void before() throws Exception { GelfSenderFactory.addGelfSenderProvider(senderProvider); when(assembler.getHost()).thenReturn(THE_HOST); } @AfterEach public void after() throws Exception { GelfSenderFactory.removeGelfSenderProvider(senderProvider); GelfSenderFactory.removeAllAddedSenderProviders(); } @Test public void testCreateSender() throws Exception { when(assembler.getHost()).thenReturn(THE_HOST); mockSupports(); when(senderProvider.create(any(GelfSenderConfiguration.class))).thenReturn(sender); GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isSameAs(sender); } @Test public void testCreateSenderFailUdp() throws Exception { GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isNull(); } @Test public void testCreateSenderFailTcp() throws Exception { reset(assembler); when(assembler.getHost()).thenReturn("tcp:" + THE_HOST); GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isNull(); } @Test public void testCreateSenderFailUnknownHostException() throws Exception { mockSupports(); when(senderProvider.create(any(GelfSenderConfiguration.class))).thenThrow(new UnknownHostException()); GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isNull(); verify(errorReporter).reportError(anyString(), any(UnknownHostException.class)); } @Test public void testCreateSenderFailSocketException() throws Exception { mockSupports(); when(senderProvider.create(any(GelfSenderConfiguration.class))).thenThrow(new SocketException()); GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isNull(); verify(errorReporter).reportError(anyString(), any(SocketException.class)); } @Test public void testCreateSenderFailIOException() throws Exception { mockSupports(); when(senderProvider.create(any(GelfSenderConfiguration.class))).thenThrow(new IOException()); GelfSender result = GelfSenderFactory.createSender(assembler, errorReporter, Collections.EMPTY_MAP); assertThat(result).isNull(); verify(errorReporter).reportError(anyString(), any(IOException.class)); } @Test public void testCreateSenderFailNPE() throws Exception { mockSupports(); when(senderProvider.create(any(GelfSenderConfiguration.class))).thenThrow(new NullPointerException()); try { GelfSenderFactory.createSender(assembler, errorReporter, new HashMap<String, Object>()); fail("Missing NullPointerException"); } catch (Exception e) { assertThat(e).isInstanceOf(NullPointerException.class); } } private void mockSupports() { when(senderProvider.supports(THE_HOST)).thenReturn(true); } }