You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jc...@apache.org on 2019/01/29 22:42:01 UTC

[geode] branch feature/GEODE-6273 updated: Added tests to DescribeMappingDUnitTest for multi group

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

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


The following commit(s) were added to refs/heads/feature/GEODE-6273 by this push:
     new 71430a1  Added tests to DescribeMappingDUnitTest for multi group
71430a1 is described below

commit 71430a117480176757d168e8e6f8c0d08e186083
Author: Ben Ross <br...@pivotal.io>
AuthorDate: Tue Jan 29 14:40:55 2019 -0800

    Added tests to DescribeMappingDUnitTest for multi group
    
    - Modified DescribeMappingCommand to allow output of multiple mappings
    
    Co-authored-by: Jianxia Chen <jc...@pivotal.io>
    Co-authored-by: Ben Ross <br...@pivotal.io>
---
 .../cli/DescribeMappingCommandDUnitTest.java       | 55 ++++++++++++++++++++++
 .../jdbc/internal/cli/DescribeMappingCommand.java  | 24 ++++++----
 .../util/internal/DescribeMappingResult.java       | 12 +++++
 .../util/DescribeMappingCommandTest.java           | 13 +++--
 .../test/junit/assertions/CommandResultAssert.java | 11 ++++-
 5 files changed, 97 insertions(+), 18 deletions(-)

diff --git a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandDUnitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandDUnitTest.java
index 92dece5..9263ebe 100644
--- a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandDUnitTest.java
+++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandDUnitTest.java
@@ -93,6 +93,7 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
 
     commandResultAssert.statusIsSuccess();
+    commandResultAssert.doesNotContainOutput("Mapping for group");
     commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
     commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
@@ -131,6 +132,7 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
 
     commandResultAssert.statusIsSuccess();
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group1");
     commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
     commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
@@ -216,6 +218,7 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
 
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group1");
     commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
     commandResultAssert.containsKeyValuePair(TABLE_NAME, "testTable");
     commandResultAssert.containsKeyValuePair(PDX_NAME, "myPdxClass");
@@ -243,6 +246,56 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
 
     csb.addOption(REGION_NAME, regionName);
