You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jc...@apache.org on 2018/11/15 01:00:24 UTC

[geode] branch feature/GEODE-6025 updated: WIP: Move data source commands to new package

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

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


The following commit(s) were added to refs/heads/feature/GEODE-6025 by this push:
     new 4bfb671  WIP: Move data source commands to new package
4bfb671 is described below

commit 4bfb6710703ee58962a56255ca0fa07834b89c3e
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Wed Nov 14 16:59:35 2018 -0800

    WIP: Move data source commands to new package
    
    Co-authored-by: Darrel Schneider <ds...@pivotal.io>
    Co-authored-by: Jianxia Chen <jc...@pivotal.io>
---
 geode-connectors/build.gradle                      |  1 +
 .../cli}/CreateDataSourceCommandDUnitTest.java     |  2 +-
 .../internal/cli}/CreateDataSourceCommand.java     |  4 +-
 .../internal/cli}/CreateDataSourceInterceptor.java |  3 +-
 .../internal/cli}/DescribeDataSourceCommand.java   | 30 +++++++-
 .../cli/converters/PoolPropertyConverter.java      | 10 +--
 .../org.springframework.shell.core.CommandMarker   |  2 +
 .../internal/cli}/CreateDataSourceCommandTest.java | 11 ++-
 .../cli}/CreateDataSourceInterceptorTest.java      |  2 +-
 .../cli}/DescribeDataSourceCommandTest.java        | 81 ++++++++++++++++++++--
 .../cli/commands/CommandAvailabilityIndicator.java |  1 -
 .../cli/commands/UsernamePasswordInterceptor.java  |  2 +-
 12 files changed, 123 insertions(+), 26 deletions(-)

