You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by GitBox <gi...@apache.org> on 2019/01/14 18:55:25 UTC

[geode] Diff for: [GitHub] gesterzhou merged pull request #3032: Feature/geode 6187

diff --git a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java
index dadc96414fc..cfc38382c01 100644
--- a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java
+++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java
@@ -15,14 +15,14 @@
 package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__CATALOG_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__DATA_SOURCE_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__ID_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__PDX_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__REGION_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__SCHEMA_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__SYNCHRONOUS_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__TABLE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.CATALOG_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SCHEMA_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.List;
@@ -58,7 +58,7 @@
 @RunWith(JUnitParamsRunner.class)
 public class CreateMappingCommandDUnitTest {
 
-  private static final String REGION_NAME = "testRegion";
+  private static final String TEST_REGION = "testRegion";
 
   @Rule
   public transient GfshCommandRule gfsh = new GfshCommandRule();
@@ -81,6 +81,12 @@ public void before() throws Exception {
 
   }
 
+  public void cleanUp() throws Exception {
+    startupRule.stop(0);
+    startupRule.stop(1);
+    gfsh.disconnect();
+  }
+
   private void setupReplicate(String regionName) {
     setupReplicate(regionName, false);
   }
@@ -178,17 +184,17 @@ private static void validateRegionAlteredOnServer(String regionName, boolean syn
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingUpdatesServiceAndClusterConfig(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    csb.addOption(CREATE_MAPPING__ID_NAME, "myId");
-    csb.addOption(CREATE_MAPPING__CATALOG_NAME, "myCatalog");
-    csb.addOption(CREATE_MAPPING__SCHEMA_NAME, "mySchema");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(TABLE_NAME, "myTable");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(ID_NAME, "myId");
+    csb.addOption(CATALOG_NAME, "myCatalog");
+    csb.addOption(SCHEMA_NAME, "mySchema");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -218,15 +224,18 @@ public void createMappingUpdatesServiceAndClusterConfig(String regionName) {
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createSynchronousMappingUpdatesServiceAndClusterConfig(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    csb.addOption(CREATE_MAPPING__SYNCHRONOUS_NAME, "true");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(TABLE_NAME, "myTable");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(SYNCHRONOUS_NAME, "true");
+    csb.addOption(ID_NAME, "myId");
+    csb.addOption(CATALOG_NAME, "myCatalog");
+    csb.addOption(SCHEMA_NAME, "mySchema");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -235,6 +244,9 @@ public void createSynchronousMappingUpdatesServiceAndClusterConfig(String region
       assertThat(mapping.getDataSourceName()).isEqualTo("connection");
       assertThat(mapping.getTableName()).isEqualTo("myTable");
       assertThat(mapping.getPdxName()).isEqualTo("myPdxClass");
+      assertThat(mapping.getIds()).isEqualTo("myId");
+      assertThat(mapping.getCatalog()).isEqualTo("myCatalog");
+      assertThat(mapping.getSchema()).isEqualTo("mySchema");
       validateRegionAlteredOnServer(regionName, true);
     });
 
@@ -243,19 +255,22 @@ public void createSynchronousMappingUpdatesServiceAndClusterConfig(String region
       assertThat(regionMapping.getDataSourceName()).isEqualTo("connection");
       assertThat(regionMapping.getTableName()).isEqualTo("myTable");
       assertThat(regionMapping.getPdxName()).isEqualTo("myPdxClass");
+      assertThat(regionMapping.getIds()).isEqualTo("myId");
+      assertThat(regionMapping.getCatalog()).isEqualTo("myCatalog");
+      assertThat(regionMapping.getSchema()).isEqualTo("mySchema");
       validateRegionAlteredInClusterConfig(regionName, true);
     });
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithPartitionUpdatesServiceAndClusterConfig(String regionName) {
     setupPartition(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(TABLE_NAME, "myTable");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -279,13 +294,13 @@ public void createMappingWithPartitionUpdatesServiceAndClusterConfig(String regi
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithNoTable(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -309,21 +324,21 @@ public void createMappingWithNoTable(String regionName) {
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createExistingRegionMappingFails(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(TABLE_NAME, "myTable");
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
     csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "bogusConnection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "bogusPdxClass");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "bogusTable");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "bogusConnection");
+    csb.addOption(PDX_NAME, "bogusPdxClass");
+    csb.addOption(TABLE_NAME, "bogusTable");
     gfsh.executeAndAssertThat(csb.toString()).statusIsError()
         .containsOutput(
             "A JDBC mapping for " + convertRegionPathToName(regionName) + " already exists");
@@ -344,12 +359,12 @@ public void createExistingRegionMappingFails(String regionName) {
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithoutPdxNameFails(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
 
     // NOTE: --table is optional so it should not be in the output but it is. See GEODE-3468.
     gfsh.executeAndAssertThat(csb.toString()).statusIsError()
@@ -358,26 +373,26 @@ public void createMappingWithoutPdxNameFails(String regionName) {
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithNonExistentRegionFails(String regionName) {
     setupReplicate(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, "bogusRegion");
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, "bogusRegion");
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsError()
         .containsOutput("A region named bogusRegion must already exist");
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithRegionThatHasALoaderFails(String regionName) {
     setupReplicate(regionName, true);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsError()
         .containsOutput("The existing region " + convertRegionPathToName(regionName)
@@ -385,14 +400,14 @@ public void createMappingWithRegionThatHasALoaderFails(String regionName) {
   }
 
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
   public void createMappingWithExistingQueueFails(String regionName) {
     setupReplicate(regionName);
     setupAsyncEventQueue(regionName);
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsError()
         .containsOutput("An async-event-queue named "
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 03cc3ab285b..724c2c71e41 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
@@ -15,15 +15,15 @@
 package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__CATALOG_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__DATA_SOURCE_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__ID_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__PDX_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__REGION_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__SCHEMA_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__TABLE_NAME;
 import static org.apache.geode.connectors.jdbc.internal.cli.DescribeMappingCommand.DESCRIBE_MAPPING;
-import static org.apache.geode.connectors.jdbc.internal.cli.DescribeMappingCommand.DESCRIBE_MAPPING__REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.CATALOG_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SCHEMA_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.Serializable;
@@ -31,6 +31,7 @@
 
 import junitparams.JUnitParamsRunner;
 import junitparams.Parameters;
+import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -53,7 +54,7 @@
 @RunWith(JUnitParamsRunner.class)
 public class DescribeMappingCommandDUnitTest implements Serializable {
 
-  private static final String REGION_NAME = "testRegion";
+  private static final String TEST_REGION = "testRegion";
 
   @Rule
   public transient GfshCommandRule gfsh = new GfshCommandRule();
@@ -73,9 +74,16 @@ private static String convertRegionPathToName(String regionPath) {
     return regionPath;
   }
 
+  @After
+  public void cleanUp() throws Exception {
+    startupRule.stop(0);
+    startupRule.stop(1);
+    gfsh.disconnect();
+  }
+
   @Test
-  @Parameters({REGION_NAME, "/" + REGION_NAME})
-  public void describesExistingMapping(String regionName) throws Exception {
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
+  public void describesExistingSynchronousMapping(String regionName) throws Exception {
     locator = startupRule.startLocatorVM(0);
     server = startupRule.startServerVM(1, locator.getPort());
 
@@ -84,30 +92,69 @@ public void describesExistingMapping(String regionName) throws Exception {
         .statusIsSuccess();
 
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, regionName);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    csb.addOption(CREATE_MAPPING__TABLE_NAME, "testTable");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    csb.addOption(CREATE_MAPPING__ID_NAME, "myId");
-    csb.addOption(CREATE_MAPPING__CATALOG_NAME, "myCatalog");
-    csb.addOption(CREATE_MAPPING__SCHEMA_NAME, "mySchema");
+    csb.addOption(REGION_NAME, regionName);
+    csb.addOption(DATA_SOURCE_NAME, "connection");
+    csb.addOption(TABLE_NAME, "testTable");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(SYNCHRONOUS_NAME, "true");
+    csb.addOption(ID_NAME, "myId");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
-    csb = new CommandStringBuilder(DESCRIBE_MAPPING).addOption(DESCRIBE_MAPPING__REGION_NAME,
+    csb = new CommandStringBuilder(DESCRIBE_MAPPING).addOption(REGION_NAME,
         regionName);
 
     CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
 
     commandResultAssert.statusIsSuccess();
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__REGION_NAME,
+    commandResultAssert.containsKeyValuePair(REGION_NAME,
         convertRegionPathToName(regionName));
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__TABLE_NAME, "testTable");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__ID_NAME, "myId");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__CATALOG_NAME, "myCatalog");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__SCHEMA_NAME, "mySchema");
+    commandResultAssert.containsKeyValuePair(DATA_SOURCE_NAME, "connection");
+    commandResultAssert.containsKeyValuePair(TABLE_NAME, "testTable");
+    commandResultAssert.containsKeyValuePair(PDX_NAME, "myPdxClass");
+    commandResultAssert.containsKeyValuePair(SYNCHRONOUS_NAME, "true");
+    commandResultAssert.containsKeyValuePair(ID_NAME, "myId");
+  }
+
+  @Test
+  @Parameters({TEST_REGION, "/" + TEST_REGION})
+  public void describesExistingAsyncMapping(String regionName) throws Exception {
+    locator = startupRule.startLocatorVM(0);
+    server = startupRule.startServerVM(1, locator.getPort());
+
+    gfsh.connectAndVerify(locator);
+    gfsh.executeAndAssertThat("create region --name=" + regionName + " --type=REPLICATE")
+        .statusIsSuccess();
+
+    CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
+
+    csb.addOption(REGION_NAME, regionName);
+    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);
+
+    CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
+
+    commandResultAssert.statusIsSuccess();
+    commandResultAssert.containsKeyValuePair(REGION_NAME,
+        convertRegionPathToName(regionName));
+
+    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
@@ -115,11 +162,11 @@ public void reportsNoMappingFound() throws Exception {
     locator = startupRule.startLocatorVM(0);
     server = startupRule.startServerVM(1, locator.getPort());
     gfsh.connectAndVerify(locator);
-    gfsh.executeAndAssertThat("create region --name=" + REGION_NAME + " --type=REPLICATE")
+    gfsh.executeAndAssertThat("create region --name=" + TEST_REGION + " --type=REPLICATE")
         .statusIsSuccess();
 
     CommandStringBuilder csb = new CommandStringBuilder(DESCRIBE_MAPPING)
-        .addOption(DESCRIBE_MAPPING__REGION_NAME, "nonExisting");
+        .addOption(REGION_NAME, "nonExisting");
 
     CommandResultAssert commandResultAssert = gfsh.executeAndAssertThat(csb.toString());
 
@@ -136,26 +183,28 @@ public void reportConfigurationFoundOnMember() throws Exception {
     locator = startupRule.startLocatorVM(0, properties);
     server = startupRule.startServerVM(1, locator.getPort());
     gfsh.connectAndVerify(locator);
-    gfsh.executeAndAssertThat("create region --name=" + REGION_NAME + " --type=REPLICATE")
+    gfsh.executeAndAssertThat("create region --name=" + TEST_REGION + " --type=REPLICATE")
         .statusIsSuccess();
 
     server.invoke(() -> createRegionMapping());
 
     CommandResultAssert commandResultAssert =
-        gfsh.executeAndAssertThat(DESCRIBE_MAPPING + " --region=" + REGION_NAME).statusIsSuccess();
+        gfsh.executeAndAssertThat(DESCRIBE_MAPPING + " --region=" + TEST_REGION).statusIsSuccess();
+
+    commandResultAssert.containsKeyValuePair(REGION_NAME, TEST_REGION);
+    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(CREATE_MAPPING__REGION_NAME, REGION_NAME);
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__DATA_SOURCE_NAME, "connection");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__TABLE_NAME, "testTable");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    commandResultAssert.containsKeyValuePair(CREATE_MAPPING__ID_NAME, "myId");
   }
 
   private void createRegionMapping() throws RegionMappingExistsException {
     InternalCache cache = ClusterStartupRule.getCache();
     JdbcConnectorService service = cache.getService(JdbcConnectorService.class);
-    service.createRegionMapping(new RegionMapping(REGION_NAME, "myPdxClass",
-        "testTable", "connection", "myId", null, null));
-    assertThat(service.getMappingForRegion(REGION_NAME)).isNotNull();
+    service.createRegionMapping(new RegionMapping(TEST_REGION, "myPdxClass",
+        "testTable", "connection", "myId", "myCatalog", "mySchema"));
+    assertThat(service.getMappingForRegion(TEST_REGION)).isNotNull();
   }
 }
diff --git a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommandDunitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommandDunitTest.java
index 6fc139ac11f..cff48d5411f 100644
--- a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommandDunitTest.java
+++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommandDunitTest.java
@@ -15,12 +15,11 @@
 package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__DATA_SOURCE_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__PDX_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__REGION_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__SYNCHRONOUS_NAME;
 import static org.apache.geode.connectors.jdbc.internal.cli.DestroyMappingCommand.DESTROY_MAPPING;
-import static org.apache.geode.connectors.jdbc.internal.cli.DestroyMappingCommand.DESTROY_MAPPING__REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.Serializable;
@@ -49,7 +48,7 @@
 @Category({JDBCConnectorTest.class})
 public class DestroyMappingCommandDunitTest implements Serializable {
 
-  private static final String REGION_NAME = "testRegion";
+  private static final String TEST_REGION = "testRegion";
 
   @Rule
   public transient GfshCommandRule gfsh = new GfshCommandRule();
@@ -71,25 +70,25 @@ public void before() throws Exception {
 
     gfsh.connectAndVerify(locator);
 
-    gfsh.executeAndAssertThat("create region --name=" + REGION_NAME + " --type=PARTITION")
+    gfsh.executeAndAssertThat("create region --name=" + TEST_REGION + " --type=PARTITION")
         .statusIsSuccess();
   }
 
   private void setupAsyncMapping() {
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, REGION_NAME);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "myDataSource");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
+    csb.addOption(REGION_NAME, TEST_REGION);
+    csb.addOption(DATA_SOURCE_NAME, "myDataSource");
+    csb.addOption(PDX_NAME, "myPdxClass");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
   }
 
   private void setupSynchronousMapping() {
     CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING);
-    csb.addOption(CREATE_MAPPING__REGION_NAME, REGION_NAME);
-    csb.addOption(CREATE_MAPPING__DATA_SOURCE_NAME, "myDataSource");
-    csb.addOption(CREATE_MAPPING__PDX_NAME, "myPdxClass");
-    csb.addOption(CREATE_MAPPING__SYNCHRONOUS_NAME, "true");
+    csb.addOption(REGION_NAME, TEST_REGION);
+    csb.addOption(DATA_SOURCE_NAME, "myDataSource");
+    csb.addOption(PDX_NAME, "myPdxClass");
+    csb.addOption(SYNCHRONOUS_NAME, "true");
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
   }
@@ -98,8 +97,8 @@ private void setupSynchronousMapping() {
   public void destroyRegionThatHasSynchronousMappingFails() {
     setupSynchronousMapping();
 
-    gfsh.executeAndAssertThat("destroy region --name=" + REGION_NAME).statusIsError()
-        .containsOutput("Cannot destroy region \"" + REGION_NAME
+    gfsh.executeAndAssertThat("destroy region --name=" + TEST_REGION).statusIsError()
+        .containsOutput("Cannot destroy region \"" + TEST_REGION
             + "\" because JDBC mapping exists. Use \"destroy jdbc-mapping\" first.");
   }
 
@@ -107,10 +106,10 @@ public void destroyRegionThatHasSynchronousMappingFails() {
   public void destroyRegionThatHadSynchronousMappingSucceeds() {
     setupSynchronousMapping();
     CommandStringBuilder csb = new CommandStringBuilder(DESTROY_MAPPING);
-    csb.addOption(DESTROY_MAPPING__REGION_NAME, REGION_NAME);
+    csb.addOption(REGION_NAME, TEST_REGION);
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
-    gfsh.executeAndAssertThat("destroy region --name=" + REGION_NAME).statusIsSuccess();
+    gfsh.executeAndAssertThat("destroy region --name=" + TEST_REGION).statusIsSuccess();
   }
 
 
@@ -118,7 +117,7 @@ public void destroyRegionThatHadSynchronousMappingSucceeds() {
   public void destroysAsyncMapping() {
     setupAsyncMapping();
     CommandStringBuilder csb = new CommandStringBuilder(DESTROY_MAPPING);
-    csb.addOption(DESTROY_MAPPING__REGION_NAME, REGION_NAME);
+    csb.addOption(REGION_NAME, TEST_REGION);
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -140,7 +139,7 @@ public void destroysAsyncMapping() {
   public void destroysAsyncMappingWithRegionPath() {
     setupAsyncMapping();
     CommandStringBuilder csb = new CommandStringBuilder(DESTROY_MAPPING);
-    csb.addOption(DESTROY_MAPPING__REGION_NAME, "/" + REGION_NAME);
+    csb.addOption(REGION_NAME, "/" + TEST_REGION);
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -162,7 +161,7 @@ public void destroysAsyncMappingWithRegionPath() {
   public void destroysSynchronousMapping() throws Exception {
     setupSynchronousMapping();
     CommandStringBuilder csb = new CommandStringBuilder(DESTROY_MAPPING);
-    csb.addOption(DESTROY_MAPPING__REGION_NAME, REGION_NAME);
+    csb.addOption(REGION_NAME, TEST_REGION);
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -184,7 +183,7 @@ public void destroysSynchronousMapping() throws Exception {
   public void destroysSynchronousMappingWithRegionPath() throws Exception {
     setupSynchronousMapping();
     CommandStringBuilder csb = new CommandStringBuilder(DESTROY_MAPPING);
-    csb.addOption(DESTROY_MAPPING__REGION_NAME, "/" + REGION_NAME);
+    csb.addOption(REGION_NAME, "/" + TEST_REGION);
 
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess();
 
@@ -206,7 +205,7 @@ private static RegionMapping getRegionMappingFromClusterConfig() {
     CacheConfig cacheConfig =
         InternalLocator.getLocator().getConfigurationPersistenceService().getCacheConfig(null);
     RegionConfig regionConfig = cacheConfig.getRegions().stream()
-        .filter(region -> region.getName().equals(REGION_NAME)).findFirst().orElse(null);
+        .filter(region -> region.getName().equals(TEST_REGION)).findFirst().orElse(null);
     return (RegionMapping) regionConfig.getCustomRegionElements().stream()
         .filter(element -> element instanceof RegionMapping).findFirst().orElse(null);
   }
@@ -222,7 +221,7 @@ private static void validateRegionAlteredInClusterConfig(boolean synchronous) {
     CacheConfig cacheConfig =
         InternalLocator.getLocator().getConfigurationPersistenceService().getCacheConfig(null);
     RegionConfig regionConfig = cacheConfig.getRegions().stream()
-        .filter(region -> region.getName().equals(REGION_NAME)).findFirst().orElse(null);
+        .filter(region -> region.getName().equals(TEST_REGION)).findFirst().orElse(null);
     RegionAttributesType attributes = regionConfig.getRegionAttributes();
     assertThat(attributes.getCacheLoader()).isNull();
     if (synchronous) {
@@ -233,21 +232,21 @@ private static void validateRegionAlteredInClusterConfig(boolean synchronous) {
   }
 
   private void verifyQueueRemoved(InternalCache cache) {
-    String queueName = CreateMappingCommand.createAsyncEventQueueName(REGION_NAME);
+    String queueName = CreateMappingCommand.createAsyncEventQueueName(TEST_REGION);
     assertThat(cache.getAsyncEventQueue(queueName)).isNull();
   }
 
   private void verifyRegionAltered(InternalCache cache) {
-    Region<?, ?> region = cache.getRegion(REGION_NAME);
+    Region<?, ?> region = cache.getRegion(TEST_REGION);
     assertThat(region.getAttributes().getCacheLoader()).isNull();
     assertThat(region.getAttributes().getCacheWriter()).isNull();
-    String queueName = CreateMappingCommand.createAsyncEventQueueName(REGION_NAME);
+    String queueName = CreateMappingCommand.createAsyncEventQueueName(TEST_REGION);
     assertThat(region.getAttributes().getAsyncEventQueueIds()).doesNotContain(queueName);
   }
 
   private void verifyMappingRemovedFromService(InternalCache cache) {
     RegionMapping mapping =
-        cache.getService(JdbcConnectorService.class).getMappingForRegion(REGION_NAME);
+        cache.getService(JdbcConnectorService.class).getMappingForRegion(TEST_REGION);
     assertThat(mapping).isNull();
   }
 }
diff --git a/geode-connectors/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-connectors/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
index e69de29bb2d..5dd33d083fb 100644
--- a/geode-connectors/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
+++ b/geode-connectors/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
@@ -0,0 +1,3 @@
+org/apache/geode/connectors/util/internal/DescribeMappingResult,2
+fromData,48
+toData,80
\ No newline at end of file
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
index 3f9a42a3848..c355ed952a5 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
@@ -17,6 +17,7 @@
 import java.util.Set;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.cache.Cache;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.internal.cache.CacheService;
 
@@ -31,6 +32,9 @@ void replaceRegionMapping(RegionMapping mapping)
 
   void destroyRegionMapping(String regionName);
 
+  boolean isMappingSynchronous(String regionName, Cache cache)
+      throws RegionMappingNotFoundException;
+
   RegionMapping getMappingForRegion(String regionName);
 
   Set<RegionMapping> getRegionMappings();
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
index 5d2398e6b94..5630d5450fd 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
@@ -21,6 +21,8 @@
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.Region;
+import org.apache.geode.connectors.jdbc.JdbcWriter;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.internal.cache.CacheService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
@@ -62,6 +64,18 @@ public void replaceRegionMapping(RegionMapping alteredMapping)
     mappingsByRegion.put(existingMapping.getRegionName(), alteredMapping);
   }
 
+  @Override
+  public boolean isMappingSynchronous(String regionName, Cache cache) {
+    Region<?, ?> region = cache.getRegion(regionName);
+    if (region == null) {
+      throw new IllegalStateException("Region for mapping could not be found.");
+    }
+
+    // If our region has a Jdbc Writer set as the cache writer then we know it is syncronous
+    return region.getAttributes().getCacheWriter() != null
+        && region.getAttributes().getCacheWriter() instanceof JdbcWriter;
+  }
+
   @Override
   public RegionMapping getMappingForRegion(String regionName) {
     return mappingsByRegion.get(regionName);
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java
index 6f73e2b06a1..1412f41ec68 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java
@@ -34,6 +34,7 @@
 import org.apache.geode.connectors.jdbc.JdbcLoader;
 import org.apache.geode.connectors.jdbc.JdbcWriter;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
+import org.apache.geode.connectors.util.internal.MappingConstants;
 import org.apache.geode.distributed.ConfigurationPersistenceService;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.management.cli.CliMetaData;
@@ -47,30 +48,31 @@
 @Experimental
 public class CreateMappingCommand extends SingleGfshCommand {
   static final String CREATE_MAPPING = "create jdbc-mapping";
-  static final String CREATE_MAPPING__HELP =
+  private static final String CREATE_MAPPING__HELP =
       EXPERIMENTAL + "Create a JDBC mapping for a region for use with a JDBC database.";
-  static final String CREATE_MAPPING__REGION_NAME = "region";
-  static final String CREATE_MAPPING__REGION_NAME__HELP =
+  private static final String CREATE_MAPPING__REGION_NAME = MappingConstants.REGION_NAME;
+  private static final String CREATE_MAPPING__REGION_NAME__HELP =
       "Name of the region the JDBC mapping is being created for.";
-  static final String CREATE_MAPPING__PDX_NAME = "pdx-name";
-  static final String CREATE_MAPPING__PDX_NAME__HELP =
+  private static final String CREATE_MAPPING__PDX_NAME = MappingConstants.PDX_NAME;
+  private static final String CREATE_MAPPING__PDX_NAME__HELP =
       "Name of pdx class for which values will be written to the database.";
-  static final String CREATE_MAPPING__TABLE_NAME = "table";
-  static final String CREATE_MAPPING__TABLE_NAME__HELP =
+  private static final String CREATE_MAPPING__TABLE_NAME = MappingConstants.TABLE_NAME;
+  private static final String CREATE_MAPPING__TABLE_NAME__HELP =
       "Name of database table for values to be written to.";
-  static final String CREATE_MAPPING__DATA_SOURCE_NAME = "data-source";
-  static final String CREATE_MAPPING__DATA_SOURCE_NAME__HELP = "Name of JDBC data source to use.";
-  static final String CREATE_MAPPING__SYNCHRONOUS_NAME = "synchronous";
-  static final String CREATE_MAPPING__SYNCHRONOUS_NAME__HELP =
+  private static final String CREATE_MAPPING__DATA_SOURCE_NAME = MappingConstants.DATA_SOURCE_NAME;
+  private static final String CREATE_MAPPING__DATA_SOURCE_NAME__HELP =
+      "Name of JDBC data source to use.";
+  private static final String CREATE_MAPPING__SYNCHRONOUS_NAME = MappingConstants.SYNCHRONOUS_NAME;
+  private static final String CREATE_MAPPING__SYNCHRONOUS_NAME__HELP =
       "By default, writes will be asynchronous. If true, writes will be synchronous.";
-  static final String CREATE_MAPPING__ID_NAME = "id";
-  static final String CREATE_MAPPING__ID_NAME__HELP =
+  private static final String CREATE_MAPPING__ID_NAME = MappingConstants.ID_NAME;
+  private static final String CREATE_MAPPING__ID_NAME__HELP =
       "The table column names to use as the region key for this JDBC mapping. If more than one column name is given then they must be separated by commas.";
-  static final String CREATE_MAPPING__CATALOG_NAME = "catalog";
-  static final String CREATE_MAPPING__CATALOG_NAME__HELP =
+  private static final String CREATE_MAPPING__CATALOG_NAME = MappingConstants.CATALOG_NAME;
+  private static final String CREATE_MAPPING__CATALOG_NAME__HELP =
       "The catalog that contains the database table. By default, the catalog is the empty string causing the table to be referenced without a catalog prefix.";
-  static final String CREATE_MAPPING__SCHEMA_NAME = "schema";
-  static final String CREATE_MAPPING__SCHEMA_NAME__HELP =
+  private static final String CREATE_MAPPING__SCHEMA_NAME = MappingConstants.SCHEMA_NAME;
+  private static final String CREATE_MAPPING__SCHEMA_NAME__HELP =
       "The schema that contains the database table. By default, the schema is the empty string causing the table to be referenced without a schema prefix.";
 
   public static String createAsyncEventQueueName(String regionPath) {
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 81cdfcb9fef..6763c123017 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
@@ -14,13 +14,7 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__CATALOG_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__DATA_SOURCE_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__ID_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__PDX_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__REGION_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__SCHEMA_NAME;
-import static org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand.CREATE_MAPPING__TABLE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
 
 import java.util.Set;
 
@@ -29,7 +23,7 @@
 import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
+import org.apache.geode.connectors.util.internal.DescribeMappingResult;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.GfshCommand;
@@ -44,12 +38,13 @@
 @Experimental
 public class DescribeMappingCommand extends GfshCommand {
   static final String DESCRIBE_MAPPING = "describe jdbc-mapping";
-  static final String DESCRIBE_MAPPING__HELP = EXPERIMENTAL + "Describe the specified JDBC mapping";
-  static final String DESCRIBE_MAPPING__REGION_NAME = "region";
-  static final String DESCRIBE_MAPPING__REGION_NAME__HELP =
+  private static final String DESCRIBE_MAPPING__HELP =
+      EXPERIMENTAL + "Describe the specified JDBC mapping";
+  private static final String DESCRIBE_MAPPING__REGION_NAME = REGION_NAME;
+  private static final String DESCRIBE_MAPPING__REGION_NAME__HELP =
       "Region name of the JDBC mapping to be described.";
 
-  static final String RESULT_SECTION_NAME = "MappingDescription";
+  private static final String RESULT_SECTION_NAME = "MappingDescription";
 
   @CliCommand(value = DESCRIBE_MAPPING, help = DESCRIBE_MAPPING__HELP)
   @CliMetaData(relatedTopic = CliStrings.DEFAULT_TOPIC_GEODE)
@@ -61,7 +56,7 @@ public ResultModel describeMapping(@CliOption(key = DESCRIBE_MAPPING__REGION_NAM
       regionName = regionName.substring(1);
     }
 
-    RegionMapping mapping = null;
+    DescribeMappingResult describeMappingResult = null;
 
     Set<DistributedMember> members = findMembers(null, null);
     if (members.size() > 0) {
@@ -69,32 +64,27 @@ public ResultModel describeMapping(@CliOption(key = DESCRIBE_MAPPING__REGION_NAM
       CliFunctionResult result = executeFunctionAndGetFunctionResult(
           new DescribeMappingFunction(), regionName, targetMember);
       if (result != null) {
-        mapping = (RegionMapping) result.getResultObject();
+        describeMappingResult = (DescribeMappingResult) result.getResultObject();
       }
     } else {
       return ResultModel.createError(CliStrings.NO_MEMBERS_FOUND_MESSAGE);
     }
 
-    if (mapping == null) {
+    if (describeMappingResult == null) {
       throw new EntityNotFoundException(
           EXPERIMENTAL + "\n" + "JDBC mapping for region '" + regionName + "' not found");
     }
 
     ResultModel resultModel = new ResultModel();
-    fillResultData(mapping, resultModel);
+    fillResultData(describeMappingResult, resultModel);
     resultModel.setHeader(EXPERIMENTAL);
     return resultModel;
   }
 
-  private void fillResultData(RegionMapping mapping, ResultModel resultModel) {
+  private void fillResultData(DescribeMappingResult describeMappingResult,
+      ResultModel resultModel) {
     DataResultModel sectionModel = resultModel.addData(RESULT_SECTION_NAME);
-    sectionModel.addData(CREATE_MAPPING__REGION_NAME, mapping.getRegionName());
-    sectionModel.addData(CREATE_MAPPING__DATA_SOURCE_NAME, mapping.getDataSourceName());
-    sectionModel.addData(CREATE_MAPPING__TABLE_NAME, mapping.getTableName());
-    sectionModel.addData(CREATE_MAPPING__PDX_NAME, mapping.getPdxName());
-    sectionModel.addData(CREATE_MAPPING__ID_NAME, mapping.getIds());
-    sectionModel.addData(CREATE_MAPPING__CATALOG_NAME, mapping.getCatalog());
-    sectionModel.addData(CREATE_MAPPING__SCHEMA_NAME, mapping.getSchema());
+    describeMappingResult.getAttributeMap().forEach(sectionModel::addData);
   }
 
   @CliAvailabilityIndicator({DESCRIBE_MAPPING})
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
index 3f7c634f270..e94d6a9e82d 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
@@ -14,8 +14,23 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
+import static org.apache.geode.connectors.util.internal.MappingConstants.CATALOG_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SCHEMA_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
+
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
+import org.apache.geode.connectors.jdbc.internal.RegionMappingNotFoundException;
+import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
+import org.apache.geode.connectors.util.internal.DescribeMappingResult;
 import org.apache.geode.management.cli.CliFunction;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 
@@ -23,9 +38,34 @@
 
   @Override
   public CliFunctionResult executeFunction(FunctionContext<String> context) {
+    return new CliFunctionResult(context.getMemberName(), getResult(context));
+
+  }
+
+  private DescribeMappingResult getResult(FunctionContext<String> context) {
     JdbcConnectorService service = FunctionContextArgumentProvider.getJdbcConnectorService(context);
+    RegionMapping mapping = service.getMappingForRegion(context.getArguments());
+    if (mapping == null) {
+      return null;
+    }
+
+    Map<String, String> attributes = new HashMap<>();
+    attributes.put(REGION_NAME, mapping.getRegionName());
+    attributes.put(DATA_SOURCE_NAME, mapping.getDataSourceName());
+    attributes.put(TABLE_NAME, mapping.getTableName());
+    attributes.put(PDX_NAME, mapping.getPdxName());
+    attributes.put(ID_NAME, mapping.getIds());
+    attributes.put(SCHEMA_NAME, mapping.getSchema());
+    attributes.put(CATALOG_NAME, mapping.getCatalog());
+
+    try {
+      attributes.put(SYNCHRONOUS_NAME,
+          Boolean
+              .toString(service.isMappingSynchronous(mapping.getRegionName(), context.getCache())));
+    } catch (RegionMappingNotFoundException e) {
+      attributes.put(SYNCHRONOUS_NAME, "Not found.");
+    }
 
-    return new CliFunctionResult(context.getMemberName(),
-        service.getMappingForRegion(context.getArguments()));
+    return new DescribeMappingResult(attributes);
   }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
index 3241157a442..b44a3fd0269 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
@@ -14,6 +14,8 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -46,9 +48,10 @@
 @Experimental
 public class DestroyMappingCommand extends SingleGfshCommand {
   static final String DESTROY_MAPPING = "destroy jdbc-mapping";
-  static final String DESTROY_MAPPING__HELP = EXPERIMENTAL + "Destroy the specified JDBC mapping.";
-  static final String DESTROY_MAPPING__REGION_NAME = "region";
-  static final String DESTROY_MAPPING__REGION_NAME__HELP =
+  private static final String DESTROY_MAPPING__HELP =
+      EXPERIMENTAL + "Destroy the specified JDBC mapping.";
+  private static final String DESTROY_MAPPING__REGION_NAME = REGION_NAME;
+  private static final String DESTROY_MAPPING__REGION_NAME__HELP =
       "Name of the region whose JDBC mapping will be destroyed.";
 
   @CliCommand(value = DESTROY_MAPPING, help = DESTROY_MAPPING__HELP)
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
new file mode 100644
index 00000000000..83afca0c2d9
--- /dev/null
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/DescribeMappingResult.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.connectors.util.internal;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.geode.DataSerializable;
+import org.apache.geode.DataSerializer;
+
+public class DescribeMappingResult implements DataSerializable {
+  private final Map<String, String> attributeMap;
+
+  public DescribeMappingResult() {
+    this.attributeMap = new HashMap<>();
+  }
+
+  public DescribeMappingResult(Map<String, String> attributeMap) {
+    this.attributeMap = attributeMap;
+  }
+
+  public Map<String, String> getAttributeMap() {
+    return this.attributeMap;
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    DataSerializer.writeInteger(attributeMap.size(), out);
+    for (Map.Entry<String, String> entry : attributeMap.entrySet()) {
+      DataSerializer.writeString(entry.getKey(), out);
+      DataSerializer.writeString(entry.getValue(), out);
+    }
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException {
+    int dataSize = DataSerializer.readInteger(in);
+
+    for (int i = 0; i < dataSize; i++) {
+      String key, value;
+
+      key = DataSerializer.readString(in);
+      value = DataSerializer.readString(in);
+
+      this.attributeMap.put(key, value);
+    }
+  }
+}
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/MappingConstants.java b/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/MappingConstants.java
new file mode 100644
index 00000000000..1c7a1fc0d1d
--- /dev/null
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/util/internal/MappingConstants.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.connectors.util.internal;
+
+public final class MappingConstants {
+  public static final String REGION_NAME = "region";
+  public static final String PDX_NAME = "pdx-name";
+  public static final String TABLE_NAME = "table";
+  public static final String DATA_SOURCE_NAME = "data-source";
+  public static final String SYNCHRONOUS_NAME = "synchronous";
+  public static final String ID_NAME = "id";
+  public static final String SCHEMA_NAME = "schema";
+  public static final String CATALOG_NAME = "catalog";
+
+  private MappingConstants() {}
+}
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunctionTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunctionTest.java
index 06e74e3940e..2e1908042fb 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunctionTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunctionTest.java
@@ -14,6 +14,14 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
+import static org.apache.geode.connectors.util.internal.MappingConstants.CATALOG_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SCHEMA_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -23,6 +31,8 @@
 import static org.mockito.Mockito.when;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.commons.lang3.SerializationUtils;
 import org.junit.Before;
@@ -33,6 +43,7 @@
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
+import org.apache.geode.connectors.util.internal.DescribeMappingResult;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
@@ -41,6 +52,14 @@
 public class DescribeMappingFunctionTest {
 
   private static final String EXISTING_MAPPING = "existingMapping";
+  private static final String TEST_REGION = "testRegion";
+  private static final String TEST_PDX = "testPdx";
+  private static final String TEST_TABLE = "testTableName";
+  private static final String TEST_DATASOURCE = "testDataSource";
+  private static final String TEST_SYNCHRONOUS = "false";
+  private static final String TEST_ID = "testId";
+  private static final String TEST_CATALOG = "testCatalog";
+  private static final String TEST_SCHEMA = "testSchema";
 
   private DescribeMappingFunction function;
   private JdbcConnectorService service;
@@ -67,6 +86,13 @@ public void setUp() {
     when(service.getMappingForRegion(EXISTING_MAPPING)).thenReturn(regionMapping);
     when(cache.getDistributedSystem()).thenReturn(system);
     when(system.getDistributedMember()).thenReturn(member);
+    when(regionMapping.getRegionName()).thenReturn(TEST_REGION);
+    when(regionMapping.getDataSourceName()).thenReturn(TEST_DATASOURCE);
+    when(regionMapping.getTableName()).thenReturn(TEST_TABLE);
+    when(regionMapping.getPdxName()).thenReturn(TEST_PDX);
+    when(regionMapping.getIds()).thenReturn(TEST_ID);
+    when(regionMapping.getCatalog()).thenReturn(TEST_CATALOG);
+    when(regionMapping.getSchema()).thenReturn(TEST_SCHEMA);
   }
 
   @Test
@@ -92,9 +118,20 @@ public void returnsResultWithCorrectConfig() {
 
     function.execute(context);
 
+    Map<String, String> expectedAttributes = new HashMap<>();
+    expectedAttributes.put(REGION_NAME, TEST_REGION);
+    expectedAttributes.put(PDX_NAME, TEST_PDX);
+    expectedAttributes.put(TABLE_NAME, TEST_TABLE);
+    expectedAttributes.put(DATA_SOURCE_NAME, TEST_DATASOURCE);
+    expectedAttributes.put(SYNCHRONOUS_NAME, TEST_SYNCHRONOUS);
+    expectedAttributes.put(ID_NAME, TEST_ID);
+    expectedAttributes.put(SCHEMA_NAME, TEST_SCHEMA);
+    expectedAttributes.put(CATALOG_NAME, TEST_CATALOG);
+
     ArgumentCaptor<CliFunctionResult> argument = ArgumentCaptor.forClass(CliFunctionResult.class);
     verify(resultSender, times(1)).lastResult(argument.capture());
-    assertThat(argument.getValue().getResultObject()).isSameAs(regionMapping);
+    DescribeMappingResult result = (DescribeMappingResult) argument.getValue().getResultObject();
+    assertThat(result.getAttributeMap()).isEqualTo(expectedAttributes);
   }
 
   @Test
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
similarity index 66%
rename from geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java
rename to geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
index c4bd45c9834..0bbbf05c980 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/org/apache/geode/connectors/util/DescribeMappingCommandTest.java
@@ -12,8 +12,16 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.connectors.jdbc.internal.cli;
-
+package org.apache.geode.connectors.jdbc.org.apache.geode.connectors.util;
+
+import static org.apache.geode.connectors.util.internal.MappingConstants.CATALOG_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SCHEMA_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
@@ -24,6 +32,8 @@
 import static org.mockito.Mockito.when;
 
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import org.junit.Before;
@@ -31,7 +41,8 @@
 import org.junit.Test;
 
 import org.apache.geode.cache.execute.ResultCollector;
-import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
+import org.apache.geode.connectors.jdbc.internal.cli.DescribeMappingCommand;
+import org.apache.geode.connectors.util.internal.DescribeMappingResult;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -67,23 +78,32 @@ public void whenNoMemberExists() {
   public void whenMemberExists() {
     doReturn(Collections.singleton(mock(DistributedMember.class))).when(command).findMembers(null,
         null);
+    Map<String, String> attributes = new HashMap<>();
+    attributes.put(REGION_NAME, "region");
+    attributes.put(PDX_NAME, "class1");
+    attributes.put(TABLE_NAME, "table1");
+    attributes.put(DATA_SOURCE_NAME, "name1");
+    attributes.put(SYNCHRONOUS_NAME, "true");
+    attributes.put(ID_NAME, "myId");
+    attributes.put(SCHEMA_NAME, "mySchema");
+    attributes.put(CATALOG_NAME, "myCatalog");
+
+    DescribeMappingResult mappingResult = new DescribeMappingResult(attributes);
 
-    RegionMapping mapping =
-        new RegionMapping("region", "class1", "table1", "name1", "myId", "myCatalog", "mySchema");
 
     ResultCollector rc = mock(ResultCollector.class);
     doReturn(rc).when(command).executeFunction(any(), any(), any(Set.class));
     when(rc.getResult()).thenReturn(
-        Collections.singletonList(new CliFunctionResult("server-1", mapping, "success")));
+        Collections.singletonList(new CliFunctionResult("server-1", mappingResult, "success")));
+
+
 
     gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess()
-        .containsOutput("region", "region")
-        .containsOutput("data-source", "name1")
-        .containsOutput("table", "table1")
-        .containsOutput("pdx-name", "class1")
-        .containsOutput("id", "myId")
-        .containsOutput("catalog", "myCatalog")
-        .containsOutput("schema", "mySchema");
+        .containsOutput(REGION_NAME, "region")
+        .containsOutput(DATA_SOURCE_NAME, "name1").containsOutput(TABLE_NAME, "table1")
+        .containsOutput(PDX_NAME, "class1").containsOutput(ID_NAME, "myId")
+        .containsOutput(SCHEMA_NAME, "mySchema").containsOutput(CATALOG_NAME, "myCatalog")
+        .containsOutput("true");
   }
 
   @Test
@@ -94,7 +114,7 @@ public void whenMemberExistsWithRegionPathFunctionIsCalledWithNoSlashRegionName(
     doReturn(rc).when(command).executeFunction(any(), any(), any(Set.class));
     when(rc.getResult()).thenReturn(
         Collections.singletonList(
-            new CliFunctionResult("server-1", mock(RegionMapping.class), "success")));
+            new CliFunctionResult("server-1", mock(DescribeMappingResult.class), "success")));
 
     command.describeMapping("/regionName");
 
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/util/internal/DescribeMappingResultTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/util/internal/DescribeMappingResultTest.java
new file mode 100644
index 00000000000..06e26384dee
--- /dev/null
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/util/internal/DescribeMappingResultTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.connectors.util.internal;
+
+import static org.apache.geode.connectors.util.internal.MappingConstants.DATA_SOURCE_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.ID_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.PDX_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.REGION_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.SYNCHRONOUS_NAME;
+import static org.apache.geode.connectors.util.internal.MappingConstants.TABLE_NAME;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jgroups.util.ByteArrayDataInputStream;
+import org.jgroups.util.ByteArrayDataOutputStream;
+import org.junit.Test;
+
+public class DescribeMappingResultTest {
+
+  @Test
+  public void testSeriazilabeToAndFromByteArray() throws IOException {
+    Map<String, String> attributesMap = new HashMap<>();
+    attributesMap.put(REGION_NAME, "myRegion");
+    attributesMap.put(PDX_NAME, "myPdx");
+    attributesMap.put(TABLE_NAME, "myTable");
+    attributesMap.put(DATA_SOURCE_NAME, "myDatasource");
+    attributesMap.put(SYNCHRONOUS_NAME, "false");
+    attributesMap.put(ID_NAME, "myId");
+
+    DescribeMappingResult result = new DescribeMappingResult(attributesMap);
+    DescribeMappingResult newResult = new DescribeMappingResult();
+
+    ByteArrayDataOutputStream output = new ByteArrayDataOutputStream();
+    ByteArrayDataInputStream input;
+
+    result.toData(output);
+
+    input = new ByteArrayDataInputStream(output.buffer());
+
+    newResult.fromData(input);
+
+    Map<String, String> newAttributeMap = newResult.getAttributeMap();
+    assertThat(attributesMap).isEqualTo(newAttributeMap);
+  }
+
+}


With regards,
Apache Git Services