GEODE-2933: Add jmx-manager-hostname-for-clients for startLocator

Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/d5bde9fb
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/d5bde9fb
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/d5bde9fb

Branch: refs/heads/feature/GEM-1483
Commit: d5bde9fb69ab511de1a6c98ce7a16aae0a143326
Parents: 0ef7f56
Author: Jared Stewart <jstew...@pivotal.io>
Authored: Mon Jun 5 10:54:13 2017 -0700
Committer: Jared Stewart <jstew...@pivotal.io>
Committed: Fri Jun 9 15:17:11 2017 -0700

----------------------------------------------------------------------
 .../cli/commands/LauncherLifecycleCommands.java | 95 ++++++++++---------
 .../internal/cli/i18n/CliStrings.java           |  6 ++
 .../cli/GfshParserAutoCompletionTest.java       | 24 ++---
 .../internal/cli/GfshParserParsingTest.java     |  9 +-
 .../commands/LauncherLifecycleCommandsTest.java | 97 +++++++++++++++++---
 5 files changed, 157 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/d5bde9fb/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
index 89a236b..45fbf1b 100755
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
@@ -22,6 +22,7 @@ import static 
org.apache.geode.distributed.ConfigurationProperties.ENABLE_TIME_S
 import static org.apache.geode.distributed.ConfigurationProperties.GROUPS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_BIND_ADDRESS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_HOSTNAME_FOR_CLIENTS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.LOAD_CLUSTER_CONFIGURATION_FROM_DIR;
 import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.LOCATOR_WAIT_TIME;
@@ -48,6 +49,7 @@ import org.apache.commons.lang.ArrayUtils;
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.AbstractLauncher;
+import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.LocatorLauncher;
 import org.apache.geode.distributed.LocatorLauncher.LocatorState;
 import org.apache.geode.distributed.ServerLauncher;
@@ -170,6 +172,8 @@ public class LauncherLifecycleCommands implements 
GfshCommand {
           help = CliStrings.START_LOCATOR__GROUP__HELP) final String group,
       @CliOption(key = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS,
           help = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS__HELP) final 
String hostnameForClients,
+      @CliOption(key = 
ConfigurationProperties.JMX_MANAGER_HOSTNAME_FOR_CLIENTS,
+          help = 
CliStrings.START_LOCATOR__JMX_MANAGER_HOSTNAME_FOR_CLIENTS__HELP) final String 
jmxManagerHostnameForClients,
       @CliOption(key = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH,
           specifiedDefaultValue = "true", unspecifiedDefaultValue = "false",
           help = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH__HELP) 
final Boolean includeSystemClasspath,
@@ -246,20 +250,20 @@ public class LauncherLifecycleCommands implements 
GfshCommand {
 
       Properties gemfireProperties = new Properties();
 
-      gemfireProperties.setProperty(GROUPS, StringUtils.defaultString(group));
-      gemfireProperties.setProperty(LOCATORS, 
StringUtils.defaultString(locators));
-      gemfireProperties.setProperty(LOG_LEVEL, 
StringUtils.defaultString(logLevel));
-      gemfireProperties.setProperty(MCAST_ADDRESS, 
StringUtils.defaultString(mcastBindAddress));
-      gemfireProperties.setProperty(MCAST_PORT, 
StringUtils.defaultString(mcastPort));
-      gemfireProperties.setProperty(ENABLE_CLUSTER_CONFIGURATION,
-          StringUtils.defaultString(enableSharedConfiguration));
-      gemfireProperties.setProperty(LOAD_CLUSTER_CONFIGURATION_FROM_DIR,
-          StringUtils.defaultString(loadSharedConfigurationFromDirectory));
-      gemfireProperties.setProperty(CLUSTER_CONFIGURATION_DIR,
-          StringUtils.defaultString(clusterConfigDir));
-      gemfireProperties.setProperty(HTTP_SERVICE_PORT, 
StringUtils.defaultString(httpServicePort));
-      gemfireProperties.setProperty(HTTP_SERVICE_BIND_ADDRESS,
-          StringUtils.defaultString(httpServiceBindAddress));
+      setPropertyIfNotNull(gemfireProperties, GROUPS, group);
+      setPropertyIfNotNull(gemfireProperties, LOCATORS, locators);
+      setPropertyIfNotNull(gemfireProperties, LOG_LEVEL, logLevel);
+      setPropertyIfNotNull(gemfireProperties, MCAST_ADDRESS, mcastBindAddress);
+      setPropertyIfNotNull(gemfireProperties, MCAST_PORT, mcastPort);
+      setPropertyIfNotNull(gemfireProperties, ENABLE_CLUSTER_CONFIGURATION,
+          enableSharedConfiguration);
+      setPropertyIfNotNull(gemfireProperties, 
LOAD_CLUSTER_CONFIGURATION_FROM_DIR,
+          loadSharedConfigurationFromDirectory);
+      setPropertyIfNotNull(gemfireProperties, CLUSTER_CONFIGURATION_DIR, 
clusterConfigDir);
+      setPropertyIfNotNull(gemfireProperties, HTTP_SERVICE_PORT, 
httpServicePort);
+      setPropertyIfNotNull(gemfireProperties, HTTP_SERVICE_BIND_ADDRESS, 
httpServiceBindAddress);
+      setPropertyIfNotNull(gemfireProperties, JMX_MANAGER_HOSTNAME_FOR_CLIENTS,
+          jmxManagerHostnameForClients);
 
 
       // read the OSProcess enable redirect system property here -- TODO: 
replace with new GFSH
@@ -424,6 +428,12 @@ public class LauncherLifecycleCommands implements 
GfshCommand {
     }
   }
 