diff --git a/geode-connectors/build.gradle b/geode-connectors/build.gradle
index f64261a..1786eb3 100644
--- a/geode-connectors/build.gradle
+++ b/geode-connectors/build.gradle
@@ -75,6 +75,7 @@ dependencies {
   distributedTestCompile('junit:junit:' + project.'junit.version')
   distributedTestCompile('org.assertj:assertj-core:' + project.'assertj-core.version')
   distributedTestCompile('org.mockito:mockito-core:2.19.1')
+  distributedTestRuntime('org.apache.derby:derby:' + project.'derby.version')
 
   acceptanceTestCompile('com.github.stefanbirkner:system-rules:' + project.'system-rules.version') {
     exclude module: 'junit-dep'
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandDUnitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandDUnitTest.java
similarity index 98%
rename from geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandDUnitTest.java
rename to geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandDUnitTest.java
index 8dc4843..dd4169c 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandDUnitTest.java
+++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandDUnitTest.java
@@ -13,7 +13,7 @@
  * the License.
  */
 
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommand.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommand.java
rename to geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommand.java
index 7847700..345d182 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommand.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import java.util.List;
 import java.util.Set;
@@ -74,7 +74,7 @@ public class CreateDataSourceCommand extends SingleGfshCommand {
 
   @CliCommand(value = CREATE_DATA_SOURCE, help = CREATE_DATA_SOURCE__HELP)
   @CliMetaData(relatedTopic = CliStrings.DEFAULT_TOPIC_GEODE,
-      interceptor = "org.apache.geode.management.internal.cli.commands.CreateDataSourceInterceptor")
+      interceptor = "org.apache.geode.connectors.jdbc.internal.cli.CreateDataSourceInterceptor")
   @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
       operation = ResourcePermission.Operation.MANAGE)
   public ResultModel createJDNIBinding(
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptor.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptor.java
similarity index 94%
rename from geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptor.java
rename to geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptor.java
index 58343db..1c80ea6 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptor.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptor.java
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import org.apache.geode.management.internal.cli.GfshParseResult;
+import org.apache.geode.management.internal.cli.commands.UsernamePasswordInterceptor;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommand.java
similarity index 78%
rename from geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommand.java
rename to geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommand.java
index 684fc1e..102ba87 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommand.java
@@ -13,9 +13,10 @@
  * the License.
  */
 
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.logging.log4j.Logger;
 import org.springframework.shell.core.annotation.CliCommand;
@@ -23,11 +24,15 @@ import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.configuration.CacheConfig;
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.cache.configuration.JndiBindingsType;
+import org.apache.geode.cache.configuration.RegionConfig;
+import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.internal.cli.commands.CreateJndiBindingCommand.DATASOURCE_TYPE;
+import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.result.model.TabularResultModel;
 import org.apache.geode.management.internal.security.ResourceOperation;
@@ -91,6 +96,29 @@ public class DescribeDataSourceCommand extends InternalGfshCommand {
     return resultModel;
   }
 
+  List<String> getRegionsThatUseDataSource(CacheConfig cacheConfig, String dataSourceName) {
+    return cacheConfig.getRegions()
+        .stream()
+        .filter(regionConfig -> hasJdbcMappingThatUsesDataSource(regionConfig, dataSourceName))
+        .map(RegionConfig::getName)
+        .collect(Collectors.toList());
+  }
+
+  private boolean hasJdbcMappingThatUsesDataSource(RegionConfig regionConfig,
+      String dataSourceName) {
+    return regionConfig.getCustomRegionElements()
+        .stream()
+        .anyMatch(cacheElement -> isRegionMappingUsingDataSource(cacheElement, dataSourceName));
+  }
+
+  private boolean isRegionMappingUsingDataSource(CacheElement cacheElement, String dataSourceName) {
+    if (!(cacheElement instanceof RegionMapping)) {
+      return false;
+    }
+    RegionMapping regionMapping = (RegionMapping) cacheElement;
+    return dataSourceName.equals(regionMapping.getDataSourceName());
+  }
+
   private void addTableRow(TabularResultModel table, String property, String value) {
     table.accumulate("Property", property);
     table.accumulate("Value", value != null ? value : "");
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java b/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
similarity index 83%
rename from geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
rename to geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
index 374c6f9..f5b7cd7 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
+++ b/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
@@ -23,14 +23,14 @@ import org.springframework.shell.core.Completion;
 import org.springframework.shell.core.Converter;
 import org.springframework.shell.core.MethodTarget;
 
-import org.apache.geode.management.internal.cli.commands.CreateDataSourceCommand.PoolProperty;
+import org.apache.geode.connectors.jdbc.internal.cli.CreateDataSourceCommand;
 
 /***
  * Converter for CreateDataSourceCommand's --pool-properties option.
  *
  */
 public class PoolPropertyConverter
-    implements Converter<PoolProperty> {
+    implements Converter<CreateDataSourceCommand.PoolProperty> {
 
   private static ObjectMapper mapper = new ObjectMapper();
   static {
@@ -39,14 +39,14 @@ public class PoolPropertyConverter
 
   @Override
   public boolean supports(Class<?> type, String optionContext) {
-    return PoolProperty.class.isAssignableFrom(type);
+    return CreateDataSourceCommand.PoolProperty.class.isAssignableFrom(type);
   }
 
   @Override
-  public PoolProperty convertFromText(String value,
+  public CreateDataSourceCommand.PoolProperty convertFromText(String value,
       Class<?> targetType, String optionContext) {
     try {
-      return mapper.readValue(value, PoolProperty.class);
+      return mapper.readValue(value, CreateDataSourceCommand.PoolProperty.class);
     } catch (IOException e) {
       throw new IllegalArgumentException("invalid json: \"" + value + "\" details: " + e);
     }
diff --git a/geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
index bf3e1eb..a6ae8aa 100644
--- a/geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
+++ b/geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
@@ -15,7 +15,9 @@
 # limitations under the License.
 #
 # JDBC Connector Extension commands
+org.apache.geode.connectors.jdbc.internal.cli.CreateDataSourceCommand
 org.apache.geode.connectors.jdbc.internal.cli.CreateMappingCommand
+org.apache.geode.connectors.jdbc.internal.cli.DescribeDataSourceCommand
 org.apache.geode.connectors.jdbc.internal.cli.DestroyMappingCommand
 org.apache.geode.connectors.jdbc.internal.cli.DescribeMappingCommand
 org.apache.geode.connectors.jdbc.internal.cli.ListMappingCommand
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandTest.java
similarity index 97%
rename from geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandTest.java
rename to geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandTest.java
index ea4e8d7..6f5f340 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceCommandTest.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -20,7 +20,6 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -39,6 +38,7 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 import org.xml.sax.SAXException;
 
 import org.apache.geode.cache.configuration.CacheConfig;
@@ -49,7 +49,6 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.internal.cli.GfshParseResult;
-import org.apache.geode.management.internal.cli.commands.CreateDataSourceCommand.PoolProperty;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.cli.functions.CreateJndiBindingFunction;
 import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -70,7 +69,7 @@ public class CreateDataSourceCommandTest {
   public void setUp() throws Exception {
     cache = mock(InternalCache.class);
     when(cache.getDistributionManager()).thenReturn(mock(DistributionManager.class));
-    command = spy(CreateDataSourceCommand.class);
+    command = Mockito.spy(CreateDataSourceCommand.class);
     command.setCache(cache);
 
     binding = new JndiBindingsType.JndiBinding();
@@ -101,8 +100,8 @@ public class CreateDataSourceCommandTest {
         + " --pooled --name=name --url=url "
         + "--pool-properties={'name':'name1','value':'value1'},{'name':'name2','value':'value2'}");
 
-    PoolProperty[] poolProperties =
-        (PoolProperty[]) result
+    CreateDataSourceCommand.PoolProperty[] poolProperties =
+        (CreateDataSourceCommand.PoolProperty[]) result
             .getParamValue("pool-properties");
     assertThat(poolProperties).hasSize(2);
     assertThat(poolProperties[0].getName()).isEqualTo("name1");
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptorTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptorTest.java
similarity index 98%
rename from geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptorTest.java
rename to geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptorTest.java
index 83c40b7..145d021 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDataSourceInterceptorTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateDataSourceInterceptorTest.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommandTest.java
similarity index 74%
rename from geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommandTest.java
rename to geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommandTest.java
index 1ca1318..f63ddcc 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeDataSourceCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeDataSourceCommandTest.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.management.internal.cli.commands;
+package org.apache.geode.connectors.jdbc.internal.cli;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.junit.Before;
@@ -30,8 +31,11 @@ import org.junit.ClassRule;
 import org.junit.Test;
 
 import org.apache.geode.cache.configuration.CacheConfig;
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.cache.configuration.JndiBindingsType;
 import org.apache.geode.cache.configuration.JndiBindingsType.JndiBinding.ConfigProperty;
+import org.apache.geode.cache.configuration.RegionConfig;
+import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.management.cli.Result.Status;
 import org.apache.geode.management.internal.cli.commands.CreateJndiBindingCommand.DATASOURCE_TYPE;
@@ -45,16 +49,18 @@ public class DescribeDataSourceCommandTest {
   public static GfshParserRule gfsh = new GfshParserRule();
 
   private DescribeDataSourceCommand command;
-  // private InternalCache cache;
-  JndiBindingsType.JndiBinding binding;
-  List<JndiBindingsType.JndiBinding> bindings;
-  InternalConfigurationPersistenceService clusterConfigService;
+
+  private JndiBindingsType.JndiBinding binding;
+  private List<JndiBindingsType.JndiBinding> bindings;
+  private InternalConfigurationPersistenceService clusterConfigService;
+  private CacheConfig cacheConfig;
+  private List<RegionConfig> regionConfigs;
 
   private static String COMMAND = "describe data-source";
   private static String DATA_SOURCE_NAME = "myDataSource";
 
   @Before
-  public void setUp() throws Exception {
+  public void setUp() {
     command = spy(DescribeDataSourceCommand.class);
 
     binding = new JndiBindingsType.JndiBinding();
@@ -62,9 +68,11 @@ public class DescribeDataSourceCommandTest {
     binding.setType(DATASOURCE_TYPE.POOLED.getType());
     bindings = new ArrayList<>();
     clusterConfigService = mock(InternalConfigurationPersistenceService.class);
-    CacheConfig cacheConfig = mock(CacheConfig.class);
+    cacheConfig = mock(CacheConfig.class);
     when(cacheConfig.getJndiBindings()).thenReturn(bindings);
     bindings.add(binding);
+    regionConfigs = new ArrayList<>();
+    when(cacheConfig.getRegions()).thenReturn(regionConfigs);
 
     doReturn(clusterConfigService).when(command).getConfigurationPersistenceService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
@@ -221,4 +229,63 @@ public class DescribeDataSourceCommandTest {
     assertThat(section.getValuesInRow(5)).isEqualTo(Arrays.asList("name1", "value1"));
     assertThat(section.getValuesInRow(6)).isEqualTo(Arrays.asList("name2", "value2"));
   }
+
+  @Test
+  public void getRegionsThatUseDataSourceGivenNoRegionsReturnsEmptyList() {
+    regionConfigs.clear();
+
+    List<String> result = command.getRegionsThatUseDataSource(cacheConfig, "");
+
+    assertThat(result).isEmpty();
+  }
+
+  @Test
+  public void getRegionsThatUseDataSourceGivenRegionConfigWithNoCustomRegionElementsReturnsEmptyList() {
+    RegionConfig regionConfig = mock(RegionConfig.class);
+    when(regionConfig.getCustomRegionElements()).thenReturn(Collections.emptyList());
+    regionConfigs.add(regionConfig);
+
+    List<String> result = command.getRegionsThatUseDataSource(cacheConfig, "");
+
+    assertThat(result).isEmpty();
+  }
+
+  @Test
+  public void getRegionsThatUseDataSourceGivenRegionConfigWithNonRegionMappingElementReturnsEmptyList() {
+    RegionConfig regionConfig = mock(RegionConfig.class);
+    when(regionConfig.getCustomRegionElements())
+        .thenReturn(Collections.singletonList(mock(CacheElement.class)));
+    regionConfigs.add(regionConfig);
+
+    List<String> result = command.getRegionsThatUseDataSource(cacheConfig, "");
+
+    assertThat(result).isEmpty();
+  }
+
+  @Test
+  public void getRegionsThatUseDataSourceGivenRegionConfigWithRegionMappingForOtherDataSourceReturnsEmptyList() {
+    RegionConfig regionConfig = mock(RegionConfig.class);
+    when(regionConfig.getCustomRegionElements())
+        .thenReturn(Collections.singletonList(mock(RegionMapping.class)));
+    regionConfigs.add(regionConfig);
+
+    List<String> result = command.getRegionsThatUseDataSource(cacheConfig, "bogusDataSource");
+
+    assertThat(result).isEmpty();
+  }
+
+  @Test
+  public void getRegionsThatUseDataSourceGivenRegionConfigWithRegionMappingForDataSourceReturnsRegionName() {
+    RegionConfig regionConfig = mock(RegionConfig.class);
+    when(regionConfig.getName()).thenReturn("regionName");
+    RegionMapping regionMapping = mock(RegionMapping.class);
+    when(regionMapping.getDataSourceName()).thenReturn("dataSourceName");
+    when(regionConfig.getCustomRegionElements())
+        .thenReturn(Collections.singletonList(regionMapping));
+    regionConfigs.add(regionConfig);
+
+    List<String> result = command.getRegionsThatUseDataSource(cacheConfig, "dataSourceName");
+
+    assertThat(result).isEqualTo(Collections.singletonList("regionName"));
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java
index 516ede4..a2d6049 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java
@@ -51,7 +51,6 @@ public class CommandAvailabilityIndicator extends GfshCommand {
       CliStrings.DESTROY_GATEWAYSENDER, AlterAsyncEventQueueCommand.COMMAND_NAME,
       DestroyAsyncEventQueueCommand.DESTROY_ASYNC_EVENT_QUEUE,
       DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER,
-      CreateDataSourceCommand.CREATE_DATA_SOURCE,
       CreateJndiBindingCommand.CREATE_JNDIBINDING, DestroyJndiBindingCommand.DESTROY_JNDIBINDING,
       DescribeJndiBindingCommand.DESCRIBE_JNDI_BINDING, ListJndiBindingCommand.LIST_JNDIBINDING})
   public boolean available() {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UsernamePasswordInterceptor.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UsernamePasswordInterceptor.java
index ebf527c..11bec5b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UsernamePasswordInterceptor.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UsernamePasswordInterceptor.java
@@ -30,7 +30,7 @@ public class UsernamePasswordInterceptor extends AbstractCliAroundInterceptor {
   }
 
   // Constructor for unit test
-  UsernamePasswordInterceptor(Gfsh gfsh) {
+  public UsernamePasswordInterceptor(Gfsh gfsh) {
     this.gfsh = gfsh;
   }