package rocks.inspectit.agent.java.sensor.method.jdbc; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.mockito.Matchers; import org.mockito.Mockito; import org.slf4j.Logger; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import rocks.inspectit.agent.java.sensor.method.jdbc.ConnectionMetaDataStorage.ConnectionMetaData; import rocks.inspectit.agent.java.sensor.method.jdbc.ConnectionMetaDataStorage.ConnectionMetaDataExtractor; import rocks.inspectit.agent.java.sensor.method.jdbc.ConnectionMetaDataStorage.JDBCUrlExtractor; @SuppressWarnings("PMD") public class ConnectionMetaDataExtractorTest { private ConnectionMetaDataExtractor extractor; private static final String URL = "url"; @BeforeMethod public void init() { extractor = new ConnectionMetaDataExtractor(); JDBCUrlExtractor jdbExtractor = mock(JDBCUrlExtractor.class); when(jdbExtractor.extractURLfromJDBCURL(anyString())).thenReturn(URL); ConnectionMetaDataExtractor.urlExtractor = jdbExtractor; } @Test public void extractInformation() throws SQLException { Connection mockedConnection = mock(Connection.class); DatabaseMetaData mockedMetaData = mock(DatabaseMetaData.class); String url = "url"; String version = "version"; String name = "name"; when(mockedConnection.getMetaData()).thenReturn(mockedMetaData); when(mockedMetaData.getURL()).thenReturn(url); when(mockedMetaData.getDatabaseProductName()).thenReturn(name); when(mockedMetaData.getDatabaseProductVersion()).thenReturn(version); ConnectionMetaData data = extractor.parse(mockedConnection); assertThat(data.product, is(name)); assertThat(data.version, is(version)); assertThat(data.url, is(url)); } @Test public void nullConnection() { Logger mockedLogger = Mockito.mock(Logger.class); ConnectionMetaDataExtractor.logger = mockedLogger; ConnectionMetaData data = extractor.parse(null); assertThat(data, is(nullValue())); Mockito.verify(mockedLogger).warn(Matchers.anyString()); } @Test public void closedConnection() throws SQLException { Connection mockedConnection = mock(Connection.class); when(mockedConnection.isClosed()).thenReturn(true); ConnectionMetaData data = extractor.parse(mockedConnection); assertThat(data, is(nullValue())); } @Test public void exceptionOnGet() throws SQLException { Connection mockedConnection = mock(Connection.class); when(mockedConnection.getMetaData()).thenThrow(new RuntimeException("test")); ConnectionMetaData data = extractor.parse(mockedConnection); // returns empty connection data object assertThat(data, is(not(nullValue()))); assertThat(data.product, is(nullValue())); assertThat(data.version, is(nullValue())); assertThat(data.url, is(nullValue())); } }