+  private void setPropertyIfNotNull(Properties properties, String key, Object 
value) {
+    if (key != null && value != null) {
+      properties.setProperty(key, value.toString());
+    }
+  }
+
   protected String[] createStartLocatorCommandLine(final LocatorLauncher 
launcher,
       final String gemfirePropertiesPathname, final String 
gemfireSecurityPropertiesPathname,
       final Properties gemfireProperties, final String userClasspath,
@@ -868,6 +878,8 @@ public class LauncherLifecycleCommands implements 
GfshCommand {
           help = CliStrings.START_SERVER__GROUP__HELP) final String group,
       @CliOption(key = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS,
           help = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS__HELP) final 
String hostNameForClients,
+      @CliOption(key = 
ConfigurationProperties.JMX_MANAGER_HOSTNAME_FOR_CLIENTS,
+          help = 
CliStrings.START_SERVER__JMX_MANAGER_HOSTNAME_FOR_CLIENTS__HELP) final String 
jmxManagerHostnameForClients,
       @CliOption(key = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH,
           specifiedDefaultValue = "true", unspecifiedDefaultValue = "false",
           help = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH__HELP) 
final Boolean includeSystemClasspath,
@@ -1001,36 +1013,31 @@ public class LauncherLifecycleCommands implements 
GfshCommand {
 
       Properties gemfireProperties = new Properties();
 
-      gemfireProperties.setProperty(BIND_ADDRESS, 
StringUtils.defaultString(bindAddress));
-      gemfireProperties.setProperty(CACHE_XML_FILE, 
StringUtils.defaultString(cacheXmlPathname));
-      gemfireProperties.setProperty(ENABLE_TIME_STATISTICS,
-          StringUtils.defaultString(enableTimeStatistics));
-      gemfireProperties.setProperty(GROUPS, StringUtils.defaultString(group));
-      gemfireProperties.setProperty(LOCATORS, 
StringUtils.defaultString(locators));
-      gemfireProperties.setProperty(LOCATOR_WAIT_TIME, 
StringUtils.defaultString(locatorWaitTime));
-      gemfireProperties.setProperty(LOG_LEVEL, 
StringUtils.defaultString(logLevel));
-      gemfireProperties.setProperty(MCAST_ADDRESS, 
StringUtils.defaultString(mcastBindAddress));
-      gemfireProperties.setProperty(MCAST_PORT, 
StringUtils.defaultString(mcastPort));
-      gemfireProperties.setProperty(MEMCACHED_PORT, 
StringUtils.defaultString(memcachedPort));
-      gemfireProperties.setProperty(MEMCACHED_PROTOCOL,
-          StringUtils.defaultString(memcachedProtocol));
-      gemfireProperties.setProperty(MEMCACHED_BIND_ADDRESS,
-          StringUtils.defaultString(memcachedBindAddress));
-      gemfireProperties.setProperty(REDIS_PORT, 
StringUtils.defaultString(redisPort));
-      gemfireProperties.setProperty(REDIS_BIND_ADDRESS,
-          StringUtils.defaultString(redisBindAddress));
-      gemfireProperties.setProperty(REDIS_PASSWORD, 
StringUtils.defaultString(redisPassword));
-      gemfireProperties.setProperty(STATISTIC_ARCHIVE_FILE,
-          StringUtils.defaultString(statisticsArchivePathname));
-      gemfireProperties.setProperty(USE_CLUSTER_CONFIGURATION,
-          StringUtils.defaultString(requestSharedConfiguration, 
Boolean.TRUE.toString()));
-      gemfireProperties.setProperty(LOCK_MEMORY, 
StringUtils.defaultString(lockMemory));
-      gemfireProperties.setProperty(OFF_HEAP_MEMORY_SIZE,
-          StringUtils.defaultString(offHeapMemorySize));
-      gemfireProperties.setProperty(START_DEV_REST_API, 
StringUtils.defaultString(startRestApi));
-      gemfireProperties.setProperty(HTTP_SERVICE_PORT, 
StringUtils.defaultString(httpServicePort));
-      gemfireProperties.setProperty(HTTP_SERVICE_BIND_ADDRESS,
-          StringUtils.defaultString(httpServiceBindAddress));
+      setPropertyIfNotNull(gemfireProperties, BIND_ADDRESS, bindAddress);
+      setPropertyIfNotNull(gemfireProperties, CACHE_XML_FILE, 
cacheXmlPathname);
+      setPropertyIfNotNull(gemfireProperties, ENABLE_TIME_STATISTICS, 
enableTimeStatistics);
+      setPropertyIfNotNull(gemfireProperties, GROUPS, group);
+      setPropertyIfNotNull(gemfireProperties, JMX_MANAGER_HOSTNAME_FOR_CLIENTS,
+          jmxManagerHostnameForClients);
+      setPropertyIfNotNull(gemfireProperties, LOCATORS, locators);
+      setPropertyIfNotNull(gemfireProperties, LOCATOR_WAIT_TIME, 
locatorWaitTime);
+      setPropertyIfNotNull(gemfireProperties, LOG_LEVEL, logLevel);
+      setPropertyIfNotNull(gemfireProperties, MCAST_ADDRESS, mcastBindAddress);
+      setPropertyIfNotNull(gemfireProperties, MCAST_PORT, mcastPort);
+      setPropertyIfNotNull(gemfireProperties, MEMCACHED_PORT, memcachedPort);
+      setPropertyIfNotNull(gemfireProperties, MEMCACHED_PROTOCOL, 
memcachedProtocol);
+      setPropertyIfNotNull(gemfireProperties, MEMCACHED_BIND_ADDRESS, 
memcachedBindAddress);
+      setPropertyIfNotNull(gemfireProperties, REDIS_PORT, redisPort);
+      setPropertyIfNotNull(gemfireProperties, REDIS_BIND_ADDRESS, 
redisBindAddress);
+      setPropertyIfNotNull(gemfireProperties, REDIS_PASSWORD, redisPassword);
+      setPropertyIfNotNull(gemfireProperties, STATISTIC_ARCHIVE_FILE, 
statisticsArchivePathname);
+      setPropertyIfNotNull(gemfireProperties, USE_CLUSTER_CONFIGURATION,
+          requestSharedConfiguration);
+      setPropertyIfNotNull(gemfireProperties, LOCK_MEMORY, lockMemory);
+      setPropertyIfNotNull(gemfireProperties, OFF_HEAP_MEMORY_SIZE, 
offHeapMemorySize);
+      setPropertyIfNotNull(gemfireProperties, START_DEV_REST_API, 
startRestApi);
+      setPropertyIfNotNull(gemfireProperties, HTTP_SERVICE_PORT, 
httpServicePort);
+      setPropertyIfNotNull(gemfireProperties, HTTP_SERVICE_BIND_ADDRESS, 
httpServiceBindAddress);
       // if username is specified in the command line, it will overwrite 
what's set in the
       // properties file
       if (StringUtils.isNotBlank(userName)) {

http://git-wip-us.apache.org/repos/asf/geode/blob/d5bde9fb/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
index a7a3742..2758429 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
@@ -2366,6 +2366,9 @@ public class CliStrings {
   public static final String START_LOCATOR__GROUP = "group";
   public static final String START_LOCATOR__GROUP__HELP = "Group(s) the 
Locator will be a part of.";
   public static final String START_LOCATOR__HOSTNAME_FOR_CLIENTS = 
"hostname-for-clients";
+
+  public static final String 
START_LOCATOR__JMX_MANAGER_HOSTNAME_FOR_CLIENTS__HELP =
+      "Hostname provided to clients by the locator for the location of a JMX 
Manager.";
   public static final String START_LOCATOR__HOSTNAME_FOR_CLIENTS__HELP =
       "Hostname or IP address that will be sent to clients so they can connect 
to this Locator. The default is the bind-address of the Locator.";
   public static final String START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH = 
"include-system-classpath";
@@ -2514,6 +2517,9 @@ public class CliStrings {
   public static final String START_SERVER__INITIAL_HEAP = "initial-heap";
   public static final String START_SERVER__INITIAL_HEAP__HELP =
       "Initial size of the heap in the same format as the JVM -Xms parameter.";
+  public static final String 
START_SERVER__JMX_MANAGER_HOSTNAME_FOR_CLIENTS__HELP =
+      "Hostname provided to clients by the server for the location of a JMX 
Manager.";
+
   public static final String START_SERVER__J = "J";
   public static final String START_SERVER__J__HELP =
       "Argument passed to the JVM on which the server will run. For example, 
--J=-Dfoo.bar=true will set the system property \"foo.bar\" to \"true\".";

http://git-wip-us.apache.org/repos/asf/geode/blob/d5bde9fb/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserAutoCompletionTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserAutoCompletionTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserAutoCompletionTest.java
index aa97795..a2946d4 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserAutoCompletionTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserAutoCompletionTest.java
@@ -122,7 +122,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1 --";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 2);
-    assertThat(candidate.size()).isEqualTo(50);
+    assertThat(candidate.size()).isEqualTo(51);
     assertTrue(candidate.getCandidates().contains(new 
Completion("--properties-file")));
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "J");
   }
@@ -132,7 +132,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1 ";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 1);
-    assertThat(candidate.size()).isEqualTo(50);
+    assertThat(candidate.size()).isEqualTo(51);
     assertTrue(candidate.getCandidates().contains(new Completion(" 
--properties-file")));
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "--J");
   }
@@ -142,7 +142,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(50);
+    assertThat(candidate.size()).isEqualTo(51);
     assertTrue(candidate.getCandidates().contains(new Completion(" 
--properties-file")));
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --J");
   }
@@ -151,23 +151,23 @@ public class GfshParserAutoCompletionTest {
   public void testCompleteJ() throws Exception {
     buffer = "start server --name=name1 --J=";
     candidate = parser.complete(buffer);
-    assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(0);
+    assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 3);
+    assertThat(candidate.size()).isEqualTo(1);
   }
 
   @Test
   public void testCompleteWithValue() throws Exception {
     buffer = "start server --name=name1 --J";
     candidate = parser.complete(buffer);
-    assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(0);
+    assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 3);
+    assertThat(candidate.size()).isEqualTo(1);
   }
 
   @Test
   public void testCompleteWithDash() throws Exception {
     buffer = "start server --name=name1 --J=-Dfoo.bar --";
     candidate = parser.complete(buffer);
-    assertThat(candidate.size()).isEqualTo(49);
+    assertThat(candidate.size()).isEqualTo(50);
   }
 
   @Test
@@ -185,7 +185,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1 --J=-Dtest=test1 --J=-Dfoo=bar";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(49);
+    assertThat(candidate.size()).isEqualTo(50);
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " 
--assign-buckets");
   }
 
@@ -194,7 +194,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --J=-Dtest=test1 --J=-Dfoo=bar --name=name1";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(49);
+    assertThat(candidate.size()).isEqualTo(50);
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " 
--assign-buckets");
   }
 
@@ -203,7 +203,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1 --locators=localhost --J=-Dfoo=bar";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length());
-    assertThat(candidate.size()).isEqualTo(48);
+    assertThat(candidate.size()).isEqualTo(49);
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " 
--assign-buckets");
   }
 
@@ -212,7 +212,7 @@ public class GfshParserAutoCompletionTest {
     buffer = "start server --name=name1 --locators=localhost  --J=-Dfoo=bar 
--";
     candidate = parser.complete(buffer);
     assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 2);
-    assertThat(candidate.size()).isEqualTo(48);
+    assertThat(candidate.size()).isEqualTo(49);
     assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + 
"assign-buckets");
   }
 

