This is an automated email from the ASF dual-hosted git repository. dschneider pushed a commit to branch feature/GEODE-5935 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 900eef59b7bbac4f404b4e2141d8c7d88cb1a547 Author: Darrel Schneider <[email protected]> AuthorDate: Fri Oct 26 11:44:16 2018 -0700 The create jdbc-mapping now checks if the region exists. The tests for create jdbc-mapping now pass. --- .../internal/cli/CreateMappingCommandDUnitTest.java | 18 ++++++++++-------- .../cli/CreateMappingCommandIntegrationTest.java | 10 +++++++--- .../jdbc/internal/cli/CreateMappingFunction.java | 13 +++++++++++++ .../jdbc/internal/cli/CreateMappingFunctionTest.java | 17 ++++++++++++++++- 4 files changed, 46 insertions(+), 12 deletions(-) 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 22e8808..4f23017 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 @@ -44,6 +44,7 @@ import org.apache.geode.test.junit.rules.serializable.SerializableTestName; @Category({JDBCConnectorTest.class}) public class CreateMappingCommandDUnitTest { + private static final String REGION_NAME = "testRegion"; @Rule public transient GfshCommandRule gfsh = new GfshCommandRule(); @@ -62,12 +63,15 @@ public class CreateMappingCommandDUnitTest { server = startupRule.startServerVM(1, locator.getPort()); gfsh.connectAndVerify(locator); + + gfsh.executeAndAssertThat("create region --name=" + REGION_NAME + " --type=REPLICATE") + .statusIsSuccess(); } @Test public void createsMappingWithAllOptions() { CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING); - csb.addOption(CREATE_MAPPING__REGION_NAME, "testRegion"); + csb.addOption(CREATE_MAPPING__REGION_NAME, REGION_NAME); csb.addOption(CREATE_MAPPING__CONNECTION_NAME, "connection"); csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable"); csb.addOption(CREATE_MAPPING__PDX_CLASS_NAME, "myPdxClass"); @@ -79,15 +83,13 @@ public class CreateMappingCommandDUnitTest { locator.invoke(() -> { String xml = InternalLocator.getLocator().getConfigurationPersistenceService() .getConfiguration("cluster").getCacheXmlContent(); - assertThat(xml).isNotNull().contains("jdbc:connector-service") - .doesNotContain("jdbc:connection").contains("jdbc:region-mapping") - .contains("jdbc:field-mapping"); + assertThat(xml).isNotNull().contains("jdbc:region-mapping").contains("jdbc:field-mapping"); }); server.invoke(() -> { InternalCache cache = ClusterStartupRule.getCache(); RegionMapping mapping = - cache.getService(JdbcConnectorService.class).getMappingForRegion("testRegion"); + cache.getService(JdbcConnectorService.class).getMappingForRegion(REGION_NAME); assertThat(mapping.getConnectionConfigName()).isEqualTo("connection"); assertThat(mapping.getTableName()).isEqualTo("myTable"); assertThat(mapping.getPdxClassName()).isEqualTo("myPdxClass"); @@ -104,7 +106,7 @@ public class CreateMappingCommandDUnitTest { @Test public void validateThatPrimaryKeyInValueDefaultsToFalse() { CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING); - csb.addOption(CREATE_MAPPING__REGION_NAME, "testRegion"); + csb.addOption(CREATE_MAPPING__REGION_NAME, REGION_NAME); csb.addOption(CREATE_MAPPING__CONNECTION_NAME, "connection"); csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable"); csb.addOption(CREATE_MAPPING__PDX_CLASS_NAME, "myPdxClass"); @@ -121,7 +123,7 @@ public class CreateMappingCommandDUnitTest { server.invoke(() -> { InternalCache cache = ClusterStartupRule.getCache(); RegionMapping mapping = - cache.getService(JdbcConnectorService.class).getMappingForRegion("testRegion"); + cache.getService(JdbcConnectorService.class).getMappingForRegion(REGION_NAME); assertThat(mapping.getConnectionConfigName()).isEqualTo("connection"); assertThat(mapping.getTableName()).isEqualTo("myTable"); assertThat(mapping.getPdxClassName()).isEqualTo("myPdxClass"); @@ -138,7 +140,7 @@ public class CreateMappingCommandDUnitTest { @Test public void createsRegionMappingWithoutFieldMap() { CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING); - csb.addOption(CREATE_MAPPING__REGION_NAME, "testRegion"); + csb.addOption(CREATE_MAPPING__REGION_NAME, REGION_NAME); csb.addOption(CREATE_MAPPING__CONNECTION_NAME, "connection"); csb.addOption(CREATE_MAPPING__TABLE_NAME, "myTable"); csb.addOption(CREATE_MAPPING__PDX_CLASS_NAME, "myPdxClass"); diff --git a/geode-connectors/src/integrationTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandIntegrationTest.java b/geode-connectors/src/integrationTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandIntegrationTest.java index e9549d2..d47b6f4 100644 --- a/geode-connectors/src/integrationTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandIntegrationTest.java +++ b/geode-connectors/src/integrationTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandIntegrationTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.CacheFactory; +import org.apache.geode.cache.RegionShortcut; import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService; import org.apache.geode.connectors.jdbc.internal.RegionMappingExistsException; import org.apache.geode.connectors.jdbc.internal.TableMetaDataView; @@ -58,6 +59,7 @@ public class CreateMappingCommandIntegrationTest { cache = (InternalCache) new CacheFactory().set("locators", "").set("mcast-port", "0") .set(ENABLE_CLUSTER_CONFIGURATION, "true").create(); + cache.createRegionFactory(RegionShortcut.LOCAL).create(regionName); createRegionMappingCommand = new CreateMappingCommand(); createRegionMappingCommand.setCache(cache); @@ -92,14 +94,16 @@ public class CreateMappingCommandIntegrationTest { @Test public void createsRegionMappingOnceOnly() { - createRegionMappingCommand.createMapping(regionName, connectionName, tableName, pdxClass, - keyInValue, fieldMappings); JdbcConnectorService service = cache.getService(JdbcConnectorService.class); + ResultModel result; + result = + createRegionMappingCommand.createMapping(regionName, connectionName, tableName, pdxClass, + keyInValue, fieldMappings); + assertThat(result.getStatus()).isSameAs(Result.Status.OK); IgnoredException ignoredException = IgnoredException.addIgnoredException(RegionMappingExistsException.class.getName()); - ResultModel result; try { result = createRegionMappingCommand.createMapping(regionName, connectionName, tableName, pdxClass, keyInValue, fieldMappings); diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java index 52f1782..ba71dfb 100644 --- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java +++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java @@ -15,6 +15,7 @@ package org.apache.geode.connectors.jdbc.internal.cli; import org.apache.geode.annotations.Experimental; +import org.apache.geode.cache.Cache; import org.apache.geode.cache.execute.FunctionContext; import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService; import org.apache.geode.connectors.jdbc.internal.RegionMappingExistsException; @@ -36,6 +37,8 @@ public class CreateMappingFunction extends CliFunction<RegionMapping> { // input RegionMapping regionMapping = context.getArguments(); + verifyRegionExists(context, regionMapping); + // action createRegionMapping(service, regionMapping); @@ -46,6 +49,16 @@ public class CreateMappingFunction extends CliFunction<RegionMapping> { return new CliFunctionResult(member, true, message); } + private void verifyRegionExists(FunctionContext<RegionMapping> context, + RegionMapping regionMapping) { + Cache cache = context.getCache(); + String regionName = regionMapping.getRegionName(); + if (cache.getRegion(regionName) == null) { + throw new IllegalStateException( + "create jdbc-mapping requires that the region \"" + regionName + "\" exists."); + } + } + /** * Creates the named connection configuration */ diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunctionTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunctionTest.java index faf53f8..5250419 100644 --- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunctionTest.java +++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunctionTest.java @@ -16,6 +16,7 @@ package org.apache.geode.connectors.jdbc.internal.cli; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.catchThrowable; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; @@ -31,6 +32,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.apache.geode.cache.Region; import org.apache.geode.cache.execute.FunctionContext; import org.apache.geode.cache.execute.ResultSender; import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService; @@ -50,6 +52,7 @@ public class CreateMappingFunctionTest { private DistributedMember distributedMember; private ResultSender<Object> resultSender; private JdbcConnectorService service; + private InternalCache cache; private CreateMappingFunction function; @@ -57,7 +60,8 @@ public class CreateMappingFunctionTest { public void setUp() { context = mock(FunctionContext.class); resultSender = mock(ResultSender.class); - InternalCache cache = mock(InternalCache.class); + cache = mock(InternalCache.class); + Region region = mock(Region.class); DistributedSystem system = mock(DistributedSystem.class); distributedMember = mock(DistributedMember.class); service = mock(JdbcConnectorService.class); @@ -67,6 +71,7 @@ public class CreateMappingFunctionTest { when(context.getResultSender()).thenReturn(resultSender); when(context.getCache()).thenReturn(cache); when(cache.getDistributedSystem()).thenReturn(system); + when(cache.getRegion(REGION_NAME)).thenReturn(region); when(system.getDistributedMember()).thenReturn(distributedMember); when(context.getArguments()).thenReturn(regionMapping); when(cache.getService(eq(JdbcConnectorService.class))).thenReturn(service); @@ -114,6 +119,16 @@ public class CreateMappingFunctionTest { } @Test + public void createRegionMappingThrowsIfRegionDoesNotExist() throws Exception { + when(cache.getRegion(REGION_NAME)).thenReturn(null); + + Throwable throwable = catchThrowable(() -> function.executeFunction(context)); + + assertThat(throwable).isInstanceOf(IllegalStateException.class) + .hasMessage("create jdbc-mapping requires that the region \"" + REGION_NAME + "\" exists."); + } + + @Test public void executeCreatesMapping() throws Exception { function.execute(context);
