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);
+  }
 
 }