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