You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2017/08/09 18:07:04 UTC
geode git commit: GEODE-3292: Embedded PULSE Connection Failure When
jmx-manager-bind-address != localhost
Repository: geode
Updated Branches:
refs/heads/develop 0fde215a1 -> b06f69f22
GEODE-3292: Embedded PULSE Connection Failure When jmx-manager-bind-address != localhost
* ManagementAgent sets the 'pulse.host' system property whenever a 'jmx-manager-bind-address' is configured.
* PULSE gets the hostname of the local JMX Manager through the 'pulse.host' system property, reverting to 'localhost' by default.
* this closes #664
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/b06f69f2
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/b06f69f2
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/b06f69f2
Branch: refs/heads/develop
Commit: b06f69f226924c1c13096011bfe29fc3a0ce8401
Parents: 0fde215
Author: Juan Jose Ramos Cassella <ju...@gmail.com>
Authored: Fri Jul 28 10:55:20 2017 +0100
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Aug 9 11:04:52 2017 -0700
----------------------------------------------------------------------
.../test/dunit/rules/EmbeddedPulseRule.java | 6 ++
.../tools/pulse/PulseConnectivityTest.java | 99 ++++++++++++++++++++
.../tools/pulse/PulseVerificationTest.java | 70 --------------
.../management/internal/ManagementAgent.java | 4 +-
.../tools/pulse/internal/PulseAppListener.java | 7 +-
.../pulse/internal/PulseAppListenerTest.java | 91 ++++++++++++++++++
6 files changed, 203 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
index f81d7f4..bbf4b94 100644
--- a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
+++ b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
@@ -38,6 +38,12 @@ public class EmbeddedPulseRule extends ExternalResource {
repository.setHost("localhost");
}
+ public void useJmxManager(String jmxHost, int jmxPort) {
+ repository.setJmxUseLocator(false);
+ repository.setHost(jmxHost + "");
+ repository.setPort(jmxPort + "");
+ }
+
public void useJmxPort(int jmxPort) {
repository.setJmxUseLocator(false);
repository.setPort(jmxPort + "");
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseConnectivityTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseConnectivityTest.java b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseConnectivityTest.java
new file mode 100644
index 0000000..606864d
--- /dev/null
+++ b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseConnectivityTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.tools.pulse;
+
+import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_BIND_ADDRESS;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Properties;
+
+import org.apache.http.HttpResponse;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
+import org.apache.geode.test.dunit.rules.HttpClientRule;
+import org.apache.geode.test.dunit.rules.LocatorStarterRule;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
+
+@RunWith(Parameterized.class)
+@Category(IntegrationTest.class)
+public class PulseConnectivityTest {
+ @Rule
+ public LocatorStarterRule locator = new LocatorStarterRule().withJMXManager();
+
+ @Rule
+ public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
+
+ @Rule
+ public HttpClientRule client = new HttpClientRule(locator::getHttpPort);
+
+ @Parameterized.Parameter
+ public static String jmxBindAddress;
+
+ @Parameterized.Parameters(name = "JMXBindAddress: {0}")
+ public static Collection<String> bindAddresses() throws Exception {
+ String nonDefaultJmxBindAddress = InetAddress.getLocalHost().getHostName();
+ if ("localhost".equals(nonDefaultJmxBindAddress)) {
+ nonDefaultJmxBindAddress = InetAddress.getLocalHost().getHostAddress();
+ }
+
+ return Arrays.asList(new String[] {"localhost", nonDefaultJmxBindAddress});
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ Properties locatorProperties = new Properties();
+ if (!"localhost".equals(jmxBindAddress))
+ locatorProperties.setProperty(JMX_MANAGER_BIND_ADDRESS, jmxBindAddress);
+ locator.withProperties(locatorProperties).startLocator();
+ }
+
+ @Test
+ public void testLogin() throws Exception {
+ HttpResponse response = client.loginToPulse("admin", "wrongPassword");
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(302);
+ assertThat(response.getFirstHeader("Location").getValue())
+ .contains("/pulse/login.html?error=BAD_CREDS");
+ client.loginToPulseAndVerify("admin", "admin");
+ }
+
+ @Test
+ public void testConnectToJmx() throws Exception {
+ pulse.useJmxManager(jmxBindAddress, locator.getJmxPort());
+ Cluster cluster = pulse.getRepository().getCluster("admin", null);
+ assertThat(cluster.isConnectedFlag()).isTrue();
+ assertThat(cluster.getServerCount()).isEqualTo(0);
+ }
+
+ @Test
+ public void testConnectToLocator() throws Exception {
+ pulse.useLocatorPort(locator.getPort());
+ Cluster cluster = pulse.getRepository().getCluster("admin", null);
+ assertThat(cluster.isConnectedFlag()).isTrue();
+ assertThat(cluster.getServerCount()).isEqualTo(0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
deleted file mode 100644
index 44fadb6..0000000
--- a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.tools.pulse;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
-import org.apache.geode.test.dunit.rules.HttpClientRule;
-import org.apache.geode.test.dunit.rules.LocatorStarterRule;
-import org.apache.geode.test.junit.categories.IntegrationTest;
-import org.apache.geode.tools.pulse.internal.data.Cluster;
-import org.apache.http.HttpResponse;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-
-@Category(IntegrationTest.class)
-public class PulseVerificationTest {
-
- @ClassRule
- public static LocatorStarterRule locator =
- new LocatorStarterRule().withJMXManager().withAutoStart();
-
- @Rule
- public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
-
- @Rule
- public HttpClientRule client = new HttpClientRule(locator::getHttpPort);
-
- @Test
- public void loginWithIncorrectPassword() throws Exception {
- HttpResponse response = client.loginToPulse("admin", "wrongPassword");
- assertThat(response.getStatusLine().getStatusCode()).isEqualTo(302);
- assertThat(response.getFirstHeader("Location").getValue())
- .contains("/pulse/login.html?error=BAD_CREDS");
-
- client.loginToPulseAndVerify("admin", "admin");
- }
-
- @Test
- public void testConnectToJmx() throws Exception {
- pulse.useJmxPort(locator.getJmxPort());
- Cluster cluster = pulse.getRepository().getCluster("admin", null);
- assertThat(cluster.isConnectedFlag()).isTrue();
- assertThat(cluster.getServerCount()).isEqualTo(0);
- }
-
- @Test
- public void testConnectToLocator() throws Exception {
- pulse.useLocatorPort(locator.getPort());
- Cluster cluster = pulse.getRepository().getCluster("admin", null);
- assertThat(cluster.isConnectedFlag()).isTrue();
- assertThat(cluster.getServerCount()).isEqualTo(0);
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
index 554dc66..11590cf 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
@@ -74,7 +74,7 @@ import javax.rmi.ssl.SslRMIClientSocketFactory;
* <p>
* The ManagementAgent could be used in a loner or GemFire client to define and control JMX server
* end points for the Platform MBeanServer and the GemFire MBeans hosted within it.
- *
+ *
* @since GemFire 7.0
*/
public class ManagementAgent {
@@ -99,6 +99,7 @@ public class ManagementAgent {
* embedded pulse webapp can use a local MBeanServer instead of a remote JMX connection.
*/
private static final String PULSE_EMBEDDED_PROP = "pulse.embedded";
+ private static final String PULSE_HOST_PROP = "pulse.host";
private static final String PULSE_PORT_PROP = "pulse.port";
private static final String PULSE_USESSL_MANAGER = "pulse.useSSL.manager";
private static final String PULSE_USESSL_LOCATOR = "pulse.useSSL.locator";
@@ -270,6 +271,7 @@ public class ManagementAgent {
}
System.setProperty(PULSE_EMBEDDED_PROP, "true");
+ System.setProperty(PULSE_HOST_PROP, "" + config.getJmxManagerBindAddress());
System.setProperty(PULSE_PORT_PROP, "" + config.getJmxManagerPort());
final SocketCreator jmxSocketCreator =
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
index 34dbf2e..6aef34f 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
@@ -35,9 +35,9 @@ import javax.servlet.ServletContextListener;
/**
* This class is used for checking the application running mode i.e. Embedded or not
- *
+ *
* @since GemFire version 7.0.Beta 2012-09-23
- *
+ *
*/
// @WebListener
public class PulseAppListener implements ServletContextListener {
@@ -81,7 +81,8 @@ public class PulseAppListener implements ServletContextListener {
// jmx connection parameters
logger.info(resourceBundle.getString("LOG_MSG_APP_RUNNING_EMBEDDED_MODE"));
repository.setJmxUseLocator(false);
- repository.setHost(PulseConstants.GEMFIRE_DEFAULT_HOST);
+ repository.setHost(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_HOST,
+ PulseConstants.GEMFIRE_DEFAULT_HOST));
repository.setPort(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT,
PulseConstants.GEMFIRE_DEFAULT_PORT));
http://git-wip-us.apache.org/repos/asf/geode/blob/b06f69f2/geode-pulse/src/test/java/org/apache/geode/tools/pulse/internal/PulseAppListenerTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/internal/PulseAppListenerTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/internal/PulseAppListenerTest.java
new file mode 100644
index 0000000..644a991
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/internal/PulseAppListenerTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.tools.pulse.internal;
+
+import javax.servlet.ServletContextEvent;
+import static org.mockito.Mockito.*;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestRule;
+
+import org.apache.geode.test.junit.categories.UnitTest;
+import org.apache.geode.tools.pulse.internal.data.PulseConstants;
+import org.apache.geode.tools.pulse.internal.data.Repository;
+
+@Category(UnitTest.class)
+public class PulseAppListenerTest {
+ private Repository repository;
+ private PulseAppListener appListener;
+
+ @Rule
+ public final TestRule restoreSystemProperties = new RestoreSystemProperties();
+
+ @Before
+ public void setUp() {
+ repository = Repository.get();
+ appListener = new PulseAppListener();
+ }
+
+ @Test
+ public void embeddedModeDefaultPropertiesRepositoryInitializationTest() {
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_EMBEDDED, "true");
+ appListener.contextInitialized(mock(ServletContextEvent.class));
+
+ Assert.assertEquals(false, repository.getJmxUseLocator());
+ Assert.assertEquals(false, repository.isUseSSLManager());
+ Assert.assertEquals(false, repository.isUseSSLLocator());
+ Assert.assertEquals(PulseConstants.GEMFIRE_DEFAULT_PORT, repository.getPort());
+ Assert.assertEquals(PulseConstants.GEMFIRE_DEFAULT_HOST, repository.getHost());
+
+ }
+
+ @Test
+ public void embeddedModeNonDefaultPropertiesRepositoryInitializationTest() {
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_EMBEDDED, "true");
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT, "9999");
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_HOST, "nonDefaultBindAddress");
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER,
+ Boolean.TRUE.toString());
+ System.setProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR,
+ Boolean.TRUE.toString());
+
+ appListener.contextInitialized(mock(ServletContextEvent.class));
+
+ Assert.assertEquals(false, repository.getJmxUseLocator());
+ Assert.assertEquals(true, repository.isUseSSLManager());
+ Assert.assertEquals(true, repository.isUseSSLLocator());
+ Assert.assertEquals("9999", repository.getPort());
+ Assert.assertEquals("nonDefaultBindAddress", repository.getHost());
+ }
+
+ @After
+ public void tearDown() {
+ if (repository != null) {
+ repository.setPort(null);
+ repository.setHost(null);
+ repository.setJmxUseLocator(false);
+ repository.setUseSSLManager(false);
+ repository.removeAllClusters();
+ }
+ }
+}