+    csb.addOption(GROUP_NAME, groupName1 + "," + groupName2);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(TABLE_NAME, "testTable");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(SYNCHRONOUS_NAME, "false");
+    csb.addOption(ID_NAME, "myId");
+    csb.addOption(CATALOG_NAME, "myCatalog");
+    csb.addOption(SCHEMA_NAME, "mySchema");
+
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
+
+    csb = new CommandStringBuilder(DESCRIBE_MAPPING).addOption(REGION_NAME,
+        regionName).addOption(GROUP_NAME, groupName1 + "," + groupName2);
+
+    CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
+
+    commandResultAssert.statusIsSuccess();
+    commandResultAssert.containsKeyValuePair(REGION_NAME,
+        convertRegionPathToName(regionName));
+
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group1");
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group2");
+    commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
+    commandResultAssert.containsKeyValuePair(TABLE_NAME, "testTable");
+    commandResultAssert.containsKeyValuePair(PDX_NAME, "myPdxClass");
+    commandResultAssert.containsKeyValuePair(SYNCHRONOUS_NAME, "false");
+    commandResultAssert.containsKeyValuePair(ID_NAME, "myId");
+    commandResultAssert.containsKeyValuePair(CATALOG_NAME, "myCatalog");
+    commandResultAssert.containsKeyValuePair(SCHEMA_NAME, "mySchema");
+  }
+
+  @Test
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
+  public void describesExistingAsyncMappingsWithSameRegionOnDifferentGroupsWithDifferentMappings(
+      String regionName)
+      throws Exception {
+    String groupName1 = "group1";
+    String groupName2 = "group2";
+    locator = startupRule.startLocatorVM(0);
+    startupRule.startServerVM(1, groupName1, locator.getPort());
+    startupRule.startServerVM(2, groupName2, locator.getPort());
+
+    gfsh.connectAndVerify(locator);
+    gfsh.executeAndAssertThat("create region --name=" + regionName + " --type=REPLICATE --group="
+        + groupName1 + "," + groupName2)
+        .statusIsSuccess();
+
+    CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
+
+    csb.addOption(REGION_NAME, regionName);
     csb.addOption(GROUP_NAME, groupName1);
     csb.addOption(DATA_SOURCE_NAME, "connection");
     csb.addOption(TABLE_NAME, "testTable");
@@ -277,6 +330,7 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
 
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group1");
     commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
     commandResultAssert.containsKeyValuePair(TABLE_NAME, "testTable");
     commandResultAssert.containsKeyValuePair(PDX_NAME, "myPdxClass");
@@ -294,6 +348,7 @@ public class DescribeMappingCommandDUnitTest implements Serializable {
     commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
 
+    commandResultAssert.containsKeyValuePair("Mapping for group", "group2");
     commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection2");
     commandResultAssert.containsKeyValuePair(TABLE_NAME, "testTable2");
     commandResultAssert.containsKeyValuePair(PDX_NAME, "myPdxClass2");
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
index c718103..8144778 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
@@ -81,12 +81,13 @@ public class DescribeMappingCommand extends GfshCommand {
         for (String group : groups) {
           CacheConfig cacheConfig = getCacheConfig(configService, group);
           RegionConfig regionConfig = checkForRegion(regionName, cacheConfig, group);
-          describeMappingResults.addAll(getMappingsFromRegionConfig(cacheConfig, regionConfig));
+          describeMappingResults
+              .addAll(getMappingsFromRegionConfig(cacheConfig, regionConfig, group));
         }
       } else {
         CacheConfig cacheConfig = getCacheConfig(configService, null);
         RegionConfig regionConfig = checkForRegion(regionName, cacheConfig, null);
-        describeMappingResults.addAll(getMappingsFromRegionConfig(cacheConfig, regionConfig));
+        describeMappingResults.addAll(getMappingsFromRegionConfig(cacheConfig, regionConfig, null));
       }
     } catch (PreconditionException ex) {
       return ResultModel.createError(ex.getMessage());
@@ -113,13 +114,13 @@ public class DescribeMappingCommand extends GfshCommand {
   }
 
   private ArrayList<DescribeMappingResult> getMappingsFromRegionConfig(CacheConfig cacheConfig,
-      RegionConfig regionConfig) {
+      RegionConfig regionConfig, String group) {
     CacheConfig.AsyncEventQueue asyncEventQueue = findAsyncEventQueue(cacheConfig, regionConfig);
     ArrayList<DescribeMappingResult> results = new ArrayList<>();
     for (CacheElement element : regionConfig.getCustomRegionElements()) {
       if (element instanceof RegionMapping) {
         results.add(buildDescribeMappingResult((RegionMapping) element, regionConfig.getName(),
-            asyncEventQueue == null));
+            asyncEventQueue == null, group));
       }
     }
     return results;
@@ -137,7 +138,7 @@ public class DescribeMappingCommand extends GfshCommand {
   }
 
   private DescribeMappingResult buildDescribeMappingResult(RegionMapping regionMapping,
-      String regionName, boolean synchronous) {
+      String regionName, boolean synchronous, String group) {
     LinkedHashMap<String, String> attributes = new LinkedHashMap<>();
     attributes.put(REGION_NAME, regionName);
     attributes.put(PDX_NAME, regionMapping.getPdxName());
@@ -151,15 +152,20 @@ public class DescribeMappingCommand extends GfshCommand {
     if (regionMapping.getSchema() != null) {
       attributes.put(SCHEMA_NAME, regionMapping.getSchema());
     }
-
-    return new DescribeMappingResult(attributes);
+    DescribeMappingResult result = new DescribeMappingResult(attributes);
+    result.setGroupName(group);
+    return result;
   }
 
   private ResultModel buildResultModel(ArrayList<DescribeMappingResult> describeMappingResult) {
     ResultModel resultModel = new ResultModel();
-    DataResultModel sectionModel = resultModel.addData(RESULT_SECTION_NAME);
     for (int i = 0; i < describeMappingResult.size(); i++) {
-      describeMappingResult.get(i).getAttributeMap().forEach(sectionModel::addData);
+      DataResultModel sectionModel = resultModel.addData(RESULT_SECTION_NAME + String.valueOf(i));
+      DescribeMappingResult result = describeMappingResult.get(i);
+      if (result.getGroupName() != null) {
+        sectionModel.addData("Mapping for group", result.getGroupName());
+      }
+      result.getAttributeMap().forEach(sectionModel::addData);
     }
     return resultModel;
   }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/DescribeMappingResult.java b/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/DescribeMappingResult.java
index ca3e704..df1552a 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/DescribeMappingResult.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/DescribeMappingResult.java
@@ -38,8 +38,19 @@ public class DescribeMappingResult implements DataSerializable {
     return this.attributeMap;
   }
 
+  private String groupName;
+
+  public String getGroupName() {
+    return groupName;
+  }
+
+  public void setGroupName(String group) {
+    groupName = group;
+  }
+
   @Override
   public void toData(DataOutput out) throws IOException {
+    DataSerializer.writeString(groupName, out);
     DataSerializer.writeInteger(attributeMap.size(), out);
     for (Map.Entry<String, String> entry : attributeMap.entrySet()) {
       DataSerializer.writeString(entry.getKey(), out);
@@ -49,6 +60,7 @@ public class DescribeMappingResult implements DataSerializable {
 
   @Override
   public void fromData(DataInput in) throws IOException {
+    groupName = DataSerializer.readString(in);
     int dataSize = DataSerializer.readInteger(in);
 
     for (int i = 0; i < dataSize; i++) {
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
index ce6462b..798c226 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
@@ -143,8 +143,6 @@ public class DescribeMappingCommandTest {
     regionMapping.setIds("myId");
     regionMapping.setCatalog("myCatalog");
     regionMapping.setSchema("mySchema");
-    ArrayList<CacheElement> elements = new ArrayList<>();
-    elements.add(regionMapping);
     when(clusterConfig.getRegions()).thenReturn(new ArrayList<>());
 
     gfsh.executeAndAssertThat(command, COMMAND).statusIsError()
@@ -161,8 +159,6 @@ public class DescribeMappingCommandTest {
     regionMapping.setIds("myId");
     regionMapping.setCatalog("myCatalog");
     regionMapping.setSchema("mySchema");
-    ArrayList<CacheElement> elements = new ArrayList<>();
-    elements.add(regionMapping);
     when(clusterConfig.getRegions()).thenReturn(new ArrayList<>());
     when(configurationPersistenceService.getCacheConfig("group1")).thenReturn(clusterConfig);
 
@@ -185,7 +181,8 @@ public class DescribeMappingCommandTest {
     when(regionConfig.getCustomRegionElements()).thenReturn(elements);
 
     gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess()
-        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME, REGION_NAME, PDX_NAME,
+        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME + "0", REGION_NAME,
+            PDX_NAME,
             TABLE_NAME, DATA_SOURCE_NAME, SYNCHRONOUS_NAME, ID_NAME, CATALOG_NAME, SCHEMA_NAME)
         .containsOutput(REGION_NAME, "region1")
         .containsOutput(DATA_SOURCE_NAME, "name1").containsOutput(TABLE_NAME, "table1")
@@ -223,7 +220,8 @@ public class DescribeMappingCommandTest {
         .thenReturn(CreateMappingCommand.createAsyncEventQueueName("region3"));
 
     gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess()
-        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME, REGION_NAME, PDX_NAME,
+        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME + "0", REGION_NAME,
+            PDX_NAME,
             TABLE_NAME, DATA_SOURCE_NAME, SYNCHRONOUS_NAME, ID_NAME, CATALOG_NAME, SCHEMA_NAME)
         .containsOutput(REGION_NAME, "region1")
         .containsOutput(DATA_SOURCE_NAME, "name1").containsOutput(TABLE_NAME, "table1")
@@ -250,7 +248,8 @@ public class DescribeMappingCommandTest {
 
 
     gfsh.executeAndAssertThat(command, COMMAND + " --groups=group1").statusIsSuccess()
-        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME, REGION_NAME, PDX_NAME,
+        .containsOrderedOutput(DescribeMappingCommand.RESULT_SECTION_NAME + "0", REGION_NAME,
+            PDX_NAME,
             TABLE_NAME, DATA_SOURCE_NAME, SYNCHRONOUS_NAME, ID_NAME, CATALOG_NAME, SCHEMA_NAME)
         .containsOutput(REGION_NAME, "region1")
         .containsOutput(DATA_SOURCE_NAME, "name1").containsOutput(TABLE_NAME, "table1")
diff --git a/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
index 2a0afd0..e674e58 100644
--- a/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
+++ b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
@@ -91,8 +91,15 @@ public class CommandResultAssert
 
   public CommandResultAssert containsOrderedOutput(String dataSectionName,
       String... expectedOutputs) {
-    LinkedHashMap<String, String> outputMap =
-        ((LinkedHashMap) actual.getCommandResult().getMapFromSection(dataSectionName));
+
+    LinkedHashMap<String, String> outputMap;
+    try {
+      outputMap =
+          ((LinkedHashMap) actual.getCommandResult().getMapFromSection(dataSectionName));
+    } catch (NullPointerException ex) {
+      Assert.fail("No section found for \"" + dataSectionName + "\"");
+      return this;
+    }
     String outputString = outputMap.toString();
     int outputIndex = 0;