This is an automated email from the ASF dual-hosted git repository.

lgallinat pushed a commit to branch feature/GEODE-3781
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-3781 by this 
push:
     new 3019cf5  Add validation for region mapping and connection params 
mapping.
3019cf5 is described below

commit 3019cf54144e5e9cb78ffb5879d149de473208a5
Author: Lynn Gallinat <lgalli...@pivotal.io>
AuthorDate: Fri Dec 15 16:01:25 2017 -0800

    Add validation for region mapping and connection params mapping.
---
 .../jdbc/internal/ConnectionConfigBuilder.java         | 11 +++++++++++
 .../connectors/jdbc/internal/RegionMappingBuilder.java | 11 +++++++++++
 .../apache/geode/connectors/jdbc/JdbcDUnitTest.java    |  3 +--
 .../jdbc/internal/xml/ConnectionConfigBuilderTest.java | 14 ++++++++++++++
 .../jdbc/internal/xml/RegionMappingBuilderTest.java    | 18 ++++++++++++++++++
 5 files changed, 55 insertions(+), 2 deletions(-)

diff --git 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/ConnectionConfigBuilder.java
 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/ConnectionConfigBuilder.java
index 503b60d..308f61e 100644
--- 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/ConnectionConfigBuilder.java
+++ 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/ConnectionConfigBuilder.java
@@ -55,7 +55,11 @@ public class ConnectionConfigBuilder {
       parameters = null;
     } else {
       for (String param : params) {
+        if (param.isEmpty()) {
+          continue;
+        }
         String[] keyValuePair = param.split(PARAMS_DELIMITER);
+        validateParam(keyValuePair, param);
         if (keyValuePair.length == 2) {
           parameters.put(keyValuePair[0], keyValuePair[1]);
         }
@@ -64,6 +68,13 @@ public class ConnectionConfigBuilder {
     return this;
   }
 
+  private void validateParam(String[] paramKeyValue, String param) {
+    if ((paramKeyValue.length <= 1) || paramKeyValue[0].isEmpty() || 
paramKeyValue[1].isEmpty()) {
+      throw new IllegalArgumentException("Parameter '" + param
+          + "' is not of the form 'parameterName" + PARAMS_DELIMITER + 
"value'");
+    }
+  }
+
   public ConnectionConfiguration build() {
     return new ConnectionConfiguration(name, url, user, password, parameters);
   }
diff --git 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/RegionMappingBuilder.java
 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/RegionMappingBuilder.java
index 300c2d4..302f6cd 100644
--- 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/RegionMappingBuilder.java
+++ 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/RegionMappingBuilder.java
@@ -71,7 +71,11 @@ public class RegionMappingBuilder {
       fieldToColumnMap = null;
     } else {
       for (String mapping : mappings) {
+        if (mapping.isEmpty()) {
+          continue;
+        }
         String[] keyValuePair = mapping.split(MAPPINGS_DELIMITER);
+        validateParam(keyValuePair, mapping);
         if (keyValuePair.length == 2) {
           fieldToColumnMap.put(keyValuePair[0], keyValuePair[1]);
         }
@@ -80,6 +84,13 @@ public class RegionMappingBuilder {
     return this;
   }
 
+  private void validateParam(String[] paramKeyValue, String mapping) {
+    if (paramKeyValue.length <= 1 || paramKeyValue[0].isEmpty() || 
paramKeyValue[1].isEmpty()) {
+      throw new IllegalArgumentException("Field to column mapping '" + mapping
+          + "' is not of the form 'Field" + MAPPINGS_DELIMITER + "Column'");
+    }
+  }
+
   public RegionMapping build() {
     return new RegionMapping(regionName, pdxClassName, tableName, 
connectionConfigName,
         primaryKeyInValue, fieldToColumnMap);
diff --git 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcDUnitTest.java
 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcDUnitTest.java
index 63a1161..293fc51 100644
--- 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcDUnitTest.java
+++ 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcDUnitTest.java
@@ -245,8 +245,7 @@ public class JdbcDUnitTest implements Serializable {
 
   private void createJdbcConnection() {
     final String commandStr = "create jdbc-connection --name=" + 
CONNECTION_NAME + " --url="
-        + CONNECTION_URL
-        + " 
--params=param1:value1,this.is.param2:value.2,this-is-value-3,value-3,this_is_param_4:value_4";
+        + CONNECTION_URL;
     gfsh.executeAndAssertThat(commandStr).statusIsSuccess();
   }
 
diff --git 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ConnectionConfigBuilderTest.java
 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ConnectionConfigBuilderTest.java
index cd83690..7afcf83 100644
--- 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ConnectionConfigBuilderTest.java
+++ 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ConnectionConfigBuilderTest.java
@@ -15,6 +15,7 @@
 package org.apache.geode.connectors.jdbc.internal.xml;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -49,4 +50,17 @@ public class ConnectionConfigBuilderTest {
     assertThat(config.getConnectionProperties()).containsEntry("param1", 
"value1")
         .containsEntry("param2", "value2");
   }
+
+  @Test
+  public void throwsExceptionWithInvalidParams() {
+    ConnectionConfigBuilder config = new ConnectionConfigBuilder();
+    assertThatThrownBy(() -> config.withParameters(new String[] 
{"param1value1"}))
+        .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(() -> config.withParameters(new String[] 
{":param1value1"}))
+        .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(() -> config.withParameters(new String[] 
{"param1value1:"}))
+        .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(() -> config.withParameters(new String[] {":"}))
+        .isInstanceOf(IllegalArgumentException.class);
+  }
 }
diff --git 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/RegionMappingBuilderTest.java
 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/RegionMappingBuilderTest.java
index 695556d..d7f31a5 100644
--- 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/RegionMappingBuilderTest.java
+++ 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/RegionMappingBuilderTest.java
@@ -15,6 +15,7 @@
 package org.apache.geode.connectors.jdbc.internal.xml;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -61,4 +62,21 @@ public class RegionMappingBuilderTest {
     
assertThat(regionMapping.getColumnNameForField("field1")).isEqualTo("column1");
     
assertThat(regionMapping.getColumnNameForField("field2")).isEqualTo("column2");
   }
+
+  @Test
+  public void throwsExceptionForInvalidFieldMappings() {
+    RegionMappingBuilder regionMappingbuilder = new RegionMappingBuilder();
+
+    assertThatThrownBy(
+        () -> regionMappingbuilder.withFieldToColumnMappings(new String[] 
{"field1column1"}))
+            .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(
+        () -> regionMappingbuilder.withFieldToColumnMappings(new String[] 
{":field1column1"}))
+            .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(
+        () -> regionMappingbuilder.withFieldToColumnMappings(new String[] 
{"field1column1:"}))
+            .isInstanceOf(IllegalArgumentException.class);
+    assertThatThrownBy(() -> 
regionMappingbuilder.withFieldToColumnMappings(new String[] {":"}))
+        .isInstanceOf(IllegalArgumentException.class);
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <commits@geode.apache.org>'].

Reply via email to