Most ManagementTestCase classes are now using ManagementTestRule
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/864c92c9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/864c92c9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/864c92c9 Branch: refs/heads/feature/GEODE-1930 Commit: 864c92c9a7fa2ea351d272684d2755c47f6675ff Parents: 1feea53 Author: Kirk Lund <kl...@apache.org> Authored: Mon Oct 10 14:19:54 2016 -0700 Committer: Kirk Lund <kl...@apache.org> Committed: Mon Oct 10 14:19:54 2016 -0700 ---------------------------------------------------------------------- .../RestAPIsAndInterOpsDUnitTest.java | 43 +- geode-core/build.gradle | 1 + .../org/apache/geode/management/JVMMetrics.java | 3 +- .../org/apache/geode/management/OSMetrics.java | 3 +- .../DistributedLockServiceDUnitTest.java | 2 +- .../cache/ConnectDisconnectDUnitTest.java | 2 +- ...gionBucketCreationDistributionDUnitTest.java | 2 +- .../cache/locks/TXLockServiceDUnitTest.java | 4 +- .../internal/logging/log4j/Configuration.java | 16 + .../management/CacheManagementDUnitTest.java | 931 +++++----- .../management/ClientHealthStatsDUnitTest.java | 597 +++---- .../management/CompositeTypeTestDUnitTest.java | 202 +-- .../management/DLockManagementDUnitTest.java | 549 ++---- .../management/DiskManagementDUnitTest.java | 821 +++------ .../management/DistributedSystemDUnitTest.java | 1040 ++++-------- .../geode/management/JMXMBeanDUnitTest.java | 2 +- .../management/LocatorManagementDUnitTest.java | 429 +++-- .../geode/management/ManagementTestBase.java | 577 ++----- .../geode/management/ManagementTestRule.java | 430 +++++ .../org/apache/geode/management/Manager.java | 31 + .../org/apache/geode/management/Member.java | 31 + .../management/OffHeapManagementDUnitTest.java | 723 ++++---- .../geode/management/QueryDataDUnitTest.java | 1191 ++++++------- .../management/RegionManagementDUnitTest.java | 1588 ++++++------------ .../stats/DistributedSystemStatsDUnitTest.java | 110 +- .../QueryDataFunctionApplyLimitClauseTest.java | 10 +- .../internal/pulse/TestClientIdsDUnitTest.java | 52 +- .../pulse/TestSubscriptionsDUnitTest.java | 291 ++-- .../geode/test/dunit/AsyncInvocation.java | 59 +- .../org/apache/geode/test/dunit/Invoke.java | 4 +- .../java/org/apache/geode/test/dunit/VM.java | 7 +- .../java/org/apache/geode/test/dunit/Wait.java | 2 + .../cache/internal/JUnit4CacheTestCase.java | 5 + .../internal/JUnit4DistributedTestCase.java | 4 +- .../dunit/rules/DistributedDisconnectRule.java | 4 +- .../DistributedRestoreSystemProperties.java | 4 +- .../geode/test/dunit/rules/DistributedRule.java | 68 + .../test/dunit/rules/DistributedRunRules.java | 76 + .../test/dunit/rules/DistributedStatement.java | 76 + .../test/dunit/rules/DistributedTestRule.java | 192 +++ .../DistributedUseJacksonForJsonPathRule.java | 51 + .../dunit/rules/DistributedWrapperRule.java | 52 + .../geode/test/dunit/rules/RemoteInvoker.java | 16 +- .../apache/geode/test/dunit/rules/WhichVMs.java | 58 + .../rules/tests/DistributedTestRuleTest.java | 54 + .../test/dunit/standalone/DUnitLauncher.java | 9 +- geode-junit/build.gradle | 1 + .../junit/rules/UseJacksonForJsonPathRule.java | 128 ++ .../SerializableExternalResource.java | 22 + .../serializable/SerializableStatement.java | 27 + .../management/LuceneManagementDUnitTest.java | 20 +- gradle/dependency-versions.properties | 3 +- 52 files changed, 4759 insertions(+), 5864 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/RestAPIsAndInterOpsDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/RestAPIsAndInterOpsDUnitTest.java b/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/RestAPIsAndInterOpsDUnitTest.java index 0299615..baefcba 100644 --- a/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/RestAPIsAndInterOpsDUnitTest.java +++ b/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/RestAPIsAndInterOpsDUnitTest.java @@ -67,7 +67,6 @@ import org.apache.geode.distributed.DistributedSystem; import org.apache.geode.internal.AvailablePort; import org.apache.geode.internal.AvailablePortHelper; import org.apache.geode.internal.cache.GemFireCacheImpl; -import org.apache.geode.management.ManagementTestBase; import org.apache.geode.pdx.PdxInstance; import org.apache.geode.test.dunit.Host; import org.apache.geode.test.dunit.NetworkUtils; @@ -80,28 +79,14 @@ import org.apache.geode.test.junit.runners.CategoryWithParameterizedRunnerFactor * * @since GemFire 8.0 */ - @Category(DistributedTest.class) @RunWith(Parameterized.class) @Parameterized.UseParametersRunnerFactory(CategoryWithParameterizedRunnerFactory.class) +@SuppressWarnings("serial") public class RestAPIsAndInterOpsDUnitTest extends LocatorTestBase { - private static final long serialVersionUID = -254776154266339226L; - - @Parameterized.Parameter - public String urlContext; - - @Parameterized.Parameters - public static Collection<String> data() { - return Arrays.asList("/geode", "/gemfire-api"); - } - - private ManagementTestBase helper; - public static final String PEOPLE_REGION_NAME = "People"; - //private static RestTemplate restTemplate; - private static final String findAllPeopleQuery = "/queries?id=findAllPeople&q=SELECT%20*%20FROM%20/People"; private static final String findPeopleByGenderQuery = "/queries?id=filterByGender&q=SELECT%20*%20from%20/People%20where%20gender=$1"; private static final String findPeopleByLastNameQuery = "/queries?id=filterByLastName&q=SELECT%20*%20from%20/People%20where%20lastName=$1"; @@ -182,20 +167,12 @@ public class RestAPIsAndInterOpsDUnitTest extends LocatorTestBase { + " \"middleName\": \"kiran12\"," + " \"lastName\": \"Patel\"," + " \"birthDate\": \"23/08/2012\"," + "\"gender\": \"MALE\"" + "}" + "]"; - public RestAPIsAndInterOpsDUnitTest() { - super(); - this.helper = new ManagementTestBase() {{}}; - - } - - @Override - public final void preSetUp() throws Exception { - disconnectAllFromDS(); - } + @Parameterized.Parameter + public String urlContext; - @Override - protected final void postTearDownLocatorTestBase() throws Exception { - disconnectAllFromDS(); + @Parameterized.Parameters + public static Collection<String> data() { + return Arrays.asList("/geode", "/gemfire-api"); } public String startBridgeServerWithRestService(final String hostName, final String[] groups, final String locators, final String[] regions, @@ -842,14 +819,6 @@ public class RestAPIsAndInterOpsDUnitTest extends LocatorTestBase { //Querying doQueryOpsUsingRestApis(restEndpoint); - - // stop the client and make sure the bridge server notifies - // stopBridgeMemberVM(client); - helper.closeCache(locator); - helper.closeCache(manager); - helper.closeCache(server); - helper.closeCache(client); - } private void createClientCache(final String host, final int port) throws Exception { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/build.gradle ---------------------------------------------------------------------- diff --git a/geode-core/build.gradle b/geode-core/build.gradle index b2e5a4e..dae24bc 100755 --- a/geode-core/build.gradle +++ b/geode-core/build.gradle @@ -111,6 +111,7 @@ dependencies { // Test Dependencies // External + testCompile 'com.jayway.jsonpath:json-path-assert:' + project.'json-path-assert.version' testCompile 'org.apache.bcel:bcel:' + project.'bcel.version' testRuntime 'org.apache.derby:derby:' + project.'derby.version' testCompile 'org.mockito:mockito-core:' + project.'mockito-core.version' http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/main/java/org/apache/geode/management/JVMMetrics.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/JVMMetrics.java b/geode-core/src/main/java/org/apache/geode/management/JVMMetrics.java index b11cfef..992ef99 100644 --- a/geode-core/src/main/java/org/apache/geode/management/JVMMetrics.java +++ b/geode-core/src/main/java/org/apache/geode/management/JVMMetrics.java @@ -17,6 +17,7 @@ package org.apache.geode.management; import java.beans.ConstructorProperties; +import java.io.Serializable; import org.apache.geode.cache.Region; @@ -28,7 +29,7 @@ import org.apache.geode.cache.Region; * @since GemFire 7.0 * */ -public class JVMMetrics { +public class JVMMetrics implements Serializable { /** * Number of GCs performed http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/main/java/org/apache/geode/management/OSMetrics.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/OSMetrics.java b/geode-core/src/main/java/org/apache/geode/management/OSMetrics.java index 07dab6c..48974ba 100644 --- a/geode-core/src/main/java/org/apache/geode/management/OSMetrics.java +++ b/geode-core/src/main/java/org/apache/geode/management/OSMetrics.java @@ -17,6 +17,7 @@ package org.apache.geode.management; import java.beans.ConstructorProperties; +import java.io.Serializable; /** * Composite data type used to distribute metrics for the operating system hosting @@ -25,7 +26,7 @@ import java.beans.ConstructorProperties; * @since GemFire 7.0 * */ -public class OSMetrics { +public class OSMetrics implements Serializable { /** * Maximum number file descriptor which can be opened http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/distributed/DistributedLockServiceDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/distributed/DistributedLockServiceDUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/DistributedLockServiceDUnitTest.java index 25d6013..e391aba 100755 --- a/geode-core/src/test/java/org/apache/geode/distributed/DistributedLockServiceDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/distributed/DistributedLockServiceDUnitTest.java @@ -100,7 +100,7 @@ public class DistributedLockServiceDUnitTest extends JUnit4DistributedTestCase { @Override public final void preTearDown() throws Exception { Invoke.invokeInEveryVM(() -> destroyAllDLockServices()); -// invokeInEveryVM(DistributedLockServiceDUnitTest.class, +// invokeInEveryVMAndController(DistributedLockServiceDUnitTest.class, // "remoteDumpAllDLockServices"); //InternalDistributedLockService.destroyAll(); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/internal/cache/ConnectDisconnectDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ConnectDisconnectDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ConnectDisconnectDUnitTest.java index 9b6030a..162c3a5 100755 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/ConnectDisconnectDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ConnectDisconnectDUnitTest.java @@ -42,7 +42,7 @@ public class ConnectDisconnectDUnitTest extends JUnit4CacheTestCase { // see bugs #50785 and #46438 @Test public void testManyConnectsAndDisconnects() throws Throwable { -// invokeInEveryVM(new SerializableRunnable() { +// invokeInEveryVMAndController(new SerializableRunnable() { // // @Override // public void run() { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java index 91bafea..07546a0 100755 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java @@ -462,7 +462,7 @@ public class PartitionedRegionBucketCreationDistributionDUnitTest extends Partit // final int bucketPerHost = (int) Math.ceil(((double) maxBuckets / Host.getHostCount())); -// invokeInEveryVM(new SerializableRunnable("") { +// invokeInEveryVMAndController(new SerializableRunnable("") { // // } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceDUnitTest.java index b835cbc..3b54cc6 100755 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceDUnitTest.java @@ -98,7 +98,7 @@ public class TXLockServiceDUnitTest extends JUnit4DistributedTestCase { @Override public final void preTearDown() throws Exception { -// invokeInEveryVM(TXLockServiceDUnitTest.class, +// invokeInEveryVMAndController(TXLockServiceDUnitTest.class, // "remoteDumpAllDLockServices"); Invoke.invokeInEveryVM(TXLockServiceDUnitTest.class, @@ -123,7 +123,7 @@ public class TXLockServiceDUnitTest extends JUnit4DistributedTestCase { @Test public void testGetAndDestroy() { forEachVMInvoke("checkGetAndDestroy", new Object[] {}); - /*invokeInEveryVM(TXLockServiceDUnitTest.class, + /*invokeInEveryVMAndController(TXLockServiceDUnitTest.class, "destroyServices"); forEachVMInvoke("checkGetAndDestroy", new Object[] {});*/ } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/internal/logging/log4j/Configuration.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/logging/log4j/Configuration.java b/geode-core/src/test/java/org/apache/geode/internal/logging/log4j/Configuration.java index 8f7ca1a..d55b768 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/logging/log4j/Configuration.java +++ b/geode-core/src/test/java/org/apache/geode/internal/logging/log4j/Configuration.java @@ -1,3 +1,19 @@ +/* + * 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.internal.logging.log4j; import static org.assertj.core.api.Assertions.assertThat; http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/864c92c9/geode-core/src/test/java/org/apache/geode/management/CacheManagementDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/CacheManagementDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/CacheManagementDUnitTest.java index 8c57aab..bd34c36 100644 --- a/geode-core/src/test/java/org/apache/geode/management/CacheManagementDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/CacheManagementDUnitTest.java @@ -16,11 +16,14 @@ */ package org.apache.geode.management; -import static org.apache.geode.distributed.ConfigurationProperties.*; import static com.jayway.awaitility.Awaitility.*; +import static java.util.concurrent.TimeUnit.*; +import static org.apache.geode.distributed.ConfigurationProperties.*; +import static org.assertj.core.api.Assertions.*; import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import java.io.Serializable; +import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -28,13 +31,15 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.concurrent.TimeUnit; -import javax.management.InstanceNotFoundException; + import javax.management.JMException; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.ObjectName; +import com.jayway.awaitility.Awaitility; +import com.jayway.awaitility.core.ConditionFactory; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -45,54 +50,61 @@ import org.apache.geode.cache.RegionShortcut; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.distributed.internal.DistributionConfig; import org.apache.geode.distributed.internal.InternalDistributedSystem; -import org.apache.geode.internal.cache.GemFireCacheImpl; +import org.apache.geode.management.internal.LocalManager; import org.apache.geode.management.internal.MBeanJMXAdapter; import org.apache.geode.management.internal.ManagementConstants; import org.apache.geode.management.internal.NotificationHub.NotificationHubListener; import org.apache.geode.management.internal.SystemManagementService; -import org.apache.geode.test.dunit.AsyncInvocation; -import org.apache.geode.test.dunit.LogWriterUtils; -import org.apache.geode.test.dunit.SerializableRunnable; import org.apache.geode.test.dunit.VM; -import org.apache.geode.test.dunit.Wait; -import org.apache.geode.test.dunit.WaitCriterion; import org.apache.geode.test.junit.categories.DistributedTest; +import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder; +import org.apache.geode.test.junit.rules.serializable.SerializableTestName; /** * This class checks and verifies various data and operations exposed through * MemberMXBean interface. * <p> - * Goal of the Test : MemberMBean gets created once cache is created. Data like + * <p>Goal of the Test : MemberMBean gets created once cache is created. Data like * config data and stats are of proper value To check proper federation of * MemberMBean including remote ops and remote data access + * <p> + * <p>This test is a mess and needs to be rewritten. */ @Category(DistributedTest.class) -public class CacheManagementDUnitTest extends ManagementTestBase { +@SuppressWarnings({ "serial", "unused" }) +public class CacheManagementDUnitTest implements Serializable { - private final String VERIFY_CONFIG_METHOD = "verifyConfigData"; + private static final String NOTIFICATION_REGION_NAME = "NotifTestRegion_"; - private final String VERIFY_REMOTE_CONFIG_METHOD = "verifyConfigDataRemote"; + private static final List<Notification> notifications = new ArrayList<>(); - static final List<Notification> notifList = new ArrayList<Notification>(); + @Manager + private VM managerVM; - // This must be bigger than the dunit ack-wait-threshold for the revoke - // tests. The command line is setting the ack-wait-threshold to be - // 60 seconds. - private static final int MAX_WAIT = 70 * 1000; + @Member + private VM[] memberVMs; + + @Rule + public ManagementTestRule managementTestRule = ManagementTestRule.builder().build(); + + @Rule + public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder(); + + @Rule + public SerializableTestName testName = new SerializableTestName(); @Test public void testGemFireConfigData() throws Exception { - initManagement(false); + this.managementTestRule.createMembers(); + this.managementTestRule.createManagers(); - Map<DistributedMember, DistributionConfig> configMap = new HashMap<DistributedMember, DistributionConfig>(); - for (VM vm : getManagedNodeList()) { - Map<DistributedMember, DistributionConfig> configMapMember = (Map<DistributedMember, DistributionConfig>) vm.invoke(CacheManagementDUnitTest.class, VERIFY_CONFIG_METHOD); + Map<DistributedMember, DistributionConfig> configMap = new HashMap<>(); + for (VM memberVM : this.memberVMs) { + Map<DistributedMember, DistributionConfig> configMapMember = memberVM.invoke(() -> verifyConfigData()); configMap.putAll(configMapMember); } - Object[] args = new Object[1]; - args[0] = configMap; - getManagingNode().invoke(CacheManagementDUnitTest.class, VERIFY_REMOTE_CONFIG_METHOD, args); + this.managerVM.invoke(() -> verifyConfigDataRemote(configMap)); } /** @@ -100,29 +112,34 @@ public class CacheManagementDUnitTest extends ManagementTestBase { */ @Test public void testMemberMBeanOperations() throws Exception { - initManagement(false); + int i = 1; + for (VM memberVM : this.memberVMs) { + Properties props = new Properties(); + props.setProperty(LOG_FILE, this.temporaryFolder.newFile(this.testName.getMethodName() + "-VM" + i + ".log").getAbsolutePath()); + this.managementTestRule.createMember(memberVM, props); + i++; + } - for (VM vm : managedNodeList) { + this.managementTestRule.createManagers(); - //Do some operations to fill the logs + for (VM memberVM : this.memberVMs) { + String logMessage = "This line should be in the log"; + memberVM.invoke(() -> this.managementTestRule.getCache().getLogger().info(logMessage)); - createLocalRegion(vm, "testRegion"); + String log = memberVM.invoke(() -> fetchLog(30)); + assertThat(log).isNotNull(); + assertThat(log).contains(logMessage); - String log = (String) vm.invoke(() -> CacheManagementDUnitTest.fetchLog()); - assertNotNull(log); - LogWriterUtils.getLogWriter().info("<ExpectedString> Log Of Member is " + log.toString() + "</ExpectedString> "); + JVMMetrics jvmMetrics = memberVM.invoke(() -> fetchJVMMetrics()); - vm.invoke(() -> CacheManagementDUnitTest.fetchJVMMetrics()); + OSMetrics osMetrics = memberVM.invoke(() -> fetchOSMetrics()); - vm.invoke(() -> CacheManagementDUnitTest.fetchOSMetrics()); + // TODO: need assertions - vm.invoke(() -> CacheManagementDUnitTest.shutDownMember()); + memberVM.invoke(() -> shutDownMember()); } - VM managingNode = getManagingNode(); - Object[] args = new Object[1]; - args[0] = 1;// Only locator member wont be shutdown - managingNode.invoke(CacheManagementDUnitTest.class, "assertExpectedMembers", args); + this.managerVM.invoke(() -> verifyExpectedMembers(0)); } /** @@ -130,263 +147,256 @@ public class CacheManagementDUnitTest extends ManagementTestBase { */ @Test public void testMemberMBeanOpsRemote() throws Exception { - initManagement(false); - getManagingNode().invoke(() -> CacheManagementDUnitTest.invokeRemoteOps()); + this.managementTestRule.createMembers(); + this.managementTestRule.createManagers(); + this.managerVM.invoke(() -> invokeRemoteMemberMXBeanOps()); } /** - * Creates and starts a manager. + * Creates and starts a managerVM. * Multiple Managers */ @Test public void testManager() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); - createCache(node1); - createCache(node2); - createManagementCache(node3); + this.managementTestRule.createManager(this.memberVMs[2], false); - // Only creates a cache in Managing Node - // Does not start the manager - createManagementCache(managingNode); + this.managementTestRule.createManager(this.managerVM, false); - node3.invoke(() -> CacheManagementDUnitTest.startManager()); + this.memberVMs[2].invoke(() -> startManager()); - // Now start Managing node manager. System will have two Managers now which + // Now start Managing node managerVM. System will have two Managers now which // should be OK - DistributedMember member = getMember(node3); - startManagingNode(managingNode); - checkManagerView(managingNode, member); - stopManagingNode(managingNode); + DistributedMember member = this.managementTestRule.getDistributedMember(this.memberVMs[2]); + this.managementTestRule.startManager(this.managerVM); + + verifyManagerStarted(this.managerVM, member); + this.managementTestRule.stopManager(this.managerVM); } /** - * Creates and starts a manager. + * Creates and starts a managerVM. * Multiple Managers */ @Test public void testManagerShutdown() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); + this.managementTestRule.createMember(this.memberVMs[2]); - createCache(node1); - createCache(node2); - createCache(node3); + this.managementTestRule.createManager(this.managerVM, false); + this.managementTestRule.startManager(this.managerVM); - // Only creates a cache in Managing Node - // Does not start the manager - createManagementCache(managingNode); + verifyManagerStarted(this.managerVM, this.managementTestRule.getDistributedMember(this.memberVMs[0])); - startManagingNode(managingNode); - DistributedMember member = getMember(managingNode); - checkManagerView(managingNode, member); - stopManagingNode(managingNode); - checkNonManagerView(managingNode); + this.managementTestRule.stopManager(this.managerVM); + verifyManagerStopped(this.managerVM, this.memberVMs.length); } @Test - public void testServiceCloseManagedNode() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); + public void closeCacheShouldStopLocalManager() throws Exception { + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); - createCache(node1); - createCache(node2); - createManagementCache(node3); + this.managementTestRule.createManager(this.memberVMs[2], false); // Only creates a cache in Managing Node - // Does not start the manager - createManagementCache(managingNode); - - node3.invoke(() -> CacheManagementDUnitTest.startManager()); - - closeCache(node3); - validateServiceResource(node3); + // Does not start the managerVM + this.managementTestRule.createManager(this.managerVM, false); + + this.memberVMs[2].invoke(() -> startManager()); + + this.memberVMs[2].invoke(() -> { + SystemManagementService service = this.managementTestRule.getSystemManagementService(); + LocalManager localManager = service.getLocalManager(); + this.managementTestRule.getCache().close(); + assertThat(localManager.isRunning()).isFalse(); + assertThat(service.isManager()).isFalse(); + assertThat(service.getLocalManager()).isNull(); + }); } @Test public void testGetMBean() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); + this.managementTestRule.createMember(this.memberVMs[2]); - createCache(node1); - createCache(node2); - createCache(node3); + this.managementTestRule.createManager(this.managerVM, false); - createManagementCache(managingNode); + this.managementTestRule.startManager(this.managerVM); - startManagingNode(managingNode); - - checkGetMBean(managingNode); + verifyGetMBeanInstance(this.managerVM); } @Test public void testQueryMBeans() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); - - createCache(node1); - createCache(node2); - createCache(node3); + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); + this.managementTestRule.createMember(this.memberVMs[2]); - createManagementCache(managingNode); + this.managementTestRule.createManager(this.managerVM, false); - startManagingNode(managingNode); + this.managementTestRule.startManager(this.managerVM); - checkQueryMBeans(managingNode); + verifyQueryMBeans(this.managerVM); } - protected void checkQueryMBeans(final VM vm) { - SerializableRunnable validateServiceResource = new SerializableRunnable("Check Query MBeans") { - public void run() { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - - Set<DistributedMember> otherMembers = cache.getDistributionManager().getOtherNormalDistributionManagerIds(); - - Set<ObjectName> superSet = new HashSet<ObjectName>(); + @Test + public void testNotification() throws Exception { + // Step : 1 : Create Managed Node Caches + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); + this.managementTestRule.createMember(this.memberVMs[2]); - for (DistributedMember member : otherMembers) { + // Step : 2 : Create Managing Node Cache, start managerVM, add a notification + // handler to DistributedSystemMXBean + this.managementTestRule.createManager(this.managerVM, false); + this.managementTestRule.startManager(this.managerVM); + attachListenerToDistributedSystemMXBean(this.managerVM); - ObjectName memberMBeanName = managementService.getMemberMBeanName(member); + // Step : 3 : Verify Notification count, notification region sizes + verifyNotificationsAndRegionSize(this.memberVMs[0], this.memberVMs[1], this.memberVMs[2], this.managerVM); + } - waitForProxy(memberMBeanName, MemberMXBean.class); - Set<ObjectName> names = managementService.queryMBeanNames(member); - superSet.addAll(names); - assertTrue(names.contains(memberMBeanName)); + @Test + public void testNotificationManagingNodeFirst() throws Exception { + // Step : 1 : Create Managing Node Cache, start managerVM, add a notification + // handler to DistributedSystemMXBean + this.managementTestRule.createManager(this.managerVM, false); + this.managementTestRule.startManager(this.managerVM); - } + attachListenerToDistributedSystemMXBean(this.managerVM); - Set<ObjectName> names = managementService.queryMBeanNames(cache.getDistributedSystem().getDistributedMember()); - assertTrue(!superSet.contains(names)); - } - }; - vm.invoke(validateServiceResource); + // Step : 2 : Create Managed Node Caches + this.managementTestRule.createMember(this.memberVMs[0]); + this.managementTestRule.createMember(this.memberVMs[1]); + this.managementTestRule.createMember(this.memberVMs[2]); + // Step : 3 : Verify Notification count, notification region sizes + verifyNotificationsAndRegionSize(this.memberVMs[0], this.memberVMs[1], this.memberVMs[2], this.managerVM); } - protected void checkGetMBean(final VM vm) { - SerializableRunnable validateServiceResource = new SerializableRunnable("Check Get MBean") { - public void run() { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - Set<DistributedMember> otherMembers = cache.getDistributionManager().getOtherNormalDistributionManagerIds(); + @Test + public void testRedundancyZone() throws Exception { + String redundancyZone = "ARMY_ZONE"; + + Properties props = new Properties(); + props.setProperty(REDUNDANCY_ZONE, redundancyZone); - for (DistributedMember member : otherMembers) { + this.managementTestRule.createMember(this.memberVMs[0], props); - ObjectName memberMBeanName = managementService.getMemberMBeanName(member); + this.memberVMs[0].invoke("verifyRedundancyZone", () -> { + ManagementService service = this.managementTestRule.getExistingManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + assertThat(memberMXBean.getRedundancyZone()).isEqualTo(redundancyZone); + }); + } - waitForProxy(memberMBeanName, MemberMXBean.class); + private void verifyQueryMBeans(final VM vm) { + vm.invoke("validateQueryMBeans", () -> { + ManagementService service = this.managementTestRule.getManagementService(); + Set<DistributedMember> otherMembers = this.managementTestRule.getOtherNormalMembers(); + Set<ObjectName> superSet = new HashSet<>(); - MemberMXBean bean = managementService.getMBeanInstance(memberMBeanName, MemberMXBean.class); - assertNotNull(bean); - } + for (DistributedMember member : otherMembers) { + ObjectName memberMBeanName = service.getMemberMBeanName(member); - DistributedMember thisMember = cache.getDistributedSystem().getDistributedMember(); - ObjectName memberMBeanName = managementService.getMemberMBeanName(thisMember); - MemberMXBean bean = managementService.getMBeanInstance(memberMBeanName, MemberMXBean.class); - assertNotNull(bean); + awaitMemberMXBeanProxy(member); + Set<ObjectName> objectNames = service.queryMBeanNames(member); + superSet.addAll(objectNames); + assertThat(objectNames.contains(memberMBeanName)).isTrue(); } - }; - vm.invoke(validateServiceResource); + + Set<ObjectName> names = service.queryMBeanNames(this.managementTestRule.getDistributedMember()); + ObjectName[] arrayOfNames = names.toArray(new ObjectName[names.size()]); + + assertThat(superSet).doesNotContain(arrayOfNames); // TODO: what value does this method have? + }); } - protected void validateServiceResource(final VM vm) { - SerializableRunnable validateServiceResource = new SerializableRunnable("Valideate Management Service Resource") { - public void run() { + private void verifyGetMBeanInstance(final VM vm) { + vm.invoke("verifyGetMBeanInstance", () -> { + ManagementService service = this.managementTestRule.getManagementService(); + Set<DistributedMember> otherMembers = this.managementTestRule.getOtherNormalMembers(); + + for (DistributedMember member : otherMembers) { + ObjectName memberMBeanName = service.getMemberMBeanName(member); - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - assertNull(cache); - assertFalse(managementService.isManager()); + awaitMemberMXBeanProxy(member); - SystemManagementService service = (SystemManagementService) managementService; - assertNull(service.getLocalManager()); + MemberMXBean memberMXBean = service.getMBeanInstance(memberMBeanName, MemberMXBean.class); + assertThat(memberMXBean).isNotNull(); } - }; - vm.invoke(validateServiceResource); + + DistributedMember distributedMember = this.managementTestRule.getDistributedMember(); + ObjectName memberMBeanName = service.getMemberMBeanName(distributedMember); + MemberMXBean memberMXBean = service.getMBeanInstance(memberMBeanName, MemberMXBean.class); + assertThat(memberMXBean).isNotNull(); + }); } - /** - * Creates a Distributed Region - */ - protected AsyncInvocation checkManagerView(final VM vm, final DistributedMember oneManager) { - SerializableRunnable createRegion = new SerializableRunnable("Check Manager View") { - public void run() { - - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - SystemManagementService service = (SystemManagementService) getManagementService(); - ObjectName memberMBeanName = service.getMemberMBeanName(oneManager); - MemberMXBean bean = service.getMBeanProxy(memberMBeanName, MemberMXBean.class); - assertNotNull(bean); - //Ensure Data getting federated from Managing node - long t1 = bean.getMemberUpTime(); - try { - this.wait(ManagementConstants.REFRESH_TIME * 3); - } catch (InterruptedException e) { - fail("interrupted"); - } - long t2 = bean.getMemberUpTime(); + private void verifyManagerStarted(final VM managerVM, final DistributedMember otherMember) { + managerVM.invoke("verifyManagerStarted", () -> { + SystemManagementService service = this.managementTestRule.getSystemManagementService(); + assertThat(service.isManager()).isTrue(); - assertTrue(t2 > t1); + assertThat(service.getLocalManager().isRunning()).isTrue(); - } - }; - return vm.invokeAsync(createRegion); + assertThat(service.getLocalManager().getFederationSheduler().isShutdown()).isFalse(); + + ObjectName memberMBeanName = service.getMemberMBeanName(otherMember); + + await().until(() -> assertThat(service.getMBeanProxy(memberMBeanName, MemberMXBean.class)).isNotNull()); + MemberMXBean memberMXBean = service.getMBeanProxy(memberMBeanName, MemberMXBean.class); + + //Ensure Data getting federated from Managing node + long start = memberMXBean.getMemberUpTime(); + await().until(() -> assertThat(memberMXBean.getMemberUpTime()).isGreaterThan(start)); + }); } /** * Add any Manager clean up asserts here */ - protected void checkNonManagerView(final VM vm) { - SerializableRunnable checkNonManagerView = new SerializableRunnable("Check Non Manager View") { - public void run() { - - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - assertNotNull(cache); - assertFalse(managementService.isManager()); - - SystemManagementService service = (SystemManagementService) managementService; - assertTrue(service.getLocalManager().isRunning()); - assertFalse(service.getLocalManager().getFederationSheduler().isShutdown()); - - // Check for Proxies - Set<DistributedMember> otherMembers = cache.getDistributionManager().getOtherNormalDistributionManagerIds(); - assertTrue(otherMembers.size() > 0); - for (DistributedMember member : otherMembers) { - Set<ObjectName> proxyNames = service.getFederatingManager().getProxyFactory().findAllProxies(member); - assertTrue(proxyNames.isEmpty()); - ObjectName proxyMBeanName = service.getMemberMBeanName(member); - assertFalse(MBeanJMXAdapter.mbeanServer.isRegistered(proxyMBeanName)); - } + private void verifyManagerStopped(final VM managerVM, final int otherMembersCount) { + managerVM.invoke("verifyManagerStopped", () -> { + SystemManagementService service = this.managementTestRule.getSystemManagementService(); + + assertThat(service.isManager()).isFalse(); + + assertThat(service.getLocalManager().isRunning()).isTrue(); + + assertThat(service.getLocalManager().getFederationSheduler().isShutdown()).isFalse(); + // Check for Proxies + Set<DistributedMember> otherMembers = this.managementTestRule.getOtherNormalMembers(); + assertThat(otherMembers).hasSize(otherMembersCount); + + for (DistributedMember member : otherMembers) { + Set<ObjectName> proxyNames = service.getFederatingManager().getProxyFactory().findAllProxies(member); + assertThat(proxyNames).isEmpty(); + + ObjectName proxyMBeanName = service.getMemberMBeanName(member); + assertThat(MBeanJMXAdapter.mbeanServer.isRegistered(proxyMBeanName)).isFalse(); } - }; - vm.invoke(checkNonManagerView); + }); } - public static Map<DistributedMember, DistributionConfig> verifyConfigData() { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - ManagementService service = getManagementService(); - DistributionConfig config = ((InternalDistributedSystem) cache.getDistributedSystem()).getConfig(); + private Map<DistributedMember, DistributionConfig> verifyConfigData() { + ManagementService service = this.managementTestRule.getManagementService(); + InternalDistributedSystem ids = (InternalDistributedSystem) this.managementTestRule.getCache().getDistributedSystem(); + DistributionConfig config = ids.getConfig(); + MemberMXBean bean = service.getMemberMXBean(); GemFireProperties data = bean.listGemFireProperties(); - assertConfigEquals(config, data); - Map<DistributedMember, DistributionConfig> configMap = new HashMap<DistributedMember, DistributionConfig>(); - configMap.put(cache.getMyId(), config); + verifyGemFirePropertiesData(config, data); + + Map<DistributedMember, DistributionConfig> configMap = new HashMap<>(); + configMap.put(ids.getDistributedMember(), config); return configMap; } @@ -394,15 +404,15 @@ public class CacheManagementDUnitTest extends ManagementTestBase { * This is to check whether the config data has been propagated to the * Managing node properly or not. */ - public static void verifyConfigDataRemote(Map<DistributedMember, DistributionConfig> configMap) throws Exception { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds(); + private void verifyConfigDataRemote(final Map<DistributedMember, DistributionConfig> configMap) throws Exception { + Set<DistributedMember> otherMembers = this.managementTestRule.getOtherNormalMembers(); + + for (DistributedMember member : otherMembers) { + MemberMXBean memberMXBean = awaitMemberMXBeanProxy(member); - for (DistributedMember member : otherMemberSet) { - MemberMXBean bean = MBeanUtil.getMemberMbeanProxy(member); - GemFireProperties data = bean.listGemFireProperties(); + GemFireProperties data = memberMXBean.listGemFireProperties(); DistributionConfig config = configMap.get(member); - assertConfigEquals(config, data); + verifyGemFirePropertiesData(config, data); } } @@ -410,358 +420,241 @@ public class CacheManagementDUnitTest extends ManagementTestBase { * Asserts that distribution config and gemfireProperty composite types hold * the same values */ - public static void assertConfigEquals(DistributionConfig config, GemFireProperties data) { + private void verifyGemFirePropertiesData(final DistributionConfig config, final GemFireProperties data) { + assertThat(data.getMemberName()).isEqualTo(config.getName()); - assertEquals(data.getMemberName(), config.getName()); // **TODO ** String memberGroups = null; - assertEquals(data.getMcastPort(), config.getMcastPort()); - assertEquals(data.getMcastAddress(), config.getMcastAddress().getHostAddress()); - assertEquals(data.getBindAddress(), config.getBindAddress()); - assertEquals(data.getTcpPort(), config.getTcpPort()); - assertEquals(removeVMDir(data.getCacheXMLFile()), removeVMDir(config.getCacheXmlFile().getAbsolutePath())); + assertThat(data.getMcastPort()).isEqualTo(config.getMcastPort()); + assertThat(data.getMcastAddress()).isEqualTo(config.getMcastAddress().getHostAddress()); + assertThat(data.getBindAddress()).isEqualTo(config.getBindAddress()); + assertThat(data.getTcpPort()).isEqualTo(config.getTcpPort()); + assertThat(removeVMDir(data.getCacheXMLFile())).isEqualTo(removeVMDir(config.getCacheXmlFile().getAbsolutePath())); + // **TODO ** - assertEquals(data.getMcastTTL(), config.getMcastTtl()); - assertEquals(data.getServerBindAddress(), config.getServerBindAddress()); - assertEquals(data.getLocators(), config.getLocators()); + assertThat(data.getMcastTTL()).isEqualTo(config.getMcastTtl()); + assertThat(data.getServerBindAddress()).isEqualTo(config.getServerBindAddress()); + assertThat(data.getLocators()).isEqualTo(config.getLocators()); + //The start locator may contain a directory - assertEquals(removeVMDir(data.getStartLocator()), removeVMDir(config.getStartLocator())); - assertEquals(removeVMDir(data.getLogFile()), removeVMDir(config.getLogFile().getAbsolutePath())); - assertEquals(data.getLogLevel(), config.getLogLevel()); - assertEquals(data.isStatisticSamplingEnabled(), config.getStatisticSamplingEnabled()); - assertEquals(removeVMDir(data.getStatisticArchiveFile()), removeVMDir(config.getStatisticArchiveFile().getAbsolutePath())); + assertThat(removeVMDir(data.getStartLocator())).isEqualTo(removeVMDir(config.getStartLocator())); + assertThat(removeVMDir(data.getLogFile())).isEqualTo(removeVMDir(config.getLogFile().getAbsolutePath())); + assertThat(data.getLogLevel()).isEqualTo(config.getLogLevel()); + assertThat(data.isStatisticSamplingEnabled()).isEqualTo(config.getStatisticSamplingEnabled()); + assertThat(removeVMDir(data.getStatisticArchiveFile())).isEqualTo(removeVMDir(config.getStatisticArchiveFile().getAbsolutePath())); + // ** TODO ** String includeFile = null; - assertEquals(data.getAckWaitThreshold(), config.getAckWaitThreshold()); - assertEquals(data.getAckSevereAlertThreshold(), config.getAckSevereAlertThreshold()); - assertEquals(data.getArchiveFileSizeLimit(), config.getArchiveFileSizeLimit()); - assertEquals(data.getArchiveDiskSpaceLimit(), config.getArchiveDiskSpaceLimit()); - assertEquals(data.getLogFileSizeLimit(), config.getLogFileSizeLimit()); - assertEquals(data.getLogDiskSpaceLimit(), config.getLogDiskSpaceLimit()); - assertEquals(data.isClusterSSLEnabled(), config.getClusterSSLEnabled()); - - assertEquals(data.getClusterSSLCiphers(), config.getClusterSSLCiphers()); - assertEquals(data.getClusterSSLProtocols(), config.getClusterSSLProtocols()); - assertEquals(data.isClusterSSLRequireAuthentication(), config.getClusterSSLRequireAuthentication()); - assertEquals(data.getSocketLeaseTime(), config.getSocketLeaseTime()); - assertEquals(data.getSocketBufferSize(), config.getSocketBufferSize()); - assertEquals(data.getMcastSendBufferSize(), config.getMcastSendBufferSize()); - assertEquals(data.getMcastRecvBufferSize(), config.getMcastRecvBufferSize()); - assertEquals(data.getMcastByteAllowance(), config.getMcastFlowControl().getByteAllowance()); - assertEquals(data.getMcastRechargeThreshold(), config.getMcastFlowControl().getRechargeThreshold(), 0); - assertEquals(data.getMcastRechargeBlockMs(), config.getMcastFlowControl().getRechargeBlockMs()); - assertEquals(data.getUdpFragmentSize(), config.getUdpFragmentSize()); - assertEquals(data.getUdpSendBufferSize(), config.getUdpSendBufferSize()); - assertEquals(data.getUdpRecvBufferSize(), config.getUdpRecvBufferSize()); - assertEquals(data.isDisableTcp(), config.getDisableTcp()); - assertEquals(data.isEnableTimeStatistics(), config.getEnableTimeStatistics()); - assertEquals(data.isEnableNetworkPartitionDetection(), config.getEnableNetworkPartitionDetection()); - assertEquals(data.getMemberTimeout(), config.getMemberTimeout()); - - int[] configPortRange = config.getMembershipPortRange(); - int[] dataPortRange = data.getMembershipPortRange(); - - assertEquals(dataPortRange.length, configPortRange.length); - for (int i = 0; i < dataPortRange.length; i++) { - assertEquals(dataPortRange[i], configPortRange[i]); - } - assertEquals(data.isConserveSockets(), config.getConserveSockets()); - assertEquals(data.getRoles(), config.getRoles()); - assertEquals(data.getMaxWaitTimeForReconnect(), config.getMaxWaitTimeForReconnect()); - assertEquals(data.getMaxNumReconnectTries(), config.getMaxNumReconnectTries()); - assertEquals(data.getAsyncDistributionTimeout(), config.getAsyncDistributionTimeout()); - assertEquals(data.getAsyncQueueTimeout(), config.getAsyncQueueTimeout()); - assertEquals(data.getAsyncMaxQueueSize(), config.getAsyncMaxQueueSize()); - assertEquals(data.getClientConflation(), config.getClientConflation()); - assertEquals(data.getDurableClientId(), config.getDurableClientId()); - assertEquals(data.getDurableClientTimeout(), config.getDurableClientTimeout()); - assertEquals(data.getSecurityClientAuthInit(), config.getSecurityClientAuthInit()); - assertEquals(data.getSecurityClientAuthenticator(), config.getSecurityClientAuthenticator()); - assertEquals(data.getSecurityClientDHAlgo(), config.getSecurityClientDHAlgo()); - assertEquals(data.getSecurityPeerAuthInit(), config.getSecurityPeerAuthInit()); - assertEquals(data.getSecurityClientAuthenticator(), config.getSecurityPeerAuthenticator()); - assertEquals(data.getSecurityClientAccessor(), config.getSecurityClientAccessor()); - assertEquals(data.getSecurityClientAccessorPP(), config.getSecurityClientAccessorPP()); - assertEquals(data.getSecurityLogLevel(), config.getSecurityLogLevel()); - assertEquals(removeVMDir(data.getSecurityLogFile()), removeVMDir(config.getSecurityLogFile().getAbsolutePath())); - assertEquals(data.getSecurityPeerMembershipTimeout(), config.getSecurityPeerMembershipTimeout()); - assertEquals(data.isRemoveUnresponsiveClient(), config.getRemoveUnresponsiveClient()); - assertEquals(data.isDeltaPropagation(), config.getDeltaPropagation()); - assertEquals(data.getRedundancyZone(), config.getRedundancyZone()); - assertEquals(data.isEnforceUniqueHost(), config.getEnforceUniqueHost()); - assertEquals(data.getStatisticSampleRate(), config.getStatisticSampleRate()); + assertThat(data.getAckWaitThreshold()).isEqualTo(config.getAckWaitThreshold()); + assertThat(data.getAckSevereAlertThreshold()).isEqualTo(config.getAckSevereAlertThreshold()); + assertThat(data.getArchiveFileSizeLimit()).isEqualTo(config.getArchiveFileSizeLimit()); + assertThat(data.getArchiveDiskSpaceLimit()).isEqualTo(config.getArchiveDiskSpaceLimit()); + assertThat(data.getLogFileSizeLimit()).isEqualTo(config.getLogFileSizeLimit()); + assertThat(data.getLogDiskSpaceLimit()).isEqualTo(config.getLogDiskSpaceLimit()); + assertThat(data.isClusterSSLEnabled()).isEqualTo(config.getClusterSSLEnabled()); + + assertThat(data.getClusterSSLCiphers()).isEqualTo(config.getClusterSSLCiphers()); + assertThat(data.getClusterSSLProtocols()).isEqualTo(config.getClusterSSLProtocols()); + assertThat(data.isClusterSSLRequireAuthentication()).isEqualTo(config.getClusterSSLRequireAuthentication()); + assertThat(data.getSocketLeaseTime()).isEqualTo(config.getSocketLeaseTime()); + assertThat(data.getSocketBufferSize()).isEqualTo(config.getSocketBufferSize()); + assertThat(data.getMcastSendBufferSize()).isEqualTo(config.getMcastSendBufferSize()); + assertThat(data.getMcastRecvBufferSize()).isEqualTo(config.getMcastRecvBufferSize()); + assertThat(data.getMcastByteAllowance()).isEqualTo(config.getMcastFlowControl().getByteAllowance()); + assertThat(data.getMcastRechargeThreshold()).isEqualTo(config.getMcastFlowControl().getRechargeThreshold()); + assertThat(data.getMcastRechargeBlockMs()).isEqualTo(config.getMcastFlowControl().getRechargeBlockMs()); + assertThat(data.getUdpFragmentSize()).isEqualTo(config.getUdpFragmentSize()); + assertThat(data.getUdpSendBufferSize()).isEqualTo(config.getUdpSendBufferSize()); + assertThat(data.getUdpRecvBufferSize()).isEqualTo(config.getUdpRecvBufferSize()); + assertThat(data.isDisableTcp()).isEqualTo(config.getDisableTcp()); + assertThat(data.isEnableTimeStatistics()).isEqualTo(config.getEnableTimeStatistics()); + assertThat(data.isEnableNetworkPartitionDetection()).isEqualTo(config.getEnableNetworkPartitionDetection()); + assertThat(data.getMemberTimeout()).isEqualTo(config.getMemberTimeout()); + + assertThat(data.getMembershipPortRange()).containsExactly(config.getMembershipPortRange()); + + assertThat(data.isConserveSockets()).isEqualTo(config.getConserveSockets()); + assertThat(data.getRoles()).isEqualTo(config.getRoles()); + assertThat(data.getMaxWaitTimeForReconnect()).isEqualTo(config.getMaxWaitTimeForReconnect()); + assertThat(data.getMaxNumReconnectTries()).isEqualTo(config.getMaxNumReconnectTries()); + assertThat(data.getAsyncDistributionTimeout()).isEqualTo(config.getAsyncDistributionTimeout()); + assertThat(data.getAsyncMaxQueueSize()).isEqualTo(config.getAsyncMaxQueueSize()); + assertThat(data.getClientConflation()).isEqualTo(config.getClientConflation()); + assertThat(data.getDurableClientId()).isEqualTo(config.getDurableClientId()); + assertThat(data.getDurableClientTimeout()).isEqualTo(config.getDurableClientTimeout()); + assertThat(data.getSecurityClientAuthInit()).isEqualTo(config.getSecurityClientAuthInit()); + assertThat(data.getSecurityClientAuthenticator()).isEqualTo(config.getSecurityClientAuthenticator()); + assertThat(data.getSecurityClientDHAlgo()).isEqualTo(config.getSecurityClientDHAlgo()); + assertThat(data.getSecurityPeerAuthInit()).isEqualTo(config.getSecurityPeerAuthInit()); + assertThat(data.getSecurityClientAuthenticator()).isEqualTo(config.getSecurityPeerAuthenticator()); + assertThat(data.getSecurityClientAccessor()).isEqualTo(config.getSecurityClientAccessor()); + assertThat(data.getSecurityClientAccessorPP()).isEqualTo(config.getSecurityClientAccessorPP()); + assertThat(data.getSecurityLogLevel()).isEqualTo(config.getSecurityLogLevel()); + assertThat(removeVMDir(data.getSecurityLogFile())).isEqualTo(removeVMDir(config.getSecurityLogFile().getAbsolutePath())); + assertThat(data.getSecurityPeerMembershipTimeout()).isEqualTo(config.getSecurityPeerMembershipTimeout()); + assertThat(data.isRemoveUnresponsiveClient()).isEqualTo(config.getRemoveUnresponsiveClient()); + assertThat(data.isDeltaPropagation()).isEqualTo(config.getDeltaPropagation()); + assertThat(data.getRedundancyZone()).isEqualTo(config.getRedundancyZone()); + assertThat(data.isEnforceUniqueHost()).isEqualTo(config.getEnforceUniqueHost()); + assertThat(data.getStatisticSampleRate()).isEqualTo(config.getStatisticSampleRate()); } private static String removeVMDir(String string) { return string.replaceAll("vm.", ""); } - public static void startManager() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - // When the cache is created if jmx-manager is true then we create the manager. - // So it may already exist when we get here. - if (!bean.isManagerCreated()) { - if (!bean.createManager()) { - fail("Could not create Manager"); - } else if (!bean.isManagerCreated()) { - fail("Should have been a manager after createManager returned true."); - } - } - ManagerMXBean mngrBean = getManagementService().getManagerMXBean(); - try { - mngrBean.start(); - } catch (JMException e) { - fail("Could not start Manager " + e); - } - assertTrue(mngrBean.isRunning()); - assertTrue(getManagementService().isManager()); - assertTrue(bean.isManager()); - } - - public static void isManager() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - if (bean.createManager()) { - ManagerMXBean mngrBean = getManagementService().getManagerMXBean(); - try { - mngrBean.start(); - } catch (JMException e) { - fail("Could not start Manager " + e); - } - } else { - fail(" Could not create Manager"); + private void startManager() throws JMException { + ManagementService service = this.managementTestRule.getManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + if (memberMXBean.isManagerCreated()) { + return; } - } - - public static String fetchLog() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - String log = bean.showLog(30); - return log; - } - public static void fetchJVMMetrics() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - JVMMetrics metrics = bean.showJVMMetrics(); + // TODO: cleanup this mess + // When the cache is created if jmx-managerVM is true then we create the managerVM. + // So it may already exist when we get here. - LogWriterUtils.getLogWriter().info("<ExpectedString> JVMMetrics is " + metrics.toString() + "</ExpectedString> "); - } + assertThat(memberMXBean.createManager()).isTrue(); + assertThat(memberMXBean.isManagerCreated()).isTrue(); - public static void fetchOSMetrics() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - OSMetrics metrics = bean.showOSMetrics(); + ManagerMXBean managerMXBean = service.getManagerMXBean(); + managerMXBean.start(); - LogWriterUtils.getLogWriter().info("<ExpectedString> OSMetrics is " + metrics.toString() + "</ExpectedString> "); + assertThat(managerMXBean.isRunning()).isTrue(); + assertThat(memberMXBean.isManager()).isTrue(); + assertThat(service.isManager()).isTrue(); } - public static void shutDownMember() { - MemberMXBean bean = getManagementService().getMemberMXBean(); - bean.shutDownMember(); + private String fetchLog(final int numberOfLines) { + ManagementService service = this.managementTestRule.getManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + return memberMXBean.showLog(numberOfLines); } - public static void assertExpectedMembers(int expectedMemberCount) { - Wait.waitForCriterion(new WaitCriterion() { - public String description() { - return "Waiting all nodes to shutDown"; - } - - public boolean done() { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - Set<DistributedMember> setOfOtherMembers = cache.getDistributedSystem().getAllOtherMembers(); - boolean done = (setOfOtherMembers != null && setOfOtherMembers.size() == 1); - return done; - } - - }, MAX_WAIT, 500, true); + private JVMMetrics fetchJVMMetrics() { + ManagementService service = this.managementTestRule.getManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + JVMMetrics metrics = memberMXBean.showJVMMetrics(); + return metrics; } - public static void invokeRemoteOps() throws Exception { - GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds(); - - for (DistributedMember member : otherMemberSet) { - MemberMXBean bean = MBeanUtil.getMemberMbeanProxy(member); - JVMMetrics metrics = bean.showJVMMetrics(); - - LogWriterUtils.getLogWriter().info("<ExpectedString> JVMMetrics is " + metrics.toString() + "</ExpectedString> "); - LogWriterUtils.getLogWriter().info("<ExpectedString> OSMetrics is " + metrics.toString() + "</ExpectedString> "); - - LogWriterUtils.getLogWriter().info("<ExpectedString> Boolean Data Check " + bean.isManager() + "</ExpectedString> "); - } + private OSMetrics fetchOSMetrics() { + ManagementService service = this.managementTestRule.getManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + OSMetrics metrics = memberMXBean.showOSMetrics(); + return metrics; } - @Test - public void testNotification() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); - - // Step : 1 : Create Managed Node Caches - createCache(node1); - createCache(node2); - createCache(node3); - - // Step : 2 : Create Managing Node Cache, start manager, add a notification - // handler to DistributedSystemMXBean - createManagementCache(managingNode); - startManagingNode(managingNode); - attchListenerToDSMBean(managingNode); - - // Step : 3 : Verify Notification count, notification region sizes - countNotificationsAndCheckRegionSize(node1, node2, node3, managingNode); + private void shutDownMember() { + ManagementService service = this.managementTestRule.getManagementService(); + MemberMXBean memberMXBean = service.getMemberMXBean(); + memberMXBean.shutDownMember(); } - @Test - public void testNotificationManagingNodeFirst() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - VM managingNode = getManagingNode(); - - // Step : 1 : Create Managing Node Cache, start manager, add a notification - // handler to DistributedSystemMXBean - createManagementCache(managingNode); - startManagingNode(managingNode); - attchListenerToDSMBean(managingNode); - - // Step : 2 : Create Managed Node Caches - createCache(node1); - createCache(node2); - createCache(node3); - - // Step : 3 : Verify Notification count, notification region sizes - countNotificationsAndCheckRegionSize(node1, node2, node3, managingNode); + private void verifyExpectedMembers(final int otherMembersCount) { + String alias = "awaiting " + this.managementTestRule.getOtherNormalMembers() + " to have size " + otherMembersCount; + await(alias).until(() -> assertThat(this.managementTestRule.getOtherNormalMembers()).hasSize(otherMembersCount)); } - @Test - public void testRedundancyZone() throws Exception { - List<VM> managedNodeList = getManagedNodeList(); - VM node1 = managedNodeList.get(0); - VM node2 = managedNodeList.get(1); - VM node3 = managedNodeList.get(2); - Properties props = new Properties(); - props.setProperty(REDUNDANCY_ZONE, "ARMY_ZONE"); + private void invokeRemoteMemberMXBeanOps() throws Exception { + Set<DistributedMember> otherMembers = this.managementTestRule.getOtherNormalMembers(); - createCache(node1, props); + for (DistributedMember member : otherMembers) { + MemberMXBean memberMXBean = awaitMemberMXBeanProxy(member); - node1.invoke(new SerializableRunnable("Assert Redundancy Zone") { + JVMMetrics metrics = memberMXBean.showJVMMetrics(); - public void run() { - ManagementService service = ManagementService.getExistingManagementService(getCache()); - MemberMXBean bean = service.getMemberMXBean(); - assertEquals("ARMY_ZONE", bean.getRedundancyZone()); - } - }); - } + String value = metrics.toString(); + boolean isManager = memberMXBean.isManager(); - protected void attchListenerToDSMBean(final VM vm) { - SerializableRunnable attchListenerToDSMBean = new SerializableRunnable("Attach Listener to DS MBean") { - public void run() { - assertTrue(managementService.isManager()); - DistributedSystemMXBean dsMBean = managementService.getDistributedSystemMXBean(); - - // First clear the notification list - notifList.clear(); - - NotificationListener nt = new NotificationListener() { - @Override - public void handleNotification(Notification notification, Object handback) { - if (notification.getType().equals(JMXNotificationType.REGION_CREATED)) { - notifList.add(notification); - } - } - }; - - try { - mbeanServer.addNotificationListener(MBeanJMXAdapter.getDistributedSystemName(), nt, null, null); - } catch (InstanceNotFoundException e) { - throw new AssertionError("Failed With Exception ", e); - } + // TODO: need assertions - } - }; - vm.invoke(attchListenerToDSMBean); + //("<ExpectedString> JVMMetrics is " + metrics.toString() + "</ExpectedString> "); + //("<ExpectedString> OSMetrics is " + metrics.toString() + "</ExpectedString> "); + //("<ExpectedString> Boolean Data Check " + bean.isManager() + "</ExpectedString> "); + } } - public void waitForManagerToRegisterListener() { - SystemManagementService service = (SystemManagementService) getManagementService(); - final Map<ObjectName, NotificationHubListener> hubMap = service.getNotificationHub().getListenerObjectMap(); + private void attachListenerToDistributedSystemMXBean(final VM managerVM) { + managerVM.invoke("attachListenerToDistributedSystemMXBean", () -> { + ManagementService service = this.managementTestRule.getManagementService(); + assertThat(service.isManager()).isTrue(); - Wait.waitForCriterion(new WaitCriterion() { - public String description() { - return "Waiting for manager to register the listener"; - } + // First clear the notification list + notifications.clear(); - public boolean done() { - boolean done = (1 == hubMap.size()); - return done; - } + NotificationListener listener = (final Notification notification, final Object handback) -> { + if (notification.getType().equals(JMXNotificationType.REGION_CREATED)) { + notifications.add(notification); + } + }; - }, MAX_WAIT, 500, true); + ManagementFactory.getPlatformMBeanServer().addNotificationListener(MBeanJMXAdapter.getDistributedSystemName(), listener, null, null); + }); } - public void countNotificationsAndCheckRegionSize(VM node1, VM node2, VM node3, VM managingNode) { - - DistributedMember member1 = getMember(node1); - DistributedMember member2 = getMember(node2); - DistributedMember member3 = getMember(node3); + private void verifyNotificationsAndRegionSize(final VM memberVM1, final VM memberVM2, final VM memberVM3, final VM managerVM) { + DistributedMember member1 = this.managementTestRule.getDistributedMember(memberVM1); + DistributedMember member2 = this.managementTestRule.getDistributedMember(memberVM2); + DistributedMember member3 = this.managementTestRule.getDistributedMember(memberVM3); - final String appender1 = MBeanJMXAdapter.getUniqueIDForMember(member1); - final String appender2 = MBeanJMXAdapter.getUniqueIDForMember(member2); - final String appender3 = MBeanJMXAdapter.getUniqueIDForMember(member3); + String memberId1 = MBeanJMXAdapter.getUniqueIDForMember(member1); + String memberId2 = MBeanJMXAdapter.getUniqueIDForMember(member2); + String memberId3 = MBeanJMXAdapter.getUniqueIDForMember(member3); - node1.invoke("Create Regions", () -> createNotifTestRegion(appender1)); - node2.invoke("Create Regions", () -> createNotifTestRegion(appender2)); - node3.invoke("Create Regions", () -> createNotifTestRegion(appender3)); + memberVM1.invoke("createNotificationRegion", () -> createNotificationRegion(memberId1)); + memberVM2.invoke("createNotificationRegion", () -> createNotificationRegion(memberId2)); + memberVM3.invoke("createNotificationRegion", () -> createNotificationRegion(memberId3)); - managingNode.invoke(new SerializableRunnable("Validate Notification Count") { + managerVM.invoke("verify notifications size", () -> { + await().until(() -> assertThat(notifications.size()).isEqualTo(45)); - public void run() { + assertThat(notifications.size()).isEqualTo(45); - Wait.waitForCriterion(new WaitCriterion() { - public String description() { - return "Waiting for all the RegionCreated notification to reach the manager " + notifList.size(); - } + Cache cache = this.managementTestRule.getCache(); - public boolean done() { - boolean done = (45 == notifList.size()); - return done; - } + Region region1 = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + memberId1); + Region region2 = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + memberId2); + Region region3 = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + memberId3); - }, MAX_WAIT, 500, true); + // Even though we got 15 notification only 10 should be there due to + // eviction attributes set in notification region - assertEquals(45, notifList.size()); - Cache cache = getCache(); - SystemManagementService service = (SystemManagementService) getManagementService(); - - Region member1NotifRegion = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender1); - Region member2NotifRegion = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender2); - Region member3NotifRegion = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender3); - - // Even though we got 15 notification only 10 should be there due to - // eviction attributes set in notification region - - waitAtMost(5, TimeUnit.SECONDS).untilCall(to(member1NotifRegion).size(), equalTo(10)); - waitAtMost(5, TimeUnit.SECONDS).untilCall(to(member2NotifRegion).size(), equalTo(10)); - waitAtMost(5, TimeUnit.SECONDS).untilCall(to(member3NotifRegion).size(), equalTo(10)); - } + await().untilCall(to(region1).size(), equalTo(10)); + await().untilCall(to(region2).size(), equalTo(10)); + await().untilCall(to(region3).size(), equalTo(10)); }); - } - private void createNotifTestRegion(final String appender1) { - Cache cache = getCache(); + private void createNotificationRegion(final String memberId) { + SystemManagementService service = this.managementTestRule.getSystemManagementService(); + Map<ObjectName, NotificationHubListener> notificationHubListenerMap = service.getNotificationHub().getListenerObjectMap(); + + await().until(() -> assertThat(notificationHubListenerMap.size()).isEqualTo(1)); - waitForManagerToRegisterListener(); - RegionFactory rf = cache.createRegionFactory(RegionShortcut.REPLICATE); + RegionFactory regionFactory = this.managementTestRule.getCache().createRegionFactory(RegionShortcut.REPLICATE); for (int i = 1; i <= 15; i++) { - rf.create("NotifTestRegion_" + i); + regionFactory.create(NOTIFICATION_REGION_NAME + i); } - Region member1NotifRegion = cache.getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender1); + Region region = this.managementTestRule.getCache().getRegion(ManagementConstants.NOTIFICATION_REGION + "_" + memberId); + + assertThat(region.size()).isEqualTo(0); + } - assertEquals(0, member1NotifRegion.size()); + private MemberMXBean awaitMemberMXBeanProxy(final DistributedMember member) { + SystemManagementService service = this.managementTestRule.getSystemManagementService(); + ObjectName objectName = service.getMemberMBeanName(member); + String alias = "awaiting MemberMXBean proxy for " + member; + await(alias).until(() -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull()); + return service.getMBeanProxy(objectName, MemberMXBean.class); } + private ConditionFactory await() { + return Awaitility.await().atMost(2, MINUTES); + } + + private ConditionFactory await(final String alias) { + return Awaitility.await(alias).atMost(2, MINUTES); + } }