http://git-wip-us.apache.org/repos/asf/geode/blob/d5bde9fb/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserParsingTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserParsingTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserParsingTest.java
index 0c2af1d..47d150d 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserParsingTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/GfshParserParsingTest.java
@@ -81,8 +81,9 @@ public class GfshParserParsingTest {
     GfshParseResult result = parser.parse(buffer);
     assertThat(result).isNotNull();
     Object[] arguments = result.getArguments();
-    // the 17th argument is the jvmarguments;
-    String[] jvmArgs = (String[]) arguments[17];
+    int indexOfJvmArgumentsParameterInStartLocator = 18;
+
+    String[] jvmArgs = (String[]) 
arguments[indexOfJvmArgumentsParameterInStartLocator];
     assertThat(jvmArgs).hasSize(2);
 
     // make sure the resulting jvm arguments do not have quotes (either single 
or double) around
@@ -99,8 +100,8 @@ public class GfshParserParsingTest {
     GfshParseResult result = parser.parse(buffer);
     assertThat(result).isNotNull();
     Object[] arguments = result.getArguments();
-    // the 18th argument is the jvmarguments;
-    String[] jvmArgs = (String[]) arguments[18];
+    int indexOfJvmArgumentsParameterInStartServer = 19;
+    String[] jvmArgs = (String[]) 
arguments[indexOfJvmArgumentsParameterInStartServer];
     assertThat(jvmArgs).hasSize(2);
 
     // make sure the resulting jvm arguments do not have quotes (either single 
or double) around

