This is an automated email from the ASF dual-hosted git repository.
khowe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new e4ede16 GEODE-5455: add new tests to verify MemberMXBean method
return types (#2169)
e4ede16 is described below
commit e4ede167e489f521f906239c90a8714e080125f1
Author: Kenneth Howe <[email protected]>
AuthorDate: Tue Jul 24 09:31:59 2018 -0700
GEODE-5455: add new tests to verify MemberMXBean method return types (#2169)
Verify that JMX MXBean proxy reconstructs correct return type from
CompositeDataSupport. Correct type recontruction of types such as OSMetrics
requires that the mxbean proxy is intantiated from JMX.newMXBeanProxy() not
javax.management.MBeanServerInvocationHandler.newProxyInstance(), which
returns an mbean proxy
---
.../LauncherMemberMXBeanIntegrationTest.java | 78 +++++++++++++++++++++-
1 file changed, 75 insertions(+), 3 deletions(-)
diff --git
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LauncherMemberMXBeanIntegrationTest.java
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LauncherMemberMXBeanIntegrationTest.java
index 2b06c46..36574ce 100755
---
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LauncherMemberMXBeanIntegrationTest.java
+++
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LauncherMemberMXBeanIntegrationTest.java
@@ -24,10 +24,15 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.util.Properties;
import java.util.Set;
+import javax.management.InstanceNotFoundException;
+import javax.management.JMX;
+import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.Query;
import javax.management.QueryExp;
+import javax.management.ReflectionException;
+import javax.management.openmbean.CompositeDataSupport;
import org.junit.After;
import org.junit.Before;
@@ -36,7 +41,9 @@ import org.junit.Test;
import org.apache.geode.cache.CacheFactory;
import org.apache.geode.internal.process.ControllableProcess;
import org.apache.geode.internal.process.ProcessType;
+import org.apache.geode.management.JVMMetrics;
import org.apache.geode.management.MemberMXBean;
+import org.apache.geode.management.OSMetrics;
/**
* Integration tests for querying of {@link MemberMXBean} as used in
MBeanProcessController to
@@ -52,6 +59,7 @@ public class LauncherMemberMXBeanIntegrationTest extends
LauncherIntegrationTest
private ObjectName pattern;
private QueryExp constraint;
private Set<ObjectName> mbeanNames;
+ private ObjectName mbeanObjectName;
@Before
public void setUp() throws Exception {
@@ -71,7 +79,7 @@ public class LauncherMemberMXBeanIntegrationTest extends
LauncherIntegrationTest
}
@Test
- public void queryWithNullFindsMemberMXBean() throws Exception {
+ public void queryWithNullFindsMemberMXBean() {
givenConstraint(null);
whenQuerying(getPlatformMBeanServer());
@@ -80,7 +88,7 @@ public class LauncherMemberMXBeanIntegrationTest extends
LauncherIntegrationTest
}
@Test
- public void queryWithProcessIdFindsMemberMXBean() throws Exception {
+ public void queryWithProcessIdFindsMemberMXBean() {
givenConstraint(Query.eq(Query.attr("ProcessId"), Query.value(localPid)));
whenQuerying(getPlatformMBeanServer());
@@ -89,7 +97,7 @@ public class LauncherMemberMXBeanIntegrationTest extends
LauncherIntegrationTest
}
@Test
- public void queryWithMemberNameFindsMemberMXBean() throws Exception {
+ public void queryWithMemberNameFindsMemberMXBean() {
givenConstraint(Query.eq(Query.attr("Name"),
Query.value(getUniqueName())));
whenQuerying(getPlatformMBeanServer());
@@ -97,6 +105,70 @@ public class LauncherMemberMXBeanIntegrationTest extends
LauncherIntegrationTest
thenMemberMXBeanShouldBeFound().andShouldMatchCurrentMember();
}
+ @Test
+ public void showOSMetrics_reconstructsOSMetricsFromCompositeDataType()
+ throws MBeanException, InstanceNotFoundException, ReflectionException {
+ givenConstraint(Query.eq(Query.attr("Name"),
Query.value(getUniqueName())));
+
+ whenQuerying(getPlatformMBeanServer());
+ assertThat(mbeanNames).hasSize(1);
+
+ MemberMXBean mbean = getMXBeanProxy();
+
+ CompositeDataSupport cds =
+ (CompositeDataSupport)
getPlatformMBeanServer().invoke(mbeanObjectName, "showOSMetrics",
+ null, null);
+ OSMetrics osMetrics = mbean.showOSMetrics();
+
+ // Verify conversion from CompositeData to OSMetrics
+ assertThat(osMetrics).isNotNull();
+ assertThat(osMetrics.getArch()).isEqualTo(cds.get("arch"));
+
assertThat(osMetrics.getAvailableProcessors()).isEqualTo(cds.get("availableProcessors"));
+ assertThat(osMetrics.getCommittedVirtualMemorySize())
+ .isEqualTo(cds.get("committedVirtualMemorySize"));
+
assertThat(osMetrics.getFreePhysicalMemorySize()).isEqualTo(cds.get("freePhysicalMemorySize"));
+
assertThat(osMetrics.getFreeSwapSpaceSize()).isEqualTo(cds.get("freeSwapSpaceSize"));
+
assertThat(osMetrics.getMaxFileDescriptorCount()).isEqualTo(cds.get("maxFileDescriptorCount"));
+ assertThat(osMetrics.getName()).isEqualTo(cds.get("name"));
+ assertThat(osMetrics.getOpenFileDescriptorCount())
+ .isEqualTo(cds.get("openFileDescriptorCount"));
+
assertThat(osMetrics.getProcessCpuTime()).isEqualTo(cds.get("processCpuTime"));
+
assertThat(osMetrics.getSystemLoadAverage()).isEqualTo(cds.get("systemLoadAverage"));
+ assertThat(osMetrics.getTotalPhysicalMemorySize())
+ .isEqualTo(cds.get("totalPhysicalMemorySize"));
+
assertThat(osMetrics.getTotalSwapSpaceSize()).isEqualTo(cds.get("totalSwapSpaceSize"));
+ assertThat(osMetrics.getVersion()).isEqualTo(cds.get("version"));
+ }
+
+ @Test
+ public void showJVMMetrics_returnsOJVMMetricsType()
+ throws MBeanException, InstanceNotFoundException, ReflectionException {
+ givenConstraint(Query.eq(Query.attr("Name"),
Query.value(getUniqueName())));
+
+ whenQuerying(getPlatformMBeanServer());
+ assertThat(mbeanNames).hasSize(1);
+
+ MemberMXBean mbean = getMXBeanProxy();
+
+ CompositeDataSupport cds =
+ (CompositeDataSupport)
getPlatformMBeanServer().invoke(mbeanObjectName, "showJVMMetrics",
+ null, null);
+ JVMMetrics jvmMetrics = mbean.showJVMMetrics();
+ assertThat(jvmMetrics).isNotNull();
+
assertThat(jvmMetrics.getCommittedMemory()).isEqualTo(cds.get("committedMemory"));
+ assertThat(jvmMetrics.getGcCount()).isEqualTo(cds.get("gcCount"));
+
assertThat(jvmMetrics.getGcTimeMillis()).isEqualTo(cds.get("gcTimeMillis"));
+ assertThat(jvmMetrics.getInitMemory()).isEqualTo(cds.get("initMemory"));
+ assertThat(jvmMetrics.getMaxMemory()).isEqualTo(cds.get("maxMemory"));
+
assertThat(jvmMetrics.getTotalThreads()).isEqualTo(cds.get("totalThreads"));
+ assertThat(jvmMetrics.getUsedMemory()).isEqualTo(cds.get("usedMemory"));
+ }
+
+ private MemberMXBean getMXBeanProxy() {
+ this.mbeanObjectName = mbeanNames.iterator().next();
+ return JMX.newMXBeanProxy(getPlatformMBeanServer(), mbeanObjectName,
MemberMXBean.class, false);
+ }
+
private void givenConstraint(final QueryExp constraint) {
this.constraint = constraint;
}