You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2019/01/03 00:09:14 UTC
[geode] branch feature/GEODE-6225 updated: added unit test coverage
of TableMetaDataManager
This is an automated email from the ASF dual-hosted git repository.
dschneider pushed a commit to branch feature/GEODE-6225
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6225 by this push:
new 1900921 added unit test coverage of TableMetaDataManager
1900921 is described below
commit 1900921787fa5c6afed141b0f036e7cf0ca9701f
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Wed Jan 2 16:08:43 2019 -0800
added unit test coverage of TableMetaDataManager
---
.../jdbc/internal/TableMetaDataManager.java | 30 ++-
.../jdbc/internal/TableMetaDataManagerTest.java | 222 +++++++++++++++++++++
2 files changed, 235 insertions(+), 17 deletions(-)
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
index b3ed8aa..d8ec81a 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
@@ -52,7 +52,7 @@ public class TableMetaDataManager {
* If the region mapping has been given a table name then return it.
* Otherwise return the region mapping's region name as the table name.
*/
- private String computeTableName(RegionMapping regionMapping) {
+ String computeTableName(RegionMapping regionMapping) {
String result = regionMapping.getTableName();
if (result == null) {
result = regionMapping.getRegionName();
@@ -87,30 +87,26 @@ public class TableMetaDataManager {
return quoteString;
}
- private String getCatalogNameFromMetaData(DatabaseMetaData metaData, RegionMapping regionMapping)
+ String getCatalogNameFromMetaData(DatabaseMetaData metaData, RegionMapping regionMapping)
throws SQLException {
- String catalogFilter = DEFAULT_CATALOG;
- if (regionMapping.getCatalog() != null && regionMapping.getCatalog().length() > 0) {
- catalogFilter = regionMapping.getCatalog();
- }
- if (catalogFilter.equals("")) {
- return catalogFilter;
+ String catalogFilter = regionMapping.getCatalog();
+ if (catalogFilter == null || catalogFilter.isEmpty()) {
+ return DEFAULT_CATALOG;
}
try (ResultSet catalogs = metaData.getCatalogs()) {
return findMatchInResultSet(catalogFilter, catalogs, "TABLE_CAT", "catalog");
}
}
- private String getSchemaNameFromMetaData(DatabaseMetaData metaData, RegionMapping regionMapping,
+ String getSchemaNameFromMetaData(DatabaseMetaData metaData, RegionMapping regionMapping,
String catalogFilter) throws SQLException {
- String schemaFilter = DEFAULT_SCHEMA;
- if (regionMapping.getSchema() != null && regionMapping.getSchema().length() > 0) {
- schemaFilter = regionMapping.getSchema();
- } else if ("PostgreSQL".equals(metaData.getDatabaseProductName())) {
- schemaFilter = "public";
- }
- if (schemaFilter.equals("")) {
- return schemaFilter;
+ String schemaFilter = regionMapping.getSchema();
+ if (schemaFilter == null || schemaFilter.isEmpty()) {
+ if ("PostgreSQL".equals(metaData.getDatabaseProductName())) {
+ schemaFilter = "public";
+ } else {
+ return DEFAULT_SCHEMA;
+ }
}
try (ResultSet schemas = metaData.getSchemas(catalogFilter, "%")) {
return findMatchInResultSet(schemaFilter, schemas, "TABLE_SCHEM", "schema");
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerTest.java
index e626150f..c5c3520 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerTest.java
@@ -431,5 +431,227 @@ public class TableMetaDataManagerTest {
when(tablesResultSet.getString("TABLE_NAME")).thenReturn(TABLE_NAME);
}
+ @Test
+ public void computeTableNameGivenRegionMappingTableNameReturnsIt() {
+ when(regionMapping.getTableName()).thenReturn("myTableName");
+
+ String result = tableMetaDataManager.computeTableName(regionMapping);
+
+ assertThat(result).isEqualTo("myTableName");
+ }
+
+ @Test
+ public void computeTableNameGivenRegionMappingRegionNameReturnsItIfTableNameIsNull() {
+ when(regionMapping.getTableName()).thenReturn(null);
+ when(regionMapping.getRegionName()).thenReturn("myRegionName");
+
+ String result = tableMetaDataManager.computeTableName(regionMapping);
+
+ assertThat(result).isEqualTo("myRegionName");
+ }
+
+ @Test
+ public void getCatalogNameFromMetaDataGivenNullCatalogReturnsEmptyString() throws SQLException {
+ when(regionMapping.getCatalog()).thenReturn(null);
+
+ String result = tableMetaDataManager.getCatalogNameFromMetaData(null, regionMapping);
+
+ assertThat(result).isEqualTo("");
+ }
+
+ @Test
+ public void getCatalogNameFromMetaDataGivenEmptyCatalogReturnsEmptyString() throws SQLException {
+ when(regionMapping.getCatalog()).thenReturn("");
+
+ String result = tableMetaDataManager.getCatalogNameFromMetaData(null, regionMapping);
+
+ assertThat(result).isEqualTo("");
+ }
+
+ @Test
+ public void getCatalogNameFromMetaDataGivenCatalogReturnIt() throws SQLException {
+ String myCatalog = "myCatalog";
+ when(regionMapping.getCatalog()).thenReturn(myCatalog);
+ ResultSet catalogsResultSet = mock(ResultSet.class);
+ when(catalogsResultSet.next()).thenReturn(true).thenReturn(false);
+ when(catalogsResultSet.getString("TABLE_CAT")).thenReturn(myCatalog);
+ when(databaseMetaData.getCatalogs()).thenReturn(catalogsResultSet);
+
+ String result =
+ tableMetaDataManager.getCatalogNameFromMetaData(databaseMetaData, regionMapping);
+
+ assertThat(result).isEqualTo(myCatalog);
+ }
+
+ @Test
+ public void getSchemaNameFromMetaDataGivenNullSchemaReturnsEmptyString() throws SQLException {
+ when(regionMapping.getSchema()).thenReturn(null);
+
+ String result =
+ tableMetaDataManager.getSchemaNameFromMetaData(databaseMetaData, regionMapping, null);
+
+ assertThat(result).isEqualTo("");
+ }
+
+ @Test
+ public void getSchemaNameFromMetaDataGivenEmptySchemaReturnsEmptyString() throws SQLException {
+ when(regionMapping.getSchema()).thenReturn("");
+
+ String result =
+ tableMetaDataManager.getSchemaNameFromMetaData(databaseMetaData, regionMapping, null);
+
+ assertThat(result).isEqualTo("");
+ }
+
+ @Test
+ public void getSchemaNameFromMetaDataGivenSchemaReturnsIt() throws SQLException {
+ String mySchema = "mySchema";
+ when(regionMapping.getSchema()).thenReturn(mySchema);
+ ResultSet schemasResultSet = mock(ResultSet.class);
+ when(schemasResultSet.next()).thenReturn(true).thenReturn(false);
+ when(schemasResultSet.getString("TABLE_SCHEM")).thenReturn(mySchema);
+ String catalogFilter = "myCatalogFilter";
+ when(databaseMetaData.getSchemas(catalogFilter, "%")).thenReturn(schemasResultSet);
+
+ String result = tableMetaDataManager.getSchemaNameFromMetaData(databaseMetaData, regionMapping,
+ catalogFilter);
+
+ assertThat(result).isEqualTo(mySchema);
+ }
+
+ @Test
+ public void getSchemaNameFromMetaDataGivenNullSchemaOnPostgresReturnsPublic()
+ throws SQLException {
+ String defaultPostgresSchema = "public";
+ when(regionMapping.getSchema()).thenReturn(null);
+ ResultSet schemasResultSet = mock(ResultSet.class);
+ when(schemasResultSet.next()).thenReturn(true).thenReturn(false);
+ when(schemasResultSet.getString("TABLE_SCHEM")).thenReturn(defaultPostgresSchema);
+ String catalogFilter = "myCatalogFilter";
+ when(databaseMetaData.getSchemas(catalogFilter, "%")).thenReturn(schemasResultSet);
+ when(databaseMetaData.getDatabaseProductName()).thenReturn("PostgreSQL");
+
+ String result = tableMetaDataManager.getSchemaNameFromMetaData(databaseMetaData, regionMapping,
+ catalogFilter);
+
+ assertThat(result).isEqualTo(defaultPostgresSchema);
+ }
+
+ @Test
+ public void findMatchInResultSetGivenEmptyResultSetThrows() throws SQLException {
+ String stringToFind = "stringToFind";
+ ResultSet resultSet = mock(ResultSet.class);
+ String column = "column";
+ String description = "description";
+
+ assertThatThrownBy(
+ () -> tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column,
+ description))
+ .isInstanceOf(JdbcConnectorException.class)
+ .hasMessageContaining(
+ "No " + description + " was found that matches \"" + stringToFind + '"');
+ }
+
+ @Test
+ public void findMatchInResultSetGivenNullResultSetThrows() throws SQLException {
+ String stringToFind = "stringToFind";
+ ResultSet resultSet = null;
+ String column = "column";
+ String description = "description";
+
+ assertThatThrownBy(
+ () -> tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column,
+ description))
+ .isInstanceOf(JdbcConnectorException.class)
+ .hasMessageContaining(
+ "No " + description + " was found that matches \"" + stringToFind + '"');
+ }
+
+ @Test
+ public void findMatchInResultSetGivenResultSetWithNoMatchThrows() throws SQLException {
+ String stringToFind = "stringToFind";
+ String column = "column";
+ String description = "description";
+ ResultSet resultSet = mock(ResultSet.class);
+ when(resultSet.next()).thenReturn(true).thenReturn(false);
+ when(resultSet.getString(column)).thenReturn("doesNotMatch");
+
+ assertThatThrownBy(
+ () -> tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column,
+ description))
+ .isInstanceOf(JdbcConnectorException.class)
+ .hasMessageContaining(
+ "No " + description + " was found that matches \"" + stringToFind + '"');
+ }
+
+ @Test
+ public void findMatchInResultSetGivenResultSetWithMultipleExactMatchesThrows()
+ throws SQLException {
+ String stringToFind = "stringToFind";
+ String column = "column";
+ String description = "description";
+ ResultSet resultSet = mock(ResultSet.class);
+ when(resultSet.next()).thenReturn(true).thenReturn(true).thenReturn(false);
+ when(resultSet.getString(column)).thenReturn("stringToFind");
+
+ assertThatThrownBy(
+ () -> tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column,
+ description))
+ .isInstanceOf(JdbcConnectorException.class)
+ .hasMessageContaining(
+ "Multiple " + description + "s were found that match \"" + stringToFind + '"');
+ }
+
+ @Test
+ public void findMatchInResultSetGivenResultSetWithMultipleInexactMatchesThrows()
+ throws SQLException {
+ String stringToFind = "stringToFind";
+ String column = "column";
+ String description = "description";
+ ResultSet resultSet = mock(ResultSet.class);
+ when(resultSet.next()).thenReturn(true).thenReturn(true).thenReturn(false);
+ when(resultSet.getString(column)).thenReturn("STRINGToFind");
+
+ assertThatThrownBy(
+ () -> tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column,
+ description))
+ .isInstanceOf(JdbcConnectorException.class)
+ .hasMessageContaining(
+ "Multiple " + description + "s were found that match \"" + stringToFind + '"');
+ }
+
+ @Test
+ public void findMatchInResultSetGivenResultSetWithOneInexactMatchReturnsIt() throws SQLException {
+ String stringToFind = "stringToFind";
+ String column = "column";
+ String description = "description";
+ ResultSet resultSet = mock(ResultSet.class);
+ when(resultSet.next()).thenReturn(true).thenReturn(false);
+ String inexactMatch = "STRINGToFind";
+ when(resultSet.getString(column)).thenReturn(inexactMatch);
+
+ String result =
+ tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column, description);
+
+ assertThat(result).isEqualTo(inexactMatch);
+ }
+
+ @Test
+ public void findMatchInResultSetGivenResultSetWithOneExactMatchAndMultipleInexactReturnsTheExactMatch()
+ throws SQLException {
+ String stringToFind = "stringToFind";
+ String column = "column";
+ String description = "description";
+ ResultSet resultSet = mock(ResultSet.class);
+ when(resultSet.next()).thenReturn(true).thenReturn(true).thenReturn(true).thenReturn(false);
+ String inexactMatch = "STRINGToFind";
+ when(resultSet.getString(column)).thenReturn(inexactMatch).thenReturn(stringToFind)
+ .thenReturn(inexactMatch);
+
+ String result =
+ tableMetaDataManager.findMatchInResultSet(stringToFind, resultSet, column, description);
+
+ assertThat(result).isEqualTo(stringToFind);
+ }
}