package brave.p6spy; import brave.Span; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import zipkin.Endpoint; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class TracingJdbcEventListenerTest { @Mock Connection connection; @Mock DatabaseMetaData metaData; @Mock Span span; String url = "jdbc:mysql://127.0.0.1:5555/mydatabase"; @Test public void parseServerAddress_ipAndPortFromUrl() throws SQLException { when(connection.getMetaData()).thenReturn(metaData); when(metaData.getURL()).thenReturn(url); new TracingJdbcEventListener("").parseServerAddress(connection, span); verify(span).remoteEndpoint(Endpoint.builder().serviceName("") .ipv4(127 << 24 | 1).port(5555).build()); } @Test public void parseServerAddress_serviceNameFromDatabaseName() throws SQLException { when(connection.getMetaData()).thenReturn(metaData); when(metaData.getURL()).thenReturn(url); when(connection.getCatalog()).thenReturn("mydatabase"); new TracingJdbcEventListener("").parseServerAddress(connection, span); verify(span).remoteEndpoint(Endpoint.builder().serviceName("mydatabase") .ipv4(127 << 24 | 1).port(5555).build()); } @Test public void parseServerAddress_overrideServiceName() throws SQLException { when(connection.getMetaData()).thenReturn(metaData); when(metaData.getURL()).thenReturn(url); new TracingJdbcEventListener("foo").parseServerAddress(connection, span); verify(span).remoteEndpoint(Endpoint.builder().serviceName("foo") .ipv4(127 << 24 | 1).port(5555).build()); } @Test public void parseServerAddress_doesntNsLookup() throws SQLException { when(connection.getMetaData()).thenReturn(metaData); when(metaData.getURL()).thenReturn("jdbc:mysql://localhost:5555/mydatabase"); new TracingJdbcEventListener("").parseServerAddress(connection, span); verifyNoMoreInteractions(span); } @Test public void parseServerAddress_doesntCrash() throws SQLException { when(connection.getMetaData()).thenThrow(new SQLException()); verifyNoMoreInteractions(span); } }