http://git-wip-us.apache.org/repos/asf/geode/blob/d5bde9fb/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommandsTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommandsTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommandsTest.java
index 9b38d86..30a9a61 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommandsTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommandsTest.java
@@ -15,37 +15,106 @@
 
 package org.apache.geode.management.internal.cli.commands;
 
+import static 
org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_HOSTNAME_FOR_CLIENTS;
+import static 
org.apache.geode.distributed.ConfigurationProperties.USE_CLUSTER_CONFIGURATION;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
-import org.apache.geode.management.internal.cli.GfshParseResult;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
+import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
 import org.apache.geode.test.dunit.rules.GfshParserRule;
-import org.junit.ClassRule;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.test.junit.categories.UnitTest;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
 import org.mockito.ArgumentCaptor;
-import org.springframework.util.ReflectionUtils;
 
 import java.util.Properties;
 
+@Category(IntegrationTest.class)
 public class LauncherLifecycleCommandsTest {
-  @ClassRule
-  public static GfshParserRule commandRule = new GfshParserRule();
+  private static final String FAKE_HOSTNAME = "someFakeHostname";
+
+  @Rule
+  public GfshParserRule commandRule = new GfshParserRule();
+
+  @Rule
+  public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
   @Test
-  public void getLauncherLifecycleCommand() throws Exception {
-    LauncherLifecycleCommands spy = commandRule.spyCommand("start locator");
-    doReturn(mock(Gfsh.class)).when(spy).getGfsh();
+  public void startLocatorWorksWithNoOptions() throws Exception {
+    LauncherLifecycleCommands spy = spyOnCommand("start locator");
     commandRule.executeLastCommandWithInstance(spy);
 
-    ArgumentCaptor<Properties> propsCaptor = 
ArgumentCaptor.forClass(Properties.class);
-    verify(spy).createStartLocatorCommandLine(any(), any(), any(), 
propsCaptor.capture(), any(),
-        any(), any(), any(), any());
+    ArgumentCaptor<Properties> gemfirePropertiesCaptor = 
ArgumentCaptor.forClass(Properties.class);
+    verify(spy).createStartLocatorCommandLine(any(), any(), any(),
+        gemfirePropertiesCaptor.capture(), any(), any(), any(), any(), any());
+
+    Properties gemfireProperties = gemfirePropertiesCaptor.getValue();
+    assertThat(gemfireProperties).containsKey(ENABLE_CLUSTER_CONFIGURATION);
+    
assertThat(gemfireProperties.get(ENABLE_CLUSTER_CONFIGURATION)).isEqualTo("true");
+  }
+
+  @Test
+  public void startServerWorksWithNoOptions() throws Exception {
+    LauncherLifecycleCommands spy = spyOnCommand("start server");
+    commandRule.executeLastCommandWithInstance(spy);
+
+    ArgumentCaptor<Properties> gemfirePropertiesCaptor = 
ArgumentCaptor.forClass(Properties.class);
+    verify(spy).createStartServerCommandLine(any(), any(), any(), 
gemfirePropertiesCaptor.capture(),
+        any(), any(), any(), any(), any(), any());
+
+    Properties gemfireProperties = gemfirePropertiesCaptor.getValue();
+    assertThat(gemfireProperties).containsKey(USE_CLUSTER_CONFIGURATION);
+    
assertThat(gemfireProperties.get(USE_CLUSTER_CONFIGURATION)).isEqualTo("true");
+  }
+
+  @Test
+  public void startLocatorRespectsJmxManagerHostnameForClients() throws 
Exception {
+    String startLocatorCommand = new CommandStringBuilder("start locator")
+        .addOption(JMX_MANAGER_HOSTNAME_FOR_CLIENTS, FAKE_HOSTNAME).toString();
+
+    LauncherLifecycleCommands spyCommand = spyOnCommand(startLocatorCommand);
+    commandRule.executeLastCommandWithInstance(spyCommand);
+
+    ArgumentCaptor<Properties> gemfirePropertiesCaptor = 
ArgumentCaptor.forClass(Properties.class);
+    verify(spyCommand).createStartLocatorCommandLine(any(), any(), any(),
+        gemfirePropertiesCaptor.capture(), any(), any(), any(), any(), any());
+
+    Properties gemfireProperties = gemfirePropertiesCaptor.getValue();
+    
assertThat(gemfireProperties).containsKey(JMX_MANAGER_HOSTNAME_FOR_CLIENTS);
+    
assertThat(gemfireProperties.get(JMX_MANAGER_HOSTNAME_FOR_CLIENTS)).isEqualTo(FAKE_HOSTNAME);
+  }
+
+  @Test
+  public void startServerRespectsJmxManagerHostnameForClients() throws 
Exception {
+    String startServerCommand = new CommandStringBuilder("start server")
+        .addOption(JMX_MANAGER_HOSTNAME_FOR_CLIENTS, FAKE_HOSTNAME).toString();
+
+    LauncherLifecycleCommands commandSpy = spyOnCommand(startServerCommand);
+
+    commandRule.executeLastCommandWithInstance(commandSpy);
+
+    ArgumentCaptor<Properties> gemfirePropertiesCaptor = 
ArgumentCaptor.forClass(Properties.class);
+    verify(commandSpy).createStartServerCommandLine(any(), any(), any(),
+        gemfirePropertiesCaptor.capture(), any(), any(), any(), any(), any(), 
any());
+
+    Properties gemfireProperties = gemfirePropertiesCaptor.getValue();
+    
assertThat(gemfireProperties).containsKey(JMX_MANAGER_HOSTNAME_FOR_CLIENTS);
+    
assertThat(gemfireProperties.get(JMX_MANAGER_HOSTNAME_FOR_CLIENTS)).isEqualTo(FAKE_HOSTNAME);
+  }
+
+  private LauncherLifecycleCommands spyOnCommand(String command) {
+    LauncherLifecycleCommands spy = commandRule.spyCommand(command);
+    doReturn(mock(Gfsh.class)).when(spy).getGfsh();
+    
doReturn(temporaryFolder.getRoot().getAbsolutePath()).when(spy).resolveWorkingDir(any(),
 any());
 
-    Properties properties = propsCaptor.getValue();
-    System.out.println();
+    return spy;
   }
 }

Reply via email to