package biz.paluch.logging.gelf.intern.sender; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; import java.net.DatagramSocket; import java.net.UnknownHostException; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.function.Executable; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import biz.paluch.logging.gelf.intern.ErrorReporter; import biz.paluch.logging.gelf.intern.GelfMessage; import external.MockitoExtension; /** * @author Mark Paluch */ @ExtendWith(MockitoExtension.class) public class GelfUDPSenderUnitTests { @Mock private ErrorReporter errorReporter; @Captor private ArgumentCaptor<Exception> captor; @Test public void unreachablePacketsShouldBeDiscardedSilently() throws Exception { GelfUDPSender udpSender = new GelfUDPSender("127.0.0.1", 65534, errorReporter); udpSender.sendMessage(new GelfMessage()); verifyZeroInteractions(errorReporter); } @Test public void unknownHostShouldThrowException() throws Exception { assertThrows(UnknownHostException.class, new Executable() { @Override public void execute() throws Throwable { new GelfUDPSender("unknown.host.unknown", 65534, errorReporter); } }); } @Test public void shouldSendDataToOpenPort() throws Exception { int port = randomPort(); DatagramSocket socket = new DatagramSocket(port); GelfUDPSender udpSender = new GelfUDPSender("127.0.0.1", port, errorReporter); GelfMessage gelfMessage = new GelfMessage("short", "long", 1, "info"); gelfMessage.setHost("host"); udpSender.sendMessage(gelfMessage); GelfUDPSender spy = spy(udpSender); spy.sendMessage(gelfMessage); verify(spy).isConnected(); verify(spy, never()).connect(); socket.close(); spy.close(); } @Test public void shouldSendDataToClosedPort() throws Exception { int port = randomPort(); DatagramSocket socket = new DatagramSocket(port); GelfUDPSender udpSender = new GelfUDPSender("127.0.0.1", port, errorReporter); socket.close(); GelfMessage gelfMessage = new GelfMessage("short", "long", 1, "info"); gelfMessage.setHost("host"); udpSender.sendMessage(gelfMessage); GelfUDPSender spy = spy(udpSender); doReturn(true).when(spy).isConnected(); spy.sendMessage(gelfMessage); verify(spy).isConnected(); verify(spy, never()).connect(); spy.close(); } protected int randomPort() { Random random = new Random(); return random.nextInt(50000) + 1024; } }