This is an automated email from the ASF dual-hosted git repository. klund pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
commit 114be74012f3bfc4738eba8132c68d0e313e4e4f Author: Kirk Lund <[email protected]> AuthorDate: Tue Aug 21 13:40:48 2018 -0700 GEODE-5547: cleanup RegionManagementDUnitTest Convert test to use DistributedTestRule and lay the groundwork to make it easier to eventually remove ManagementTestRule. --- .../geode/management/ManagementTestRule.java | 83 +- .../management/RegionManagementDUnitTest.java | 1336 ++++++++++---------- .../main/java/org/apache/geode/test/dunit/VM.java | 7 + 3 files changed, 722 insertions(+), 704 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/ManagementTestRule.java b/geode-core/src/distributedTest/java/org/apache/geode/management/ManagementTestRule.java index 5d4a72e..80a861a 100644 --- a/geode-core/src/distributedTest/java/org/apache/geode/management/ManagementTestRule.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/management/ManagementTestRule.java @@ -36,13 +36,14 @@ import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import org.apache.geode.cache.Cache; -import org.apache.geode.cache.client.ClientCache; import org.apache.geode.cache.client.ClientCacheFactory; +import org.apache.geode.cache.client.internal.InternalClientCache; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.distributed.DistributedSystemDisconnectedException; import org.apache.geode.distributed.internal.DistributionManager; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; import org.apache.geode.internal.cache.GemFireCacheImpl; +import org.apache.geode.internal.cache.InternalCache; import org.apache.geode.management.internal.SystemManagementService; import org.apache.geode.test.dunit.Invoke; import org.apache.geode.test.dunit.VM; @@ -73,13 +74,13 @@ public class ManagementTestRule implements MethodRule, Serializable { private VM[] members; protected ManagementTestRule(final Builder builder) { - this.helper = new JUnit4CacheTestCase() {}; - this.numberOfManagers = builder.numberOfManagers; - this.numberOfMembers = builder.numberOfMembers; - this.start = builder.start; - this.defineManagersFirst = builder.defineManagersFirst; - this.defineManagers = builder.defineManagers; - this.defineMembers = builder.defineMembers; + helper = new JUnit4CacheTestCase() {}; + numberOfManagers = builder.numberOfManagers; + numberOfMembers = builder.numberOfMembers; + start = builder.start; + defineManagersFirst = builder.defineManagersFirst; + defineManagers = builder.defineManagers; + defineMembers = builder.defineMembers; } @Override @@ -106,13 +107,13 @@ public class ManagementTestRule implements MethodRule, Serializable { } public void createManagers() { - for (VM manager : this.managers) { + for (VM manager : managers) { manager.invoke(() -> createManager(true)); } } public void createMembers() { - for (VM member : this.members) { + for (VM member : members) { member.invoke(() -> createMember()); } } @@ -137,7 +138,7 @@ public class ManagementTestRule implements MethodRule, Serializable { setPropertyIfNotSet(properties, ENABLE_TIME_STATISTICS, "true"); setPropertyIfNotSet(properties, STATISTIC_SAMPLING_ENABLED, "true"); - this.helper.getCache(properties); + helper.getCache(properties); if (start) { startManager(); @@ -169,7 +170,7 @@ public class ManagementTestRule implements MethodRule, Serializable { setPropertyIfNotSet(properties, ENABLE_TIME_STATISTICS, "true"); setPropertyIfNotSet(properties, STATISTIC_SAMPLING_ENABLED, "true"); - this.helper.getCache(properties); + helper.getCache(properties); } public void createMember(final VM memberVM) { @@ -178,24 +179,24 @@ public class ManagementTestRule implements MethodRule, Serializable { memberVM.invoke("createMember", () -> createMember(properties)); } - public void createMember(final VM memberVM, final Properties properties) throws Exception { + public void createMember(final VM memberVM, final Properties properties) { memberVM.invoke("createMember", () -> createMember(properties)); } - public Cache getCache() { - return this.helper.getCache(); + public InternalCache getCache() { + return helper.getCache(); } - public ClientCache getClientCache() { - return this.helper.getClientCache(new ClientCacheFactory()); + public InternalClientCache getClientCache() { + return (InternalClientCache) helper.getClientCache(new ClientCacheFactory()); } public boolean hasCache() { - return this.helper.hasCache(); + return helper.hasCache(); } public Cache basicGetCache() { - return this.helper.basicGetCache(); + return helper.basicGetCache(); } public ManagementService getManagementService() { @@ -270,25 +271,25 @@ public class ManagementTestRule implements MethodRule, Serializable { } } - private void setUp(final Object target) throws Exception { + private void setUp(final Object target) { DUnitLauncher.launchIfNeeded(); JUnit4DistributedTestCase.disconnectAllFromDS(); int whichVM = 0; - this.managers = new VM[this.numberOfManagers]; - for (int i = 0; i < this.numberOfManagers; i++) { - this.managers[i] = getHost(0).getVM(whichVM); + managers = new VM[numberOfManagers]; + for (int i = 0; i < numberOfManagers; i++) { + managers[i] = getHost(0).getVM(whichVM); whichVM++; } - this.members = new VM[this.numberOfMembers]; - for (int i = 0; i < this.numberOfMembers; i++) { - this.members[i] = getHost(0).getVM(whichVM); + members = new VM[numberOfMembers]; + for (int i = 0; i < numberOfMembers; i++) { + members[i] = getHost(0).getVM(whichVM); whichVM++; } - if (this.start) { + if (start) { start(); } @@ -296,18 +297,18 @@ public class ManagementTestRule implements MethodRule, Serializable { } private void start() { - if (this.defineManagers && this.defineManagersFirst) { + if (defineManagers && defineManagersFirst) { createManagers(); } - if (this.defineMembers) { + if (defineMembers) { createMembers(); } - if (this.defineManagers && !this.defineManagersFirst) { + if (defineManagers && !defineManagersFirst) { createManagers(); } } - private void tearDown() throws Exception { + private void tearDown() { JUnit4DistributedTestCase.disconnectAllFromDS(); } @@ -351,9 +352,9 @@ public class ManagementTestRule implements MethodRule, Serializable { field.setAccessible(true); if (field.getType().isArray()) { - field.set(target, this.managers); + field.set(target, managers); } else { - field.set(target, this.managers[0]); + field.set(target, managers[0]); } } @@ -363,9 +364,9 @@ public class ManagementTestRule implements MethodRule, Serializable { field.setAccessible(true); if (field.getType().isArray()) { - field.set(target, this.members); + field.set(target, members); } else { - field.set(target, this.members[0]); + field.set(target, members[0]); } } @@ -400,7 +401,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Define VMs annotated with {@literal @}Manager as Managers. Default is true. */ public Builder defineManagers(final boolean value) { - this.defineManagers = value; + defineManagers = value; return this; } @@ -408,7 +409,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Define VMs annotated with {@literal @}Manager as Members. Default is true. */ public Builder defineMembers(final boolean value) { - this.defineMembers = value; + defineMembers = value; return this; } @@ -416,7 +417,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Number of Manager(s) to define. Default is 1. */ public Builder numberOfManagers(final int count) { - this.numberOfManagers = count; + numberOfManagers = count; return this; } @@ -424,7 +425,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Number of Member(s) to define. Default is 3. */ public Builder numberOfMembers(final int count) { - this.numberOfMembers = count; + numberOfMembers = count; return this; } @@ -432,7 +433,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Define Manager(s) to DUnit VMs before Member(s). Default is true. */ public Builder defineManagersFirst(final boolean value) { - this.defineManagersFirst = value; + defineManagersFirst = value; return this; } @@ -440,7 +441,7 @@ public class ManagementTestRule implements MethodRule, Serializable { * Start Manager(s) and Member(s) before tests. Default is true. */ public Builder start(final boolean value) { - this.start = value; + start = value; return this; } diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/RegionManagementDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/RegionManagementDUnitTest.java index bff073b..2f02bff 100644 --- a/geode-core/src/distributedTest/java/org/apache/geode/management/RegionManagementDUnitTest.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/management/RegionManagementDUnitTest.java @@ -15,23 +15,43 @@ package org.apache.geode.management; import static java.lang.management.ManagementFactory.getPlatformMBeanServer; +import static java.util.Calendar.MONTH; import static java.util.concurrent.TimeUnit.MINUTES; +import static org.apache.geode.cache.EvictionAction.LOCAL_DESTROY; import static org.apache.geode.cache.Region.SEPARATOR; +import static org.apache.geode.cache.RegionShortcut.LOCAL; +import static org.apache.geode.cache.RegionShortcut.PARTITION; +import static org.apache.geode.cache.RegionShortcut.PARTITION_REDUNDANT; +import static org.apache.geode.cache.RegionShortcut.REPLICATE; +import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_TIME_STATISTICS; +import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT; +import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER; +import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT; +import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START; +import static org.apache.geode.distributed.ConfigurationProperties.STATISTIC_SAMPLING_ENABLED; import static org.apache.geode.management.internal.MBeanJMXAdapter.getDistributedRegionMbeanName; import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberMBeanName; import static org.apache.geode.management.internal.MBeanJMXAdapter.getRegionMBeanName; +import static org.apache.geode.test.dunit.Disconnect.disconnectAllFromDS; import static org.apache.geode.test.dunit.Invoke.invokeInEveryVM; +import static org.apache.geode.test.dunit.VM.getVM; +import static org.apache.geode.test.dunit.VM.toArray; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Properties; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +import javax.management.InstanceNotFoundException; +import javax.management.MalformedObjectNameException; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.ObjectName; @@ -39,80 +59,94 @@ import javax.management.ObjectName; import org.awaitility.Awaitility; import org.awaitility.core.ConditionFactory; import org.junit.After; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.apache.geode.cache.AttributesFactory; import org.apache.geode.cache.Cache; import org.apache.geode.cache.CacheListener; -import org.apache.geode.cache.EvictionAction; +import org.apache.geode.cache.EntryOperation; import org.apache.geode.cache.EvictionAttributes; import org.apache.geode.cache.FixedPartitionAttributes; +import org.apache.geode.cache.FixedPartitionResolver; import org.apache.geode.cache.PartitionAttributes; import org.apache.geode.cache.PartitionAttributesFactory; +import org.apache.geode.cache.PartitionResolver; import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionAttributes; import org.apache.geode.cache.RegionFactory; -import org.apache.geode.cache.RegionShortcut; -import org.apache.geode.cache.Scope; import org.apache.geode.cache.query.data.Portfolio; import org.apache.geode.distributed.DistributedMember; -import org.apache.geode.distributed.internal.DistributionManager; -import org.apache.geode.internal.cache.GemFireCacheImpl; -import org.apache.geode.internal.cache.LocalRegion; +import org.apache.geode.internal.cache.InternalCache; +import org.apache.geode.internal.cache.InternalRegion; import org.apache.geode.internal.cache.TestObjectSizerImpl; import org.apache.geode.internal.cache.eviction.EvictionCounters; -import org.apache.geode.internal.cache.partitioned.fixed.SingleHopQuarterPartitionResolver; import org.apache.geode.management.internal.MBeanJMXAdapter; import org.apache.geode.management.internal.SystemManagementService; import org.apache.geode.test.dunit.VM; +import org.apache.geode.test.dunit.rules.CacheRule; +import org.apache.geode.test.dunit.rules.DistributedTestRule; +import org.apache.geode.test.junit.rules.serializable.SerializableTestName; /** * Distributed tests for {@link RegionMXBean}. - * <p> * + * <p> * This class checks and verifies various data and operations exposed through RegionMXBean * interface. - * <p> * + * <p> * Goal of the Test : RegionMBean gets created once region is created. Data like Region Attributes * data and stats are of proper value */ - -@SuppressWarnings({"serial", "unused"}) +@SuppressWarnings("serial,unused") public class RegionManagementDUnitTest implements Serializable { - private static final String REGION_NAME = "MANAGEMENT_TEST_REGION"; - private static final String PARTITIONED_REGION_NAME = "MANAGEMENT_PAR_REGION"; - private static final String FIXED_PR_NAME = "MANAGEMENT_FIXED_PR"; - private static final String LOCAL_REGION_NAME = "TEST_LOCAL_REGION"; - private static final String LOCAL_SUB_REGION_NAME = "TEST_LOCAL_SUB_REGION"; - - private static final String REGION_PATH = SEPARATOR + REGION_NAME; - private static final String PARTITIONED_REGION_PATH = SEPARATOR + PARTITIONED_REGION_NAME; - private static final String FIXED_PR_PATH = SEPARATOR + FIXED_PR_NAME; - private static final String LOCAL_SUB_REGION_PATH = - SEPARATOR + LOCAL_REGION_NAME + SEPARATOR + LOCAL_SUB_REGION_NAME; - - // field used in manager VM - private static Region fixedPartitionedRegion; - private static final AtomicReference<List<Notification>> MEMBER_NOTIFICATIONS = new AtomicReference<>(); private static final AtomicReference<List<Notification>> SYSTEM_NOTIFICATIONS = new AtomicReference<>(); - @Manager + private String regionName; + private String partitionedRegionName; + private String subregionName; + private VM managerVM; - @Member private VM[] memberVMs; @Rule - public ManagementTestRule managementTestRule = ManagementTestRule.builder().build(); + public DistributedTestRule distributedTestRule = new DistributedTestRule(); + + @Rule + public CacheRule cacheRule = new CacheRule(); + + @Rule + public SerializableTestName testName = new SerializableTestName(); + + @Before + public void setUp() { + String uniqueName = getClass().getSimpleName() + "_" + testName.getMethodName(); + regionName = uniqueName + "_region"; + partitionedRegionName = uniqueName + "_partitionedRegion"; + subregionName = uniqueName + "_subregion"; + + managerVM = getVM(0); + VM memberVM1 = getVM(1); + VM memberVM2 = getVM(2); + VM memberVM3 = getVM(3); + + memberVM1.invoke(() -> createMember(cacheRule)); + memberVM2.invoke(() -> createMember(cacheRule)); + memberVM3.invoke(() -> createMember(cacheRule)); + + managerVM.invoke(() -> createManager(cacheRule)); + + memberVMs = toArray(memberVM1, memberVM2, memberVM3); + } @After - public void after() throws Exception { + public void tearDown() { disconnectAllFromDS(); MEMBER_NOTIFICATIONS.set(null); @@ -128,27 +162,29 @@ public class RegionManagementDUnitTest implements Serializable { * b) Creates and check a Distributed Region */ @Test - public void testDistributedRegion() throws Exception { - createMembersAndThenManagers(); - + public void testDistributedRegion() { // Adding notification listener for remote cache memberVMs - addMemberNotificationListener(this.managerVM, 3); // TODO: why? + managerVM.invoke(() -> addMemberNotificationListener(3)); - for (VM memberVM : this.memberVMs) { - createDistributedRegion_tmp(memberVM, REGION_NAME); - verifyReplicateRegionAfterCreate(memberVM); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().createRegionFactory(REPLICATE).create(regionName); + verifyReplicateRegionAfterCreate(regionName); + }); } - verifyRemoteDistributedRegion(this.managerVM, 3); + managerVM.invoke(() -> verifyRemoteDistributedRegion(3, regionName)); - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, REGION_PATH); - verifyReplicatedRegionAfterClose(memberVM); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().getRegion(regionName).close(); + verifyReplicatedRegionAfterClose(regionName); + }); } - verifyProxyCleanup(this.managerVM); + managerVM.invoke(() -> verifyProxyCleanup(regionName)); - verifyMemberNotifications(this.managerVM, REGION_NAME, 3); + managerVM.invoke(() -> verifyMemberNotifications(regionName, 3)); } /** @@ -158,25 +194,27 @@ public class RegionManagementDUnitTest implements Serializable { * b) Created and check a Partitioned Region */ @Test - public void testPartitionedRegion() throws Exception { - createMembersAndThenManagers(); - + public void testPartitionedRegion() { // Adding notification listener for remote cache memberVMs - addMemberNotificationListener(this.managerVM, 3); // TODO: why? + managerVM.invoke(() -> addMemberNotificationListener(3)); - for (VM memberVM : this.memberVMs) { - createPartitionRegion_tmp(memberVM, PARTITIONED_REGION_NAME); - verifyPartitionRegionAfterCreate(memberVM); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().createRegionFactory(PARTITION_REDUNDANT).create(partitionedRegionName); + verifyPartitionRegionAfterCreate(partitionedRegionName, false); + }); } - verifyRemotePartitionRegion(this.managerVM); + managerVM.invoke(() -> verifyRemotePartitionRegion(partitionedRegionName)); - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, PARTITIONED_REGION_PATH); - verifyPartitionRegionAfterClose(memberVM); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().getRegion(partitionedRegionName).close(); + verifyPartitionRegionAfterClose(partitionedRegionName); + }); } - verifyMemberNotifications(this.managerVM, PARTITIONED_REGION_NAME, 3); + managerVM.invoke(() -> verifyMemberNotifications(partitionedRegionName, 3)); } /** @@ -186,27 +224,26 @@ public class RegionManagementDUnitTest implements Serializable { * b) Creates and check a Fixed Partitioned Region */ @Test - public void testFixedPRRegionMBean() throws Exception { - createMembersAndThenManagers(); - + public void testFixedPRRegionMBean() { // Adding notification listener for remote cache memberVMs - addMemberNotificationListener(this.managerVM, 3); // TODO: why? + managerVM.invoke(() -> addMemberNotificationListener(3)); int primaryIndex = 0; - for (VM memberVM : this.memberVMs) { + for (VM memberVM : memberVMs) { List<FixedPartitionAttributes> fixedPartitionAttributesList = createFixedPartitionList(primaryIndex + 1); - memberVM.invoke(() -> createFixedPartitionRegion(fixedPartitionAttributesList)); + memberVM.invoke( + () -> createFixedPartitionRegion(partitionedRegionName, fixedPartitionAttributesList)); primaryIndex++; } - verifyRemoteFixedPartitionRegion(this.managerVM); + managerVM.invoke(() -> verifyRemoteFixedPartitionRegion(partitionedRegionName)); - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, FIXED_PR_PATH); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> getCache().getRegion(partitionedRegionName).close()); } - verifyMemberNotifications(this.managerVM, FIXED_PR_PATH, 3); + managerVM.invoke(() -> verifyMemberNotifications(partitionedRegionName, 3)); } /** @@ -214,251 +251,201 @@ public class RegionManagementDUnitTest implements Serializable { * asynchronously. */ @Test - public void testRegionAggregate() throws Exception { - createManagersAndThenMembers(); - + public void testRegionAggregate() { // Adding notification listener for remote cache memberVMs - addSystemNotificationListener(this.managerVM); // TODO: why? + managerVM.invoke(() -> addSystemNotificationListener()); - for (VM memberVM : this.memberVMs) { - createDistributedRegion_tmp(memberVM, REGION_NAME); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().createRegionFactory(REPLICATE).create(regionName); + }); } - verifyDistributedMBean(this.managerVM, 3); - createDistributedRegion_tmp(this.managerVM, REGION_NAME); - verifyDistributedMBean(this.managerVM, 4); + managerVM.invoke(() -> { + verifyDistributedMBean(regionName, 3); + getCache().createRegionFactory(REPLICATE).create(regionName); + verifyDistributedMBean(regionName, 4); + }); - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, REGION_PATH); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> getCache().getRegion(regionName).close()); } - verifyProxyCleanup(this.managerVM); + managerVM.invoke(() -> { + verifyProxyCleanup(regionName); - verifyDistributedMBean(this.managerVM, 1); - closeRegion(this.managerVM, REGION_PATH); - verifyDistributedMBean(this.managerVM, 0); + verifyDistributedMBean(regionName, 1); + getCache().getRegion(regionName).close(); + verifyDistributedMBean(regionName, 0); - // TODO: GEODE-1930: next line is too flaky and needs to be fixed - // verifySystemNotifications(this.managerVM, REGION_NAME, 3); + // TODO: GEODE-1930: verifySystemNotifications is too flaky and needs to be fixed + // verifySystemNotifications(regionName, 3); + }); } @Test - public void testNavigationAPIS() throws Exception { - createManagersAndThenMembers(); - - for (VM memberVM : this.memberVMs) { - createDistributedRegion_tmp(memberVM, REGION_NAME); - createPartitionRegion_tmp(memberVM, PARTITIONED_REGION_NAME); + public void testNavigationAPIS() { + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().createRegionFactory(REPLICATE).create(regionName); + getCache().createRegionFactory(PARTITION_REDUNDANT).create(partitionedRegionName); + }); } - createDistributedRegion_tmp(this.managerVM, REGION_NAME); - createPartitionRegion_tmp(this.managerVM, PARTITIONED_REGION_NAME); - List<String> memberIds = new ArrayList<>(); + managerVM.invoke(() -> { + getCache().createRegionFactory(REPLICATE).create(regionName); + getCache().createRegionFactory(PARTITION_REDUNDANT).create(partitionedRegionName); + }); - for (VM memberVM : this.memberVMs) { - memberIds.add(getDistributedMemberId_tmp(memberVM)); + List<String> memberIds = new ArrayList<>(); + for (VM memberVM : memberVMs) { + memberIds.add( + memberVM.invoke(() -> getCache().getDistributedSystem().getDistributedMember().getId())); } - verifyNavigationApis(this.managerVM, memberIds); - - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, REGION_PATH); - } - closeRegion(this.managerVM, REGION_PATH); + managerVM.invoke(() -> verifyNavigationApis(memberIds)); } @Test - public void testSubRegions() throws Exception { - createMembersAndThenManagers(); - - for (VM memberVM : this.memberVMs) { - createLocalRegion_tmp(memberVM, LOCAL_REGION_NAME); - createSubRegion_tmp(memberVM, LOCAL_REGION_NAME, LOCAL_SUB_REGION_NAME); + public void testSubRegions() { + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + Region region = getCache().createRegionFactory(LOCAL).create(regionName); + getCache().createRegionFactory(LOCAL).createSubregion(region, subregionName); + }); } - for (VM memberVM : this.memberVMs) { - verifySubRegions(memberVM, LOCAL_SUB_REGION_PATH); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> verifyRegionMXBeanIsNotNull(regionName, subregionName)); } - for (VM memberVM : this.memberVMs) { - closeRegion(memberVM, LOCAL_REGION_NAME); - verifyNullRegions(memberVM, LOCAL_SUB_REGION_NAME); + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> { + getCache().getRegion(regionName).close(); + verifyRegionMXBeanIsNull(regionName, subregionName); + }); } } @Test - public void testSpecialRegions() throws Exception { - createMembersAndThenManagers(); - createSpecialRegion(this.memberVMs[0]); - verifySpecialRegion(this.managerVM); + public void testSpecialRegions() { + memberVMs[0].invoke(() -> { + RegionFactory<?, Portfolio> regionFactory = getCache().createRegionFactory(LOCAL); + regionFactory.setValueConstraint(Portfolio.class); + + regionFactory.create("p-os"); + regionFactory.create("p_os"); + }); + + managerVM.invoke(() -> { + awaitDistributedRegionMXBean("p-os", 1); + awaitDistributedRegionMXBean("p_os", 1); + }); } @Test - public void testLruStats() throws Exception { - createMembersAndThenManagers(); - for (VM memberVM : this.memberVMs) { - createDiskRegion(memberVM); + public void testLruStats() { + for (VM memberVM : memberVMs) { + memberVM.invoke(() -> createDiskRegion(regionName)); } - verifyEntrySize(this.managerVM, 3); + + managerVM.invoke(() -> verifyEntrySize(regionName, 3)); } - private void createMembersAndThenManagers() throws Exception { - this.managementTestRule.createMembers(); - this.managementTestRule.createManagers(); + private ConditionFactory await() { + return Awaitility.await().atMost(2, MINUTES); } - private void createManagersAndThenMembers() throws Exception { - this.managementTestRule.createManagers(); - this.managementTestRule.createMembers(); + private ConditionFactory await(final String alias) { + return Awaitility.await(alias).atMost(2, MINUTES); } - private void disconnectAllFromDS() { - this.managementTestRule.disconnectAllFromDS(); + private InternalCache getCache() { + return cacheRule.getCache(); } private ManagementService getManagementService() { - return this.managementTestRule.getManagementService(); + return ManagementService.getManagementService(cacheRule.getCache()); } - private Cache getCache() { - return this.managementTestRule.getCache(); + private SystemManagementService getSystemManagementService() { + return (SystemManagementService) getManagementService(); } - private void closeRegion(final VM anyVM, final String regionPath) { - anyVM.invoke("closeRegion", () -> getCache().getRegion(regionPath).close()); + private Set<DistributedMember> getOtherMembers() { + Set<DistributedMember> allMembers = + new HashSet<>(getCache().getDistributionManager().getNormalDistributionManagerIds()); + allMembers.remove(getCache().getDistributionManager().getId()); + return allMembers; } - private void createSpecialRegion(final VM memberVM) { - memberVM.invoke("createSpecialRegion", () -> { - AttributesFactory attributesFactory = new AttributesFactory(); - attributesFactory.setValueConstraint(Portfolio.class); - RegionAttributes regionAttributes = attributesFactory.create(); - - Cache cache = getCache(); - cache.createRegion("p-os", regionAttributes); - cache.createRegion("p_os", regionAttributes); - }); + private String toPath(final String regionName) { + return SEPARATOR + regionName; } - private void verifySpecialRegion(final VM managerVM) { - managerVM.invoke("verifySpecialRegion", () -> { - awaitDistributedRegionMXBean("/p-os", 1); // TODO: why? - awaitDistributedRegionMXBean("/p_os", 1); - }); + private String toPath(final String regionName, final String subregionName) { + return SEPARATOR + regionName + SEPARATOR + subregionName; } - private void createDiskRegion(final VM memberVM) { - memberVM.invoke("createDiskRegion", () -> { - AttributesFactory factory = new AttributesFactory(); - factory.setScope(Scope.LOCAL); - factory.setEvictionAttributes(EvictionAttributes.createLRUMemoryAttributes(20, - new TestObjectSizerImpl(), EvictionAction.LOCAL_DESTROY)); + private void createDiskRegion(final String regionName) { + EvictionAttributes evictionAttributes = EvictionAttributes.createLRUMemoryAttributes(20, + new TestObjectSizerImpl(), LOCAL_DESTROY); - Region region = getCache().createRegion(REGION_NAME, factory.create()); + RegionFactory<Integer, Object> regionFactory = getCache().createRegionFactory(LOCAL); + regionFactory.setEvictionAttributes(evictionAttributes); - EvictionCounters lruStats = ((LocalRegion) region).getEvictionController().getCounters(); - assertThat(lruStats).isNotNull(); + Region<Integer, Object> region = regionFactory.create(regionName); - RegionMXBean regionMXBean = getManagementService().getLocalRegionMBean(REGION_PATH); - assertThat(regionMXBean).isNotNull(); + EvictionCounters lruStats = ((InternalRegion) region).getEvictionController().getCounters(); + assertThat(lruStats).isNotNull(); - int total; - for (total = 0; total < 100; total++) { // TODO: why so many? - int[] array = new int[250]; - array[0] = total; - region.put(new Integer(total), array); - } - assertThat(regionMXBean.getEntrySize()).isGreaterThan(0); - }); - } - - private void verifyEntrySize(final VM managerVM, final int expectedMembers) { - managerVM.invoke("verifyEntrySize", () -> { - DistributedRegionMXBean distributedRegionMXBean = - awaitDistributedRegionMXBean(REGION_PATH, expectedMembers); - assertThat(distributedRegionMXBean).isNotNull(); - assertThat(distributedRegionMXBean.getEntrySize()).isGreaterThan(0); - }); - } + RegionMXBean regionMXBean = getManagementService().getLocalRegionMBean(toPath(regionName)); + assertThat(regionMXBean).isNotNull(); - private void verifySubRegions(final VM memberVM, final String subRegionPath) { - memberVM.invoke("verifySubRegions", () -> { - RegionMXBean regionMXBean = getManagementService().getLocalRegionMBean(subRegionPath); - assertThat(regionMXBean).isNotNull(); - }); - } - - private void verifyNullRegions(final VM memberVM, final String subRegionPath) { - memberVM.invoke("verifyNullRegions", () -> { - RegionMXBean regionMXBean = getManagementService().getLocalRegionMBean(subRegionPath); - assertThat(regionMXBean).isNull(); - }); + for (int total = 0; total < 10; total++) { + int[] array = new int[250]; + array[0] = total; + region.put(total, array); + } + assertThat(regionMXBean.getEntrySize()).isGreaterThan(0); } - private void verifyNavigationApis(final VM managerVM, final List<String> memberIds) { - managerVM.invoke("verifyNavigationApis", () -> { - ManagementService service = getManagementService(); - assertThat(service.getDistributedSystemMXBean()).isNotNull(); - - // With the DUnit framework there is a locator, a manager and 3 members - awaitMemberCount(5); - - DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean(); - assertThat(distributedSystemMXBean.listDistributedRegionObjectNames()).hasSize(2); - - assertThat(distributedSystemMXBean.fetchDistributedRegionObjectName(PARTITIONED_REGION_PATH)) - .isNotNull(); - assertThat(distributedSystemMXBean.fetchDistributedRegionObjectName(REGION_PATH)).isNotNull(); - - ObjectName actualName = - distributedSystemMXBean.fetchDistributedRegionObjectName(PARTITIONED_REGION_PATH); - ObjectName expectedName = getDistributedRegionMbeanName(PARTITIONED_REGION_PATH); - assertThat(actualName).isEqualTo(expectedName); - - actualName = distributedSystemMXBean.fetchDistributedRegionObjectName(REGION_PATH); - expectedName = getDistributedRegionMbeanName(REGION_PATH); - assertThat(actualName).isEqualTo(expectedName); - - for (String memberId : memberIds) { - ObjectName objectName = getMemberMBeanName(memberId); - awaitMemberMXBeanProxy(objectName); - - ObjectName[] objectNames = distributedSystemMXBean.fetchRegionObjectNames(objectName); - assertThat(objectNames).isNotNull(); - assertThat(objectNames).hasSize(2); + private void createFixedPartitionRegion(final String regionName, + final List<FixedPartitionAttributes> fixedPartitionAttributesList) { + PartitionAttributesFactory<?, ?> partitionAttributesFactory = new PartitionAttributesFactory(); + partitionAttributesFactory.setRedundantCopies(2); + partitionAttributesFactory.setTotalNumBuckets(12); - List<ObjectName> listOfNames = Arrays.asList(objectNames); + for (FixedPartitionAttributes fixedPartitionAttributes : fixedPartitionAttributesList) { + partitionAttributesFactory.addFixedPartitionAttributes(fixedPartitionAttributes); + } - expectedName = getRegionMBeanName(memberId, PARTITIONED_REGION_PATH); - assertThat(listOfNames).contains(expectedName); + partitionAttributesFactory.setPartitionResolver(new QuarterlyFixedPartitionResolver<>()); - expectedName = getRegionMBeanName(memberId, REGION_PATH); - assertThat(listOfNames).contains(expectedName); - } + RegionFactory<?, ?> regionFactory = getCache().createRegionFactory(PARTITION); + regionFactory.setPartitionAttributes(partitionAttributesFactory.create()); - for (String memberId : memberIds) { - ObjectName objectName = getMemberMBeanName(memberId); - awaitMemberMXBeanProxy(objectName); + Region<?, ?> region = regionFactory.create(regionName); - expectedName = getRegionMBeanName(memberId, PARTITIONED_REGION_PATH); - awaitRegionMXBeanProxy(expectedName); + SystemManagementService service = getSystemManagementService(); + RegionMXBean regionMXBean = service.getLocalRegionMBean(toPath(regionName)); + RegionAttributes regionAttributes = region.getAttributes(); - actualName = - distributedSystemMXBean.fetchRegionObjectName(memberId, PARTITIONED_REGION_PATH); - assertThat(actualName).isEqualTo(expectedName); + PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes(); + verifyPartitionData(regionAttributes, partitionAttributesData, true); - expectedName = getRegionMBeanName(memberId, REGION_PATH); - awaitRegionMXBeanProxy(expectedName); + FixedPartitionAttributesData[] fixedPartitionAttributesData = + regionMXBean.listFixedPartitionAttributes(); + assertThat(fixedPartitionAttributesData).isNotNull(); + assertThat(fixedPartitionAttributesData).hasSize(3); - actualName = distributedSystemMXBean.fetchRegionObjectName(memberId, REGION_PATH); - assertThat(actualName).isEqualTo(expectedName); - } - }); + for (FixedPartitionAttributesData aFixedPartitionAttributesData : fixedPartitionAttributesData) { + // TODO: add real assertions for FixedPartitionAttributesData + // LogWriterUtils.getLogWriter().info("<ExpectedString> Fixed PR Data is " + + // fixedPartitionAttributesData[i] + "</ExpectedString> "); + } } - /** - * Invoked in controller VM - */ private List<FixedPartitionAttributes> createFixedPartitionList(final int primaryIndex) { List<FixedPartitionAttributes> fixedPartitionAttributesList = new ArrayList<>(); if (primaryIndex == 1) { @@ -482,314 +469,404 @@ public class RegionManagementDUnitTest implements Serializable { return fixedPartitionAttributesList; } + private void addMemberNotificationListener(final int expectedMembers) + throws InstanceNotFoundException { + Set<DistributedMember> otherMemberSet = getOtherMembers(); + assertThat(otherMemberSet).hasSize(expectedMembers); + + SystemManagementService service = getSystemManagementService(); + + List<Notification> notifications = new ArrayList<>(); + MEMBER_NOTIFICATIONS.set(notifications); + + for (DistributedMember member : otherMemberSet) { + MemberNotificationListener listener = new MemberNotificationListener(notifications); + ObjectName objectName = service.getMemberMBeanName(member); + awaitMemberMXBeanProxy(objectName); + + getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null); + } + } + /** - * Invoked in member VMs + * Add a Notification listener to DistributedSystemMBean which should gather all the notifications + * which are propagated through all individual MemberMBeans Hence Region created/destroyed should + * be visible to this listener */ - private void createFixedPartitionRegion( - final List<FixedPartitionAttributes> fixedPartitionAttributesList) { - SystemManagementService service = getSystemManagementService_tmp(); + private void addSystemNotificationListener() throws InstanceNotFoundException { + awaitDistributedSystemMXBean(); - PartitionAttributesFactory partitionAttributesFactory = new PartitionAttributesFactory(); + List<Notification> notifications = new ArrayList<>(); + SYSTEM_NOTIFICATIONS.set(notifications); - partitionAttributesFactory.setRedundantCopies(2).setTotalNumBuckets(12); - for (FixedPartitionAttributes fixedPartitionAttributes : fixedPartitionAttributesList) { - partitionAttributesFactory.addFixedPartitionAttributes(fixedPartitionAttributes); - } - partitionAttributesFactory.setPartitionResolver(new SingleHopQuarterPartitionResolver()); + DistributedSystemNotificationListener listener = + new DistributedSystemNotificationListener(notifications); + ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName(); + getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null); + } - AttributesFactory attributesFactory = new AttributesFactory(); - attributesFactory.setPartitionAttributes(partitionAttributesFactory.create()); + private void awaitMemberCount(final int expectedCount) { + DistributedSystemMXBean distributedSystemMXBean = awaitDistributedSystemMXBean(); + await() + .untilAsserted( + () -> assertThat(distributedSystemMXBean.getMemberCount()).isEqualTo(expectedCount)); + } - fixedPartitionedRegion = getCache().createRegion(FIXED_PR_NAME, attributesFactory.create()); - assertThat(fixedPartitionedRegion).isNotNull(); + private DistributedRegionMXBean awaitDistributedRegionMXBean(final String regionName, + final int memberCount) { + SystemManagementService service = getSystemManagementService(); - RegionMXBean regionMXBean = service.getLocalRegionMBean(FIXED_PR_PATH); - RegionAttributes regionAttributes = fixedPartitionedRegion.getAttributes(); + await().untilAsserted( + () -> assertThat(service.getDistributedRegionMXBean(toPath(regionName))).isNotNull()); + await() + .untilAsserted(() -> assertThat( + service.getDistributedRegionMXBean(toPath(regionName)).getMemberCount()) + .isEqualTo(memberCount)); - PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes(); - verifyPartitionData(regionAttributes, partitionAttributesData); + return service.getDistributedRegionMXBean(toPath(regionName)); + } - FixedPartitionAttributesData[] fixedPartitionAttributesData = - regionMXBean.listFixedPartitionAttributes(); - assertThat(fixedPartitionAttributesData).isNotNull(); - assertThat(fixedPartitionAttributesData).hasSize(3); + private RegionMXBean awaitRegionMXBeanProxy(final DistributedMember member, + final String regionName) { + SystemManagementService service = getSystemManagementService(); + ObjectName objectName = service.getRegionMBeanName(member, toPath(regionName)); + String alias = "awaiting RegionMXBean proxy for " + member; - for (FixedPartitionAttributesData aFixedPartitionAttributesData : fixedPartitionAttributesData) { - // TODO: add real assertions - // LogWriterUtils.getLogWriter().info("<ExpectedString> Fixed PR Data is " + - // fixedPartitionAttributesData[i] + "</ExpectedString> "); - } + await(alias) + .untilAsserted( + () -> assertThat(service.getMBeanProxy(objectName, RegionMXBean.class)).isNotNull()); + + return service.getMBeanProxy(objectName, RegionMXBean.class); } - private void addMemberNotificationListener(final VM managerVM, final int expectedMembers) { - managerVM.invoke("addMemberNotificationListener", () -> { - Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp(); - assertThat(otherMemberSet).hasSize(expectedMembers); + private RegionMXBean awaitRegionMXBeanProxy(final ObjectName objectName) { + SystemManagementService service = getSystemManagementService(); - SystemManagementService service = getSystemManagementService_tmp(); + await() + .untilAsserted( + () -> assertThat(service.getMBeanProxy(objectName, RegionMXBean.class)).isNotNull()); - List<Notification> notifications = new ArrayList<>(); - MEMBER_NOTIFICATIONS.set(notifications); + return service.getMBeanProxy(objectName, RegionMXBean.class); + } - for (DistributedMember member : otherMemberSet) { - MemberNotificationListener listener = new MemberNotificationListener(notifications); - ObjectName objectName = service.getMemberMBeanName(member); - awaitMemberMXBeanProxy(objectName); + private MemberMXBean awaitMemberMXBeanProxy(final DistributedMember member) { + SystemManagementService service = getSystemManagementService(); + ObjectName objectName = service.getMemberMBeanName(member); + String alias = "awaiting MemberMXBean proxy for " + member; - getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null); - } - }); + await(alias) + .untilAsserted( + () -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull()); + + return service.getMBeanProxy(objectName, MemberMXBean.class); } - /** - * Add a Notification listener to DistributedSystemMBean which should gather all the notifications - * which are propagated through all individual MemberMBeans Hence Region created/destroyed should - * be visible to this listener - */ - private void addSystemNotificationListener(final VM managerVM) { - managerVM.invoke("addSystemNotificationListener", () -> { - awaitDistributedSystemMXBean(); + private MemberMXBean awaitMemberMXBeanProxy(final ObjectName objectName) { + SystemManagementService service = getSystemManagementService(); + await() + .untilAsserted( + () -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull()); + return service.getMBeanProxy(objectName, MemberMXBean.class); + } - List<Notification> notifications = new ArrayList<>(); - SYSTEM_NOTIFICATIONS.set(notifications); + private DistributedSystemMXBean awaitDistributedSystemMXBean() { + ManagementService service = getSystemManagementService(); - DistributedSystemNotificationListener listener = - new DistributedSystemNotificationListener(notifications); - ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName(); - getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null); - }); + await().untilAsserted(() -> assertThat(service.getDistributedSystemMXBean()).isNotNull()); + + return service.getDistributedSystemMXBean(); } - private void verifyMemberNotifications(final VM managerVM, final String regionName, - final int expectedMembers) { - managerVM.invoke("verifyMemberNotifications", () -> { - await() - .untilAsserted(() -> assertThat(MEMBER_NOTIFICATIONS.get()).hasSize(expectedMembers * 2)); - - int regionCreatedCount = 0; - int regionDestroyedCount = 0; - for (Notification notification : MEMBER_NOTIFICATIONS.get()) { - if (JMXNotificationType.REGION_CREATED.equals(notification.getType())) { - regionCreatedCount++; - assertThat(notification.getMessage()).contains(regionName); - } else if (JMXNotificationType.REGION_CLOSED.equals(notification.getType())) { - regionDestroyedCount++; - assertThat(notification.getMessage()).contains(regionName); - } else { - fail("Unexpected notification type: " + notification.getType()); - } - } + private void verifyEntrySize(String regionName, final int expectedMembers) { + DistributedRegionMXBean distributedRegionMXBean = + awaitDistributedRegionMXBean(regionName, expectedMembers); + assertThat(distributedRegionMXBean).isNotNull(); + assertThat(distributedRegionMXBean.getEntrySize()).isGreaterThan(0); + } - assertThat(regionCreatedCount).isEqualTo(expectedMembers); - assertThat(regionDestroyedCount).isEqualTo(expectedMembers); - }); + private void verifyRegionMXBeanIsNotNull(final String regionName, final String subregionName) { + RegionMXBean regionMXBean = + getManagementService().getLocalRegionMBean(toPath(regionName, subregionName)); + assertThat(regionMXBean).isNotNull(); } - // <[javax.management.Notification[source=10.118.33.232(17632)<v1>-32770][type=gemfire.distributedsystem.cache.region.created][message=Region - // Created With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=10.118.33.232(17633)<v2>-32771][type=gemfire.distributedsystem.cache.region.created][message=Region - // Created With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=10.118.33.232(17634)<v3>-32772][type=gemfire.distributedsystem.cache.region.created][message=Region - // Created With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=10.118.33.232(17632)<v1>-32770][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=10.118.33.232(17633)<v2>-32771][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=10.118.33.232(17634)<v3>-32772][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION]]> - - private void verifySystemNotifications(final VM managerVM, final String regionName, - final int expectedMembers) { - managerVM.invoke("verifySystemNotifications", () -> { - assertThat(SYSTEM_NOTIFICATIONS.get()).isNotNull(); - assertThat(SYSTEM_NOTIFICATIONS.get()).hasSize(expectedMembers + 2); // 2 for the manager - - - int regionCreatedCount = 0; - int regionDestroyedCount = 0; - for (Notification notification : SYSTEM_NOTIFICATIONS.get()) { - if (JMXNotificationType.REGION_CREATED.equals(notification.getType())) { - regionCreatedCount++; - assertThat(notification.getMessage()).contains(regionName); - } else if (JMXNotificationType.REGION_CLOSED.equals(notification.getType())) { - regionDestroyedCount++; - assertThat(notification.getMessage()).contains(regionName); - } else { - fail("Unexpected notification type: " + notification.getType()); - } + private void verifyRegionMXBeanIsNull(final String regionName, final String subregionName) { + RegionMXBean regionMXBean = + getManagementService().getLocalRegionMBean(toPath(regionName, subregionName)); + assertThat(regionMXBean).isNull(); + } + + private void verifyNavigationApis(final List<String> memberIds) throws Exception { + ManagementService service = getManagementService(); + assertThat(service.getDistributedSystemMXBean()).isNotNull(); + + // With the DUnit framework there is a locator, a manager and 3 members + awaitMemberCount(5); + + DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean(); + assertThat(distributedSystemMXBean.listDistributedRegionObjectNames()).hasSize(2); + + assertThat( + distributedSystemMXBean.fetchDistributedRegionObjectName(toPath(partitionedRegionName))) + .isNotNull(); + assertThat(distributedSystemMXBean.fetchDistributedRegionObjectName(toPath(regionName))) + .isNotNull(); + + ObjectName actualName = + distributedSystemMXBean.fetchDistributedRegionObjectName(toPath(partitionedRegionName)); + ObjectName expectedName = getDistributedRegionMbeanName(toPath(partitionedRegionName)); + assertThat(actualName).isEqualTo(expectedName); + + actualName = distributedSystemMXBean.fetchDistributedRegionObjectName(toPath(regionName)); + expectedName = getDistributedRegionMbeanName(toPath(regionName)); + assertThat(actualName).isEqualTo(expectedName); + + for (String memberId : memberIds) { + ObjectName objectName = getMemberMBeanName(memberId); + awaitMemberMXBeanProxy(objectName); + + ObjectName[] objectNames = distributedSystemMXBean.fetchRegionObjectNames(objectName); + assertThat(objectNames).isNotNull(); + assertThat(objectNames).hasSize(2); + + List<ObjectName> listOfNames = Arrays.asList(objectNames); + + expectedName = getRegionMBeanName(memberId, toPath(partitionedRegionName)); + assertThat(listOfNames).contains(expectedName); + + expectedName = getRegionMBeanName(memberId, toPath(regionName)); + assertThat(listOfNames).contains(expectedName); + } + + for (String memberId : memberIds) { + ObjectName objectName = getMemberMBeanName(memberId); + awaitMemberMXBeanProxy(objectName); + + expectedName = getRegionMBeanName(memberId, toPath(partitionedRegionName)); + awaitRegionMXBeanProxy(expectedName); + + actualName = + distributedSystemMXBean.fetchRegionObjectName(memberId, toPath(partitionedRegionName)); + assertThat(actualName).isEqualTo(expectedName); + + expectedName = getRegionMBeanName(memberId, toPath(regionName)); + awaitRegionMXBeanProxy(expectedName); + + actualName = distributedSystemMXBean.fetchRegionObjectName(memberId, toPath(regionName)); + assertThat(actualName).isEqualTo(expectedName); + } + } + + private void verifyMemberNotifications(final String regionName, final int expectedMembers) { + await() + .untilAsserted(() -> assertThat(MEMBER_NOTIFICATIONS.get()).hasSize(expectedMembers * 2)); + + int regionCreatedCount = 0; + int regionDestroyedCount = 0; + for (Notification notification : MEMBER_NOTIFICATIONS.get()) { + if (JMXNotificationType.REGION_CREATED.equals(notification.getType())) { + regionCreatedCount++; + assertThat(notification.getMessage()).contains(regionName); + } else if (JMXNotificationType.REGION_CLOSED.equals(notification.getType())) { + regionDestroyedCount++; + assertThat(notification.getMessage()).contains(regionName); + } else { + fail("Unexpected notification type: " + notification.getType()); } + } - assertThat(regionCreatedCount).isEqualTo(1); // just the manager - assertThat(regionDestroyedCount).isEqualTo(expectedMembers + 1); // all 3 members + manager - }); + assertThat(regionCreatedCount).isEqualTo(expectedMembers); + assertThat(regionDestroyedCount).isEqualTo(expectedMembers); + + // <[javax.management.Notification[source=10.118.33.232(17632)<v1>-32770][type=gemfire.distributedsystem.cache.region.created][message=Region + // Created With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=10.118.33.232(17633)<v2>-32771][type=gemfire.distributedsystem.cache.region.created][message=Region + // Created With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=10.118.33.232(17634)<v3>-32772][type=gemfire.distributedsystem.cache.region.created][message=Region + // Created With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=10.118.33.232(17632)<v1>-32770][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=10.118.33.232(17633)<v2>-32771][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=10.118.33.232(17634)<v3>-32772][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION]]> } - // <[javax.management.Notification[source=192.168.1.72(18496)<v27>-32770][type=gemfire.distributedsystem.cache.region.created][message=Region - // Created With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=192.168.1.72(18497)<v28>-32771][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=192.168.1.72(18498)<v29>-32772][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=192.168.1.72(18499)<v30>-32773][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], - // javax.management.Notification[source=192.168.1.72(18496)<v27>-32770][type=gemfire.distributedsystem.cache.region.closed][message=Region - // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION]]> - - private void verifyProxyCleanup(final VM managerVM) { - managerVM.invoke("verifyProxyCleanup", () -> { - SystemManagementService service = getSystemManagementService_tmp(); - - Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp(); - for (final DistributedMember member : otherMemberSet) { - String alias = "Waiting for the proxy to get deleted at managing node"; - await(alias).untilAsserted( - () -> assertThat(service.getMBeanProxy(service.getRegionMBeanName(member, REGION_PATH), - RegionMXBean.class)).isNull()); + private void verifySystemNotifications(final String regionName, final int expectedMembers) { + assertThat(SYSTEM_NOTIFICATIONS.get()).isNotNull(); + assertThat(SYSTEM_NOTIFICATIONS.get()).hasSize(expectedMembers + 2); // 2 for the manager + + + int regionCreatedCount = 0; + int regionDestroyedCount = 0; + for (Notification notification : SYSTEM_NOTIFICATIONS.get()) { + if (JMXNotificationType.REGION_CREATED.equals(notification.getType())) { + regionCreatedCount++; + assertThat(notification.getMessage()).contains(regionName); + } else if (JMXNotificationType.REGION_CLOSED.equals(notification.getType())) { + regionDestroyedCount++; + assertThat(notification.getMessage()).contains(regionName); + } else { + fail("Unexpected notification type: " + notification.getType()); } - }); + } + + assertThat(regionCreatedCount).isEqualTo(1); // just the manager + assertThat(regionDestroyedCount).isEqualTo(expectedMembers + 1); // all 3 members + manager + + // <[javax.management.Notification[source=192.168.1.72(18496)<v27>-32770][type=gemfire.distributedsystem.cache.region.created][message=Region + // Created With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=192.168.1.72(18497)<v28>-32771][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=192.168.1.72(18498)<v29>-32772][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=192.168.1.72(18499)<v30>-32773][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION], + // javax.management.Notification[source=192.168.1.72(18496)<v27>-32770][type=gemfire.distributedsystem.cache.region.closed][message=Region + // Destroyed/Closed With Name /MANAGEMENT_TEST_REGION]]> } - private void verifyRemoteDistributedRegion(final VM managerVM, final int expectedMembers) { - managerVM.invoke("verifyRemoteDistributedRegion", () -> { - Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp(); - assertThat(otherMemberSet).hasSize(expectedMembers); + private void verifyProxyCleanup(final String regionName) { + SystemManagementService service = getSystemManagementService(); - for (DistributedMember member : otherMemberSet) { - RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, REGION_PATH); + Set<DistributedMember> otherMemberSet = getOtherMembers(); + for (DistributedMember member : otherMemberSet) { + String alias = "Waiting for the proxy to get deleted at managing node"; + await(alias).untilAsserted( + () -> assertThat( + service.getMBeanProxy(service.getRegionMBeanName(member, toPath(regionName)), + RegionMXBean.class)).isNull()); + } + } - RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes(); - assertThat(regionAttributesData).isNotNull(); + private void verifyRemoteDistributedRegion(final int expectedMembers, final String regionName) { + Set<DistributedMember> otherMemberSet = getOtherMembers(); + assertThat(otherMemberSet).hasSize(expectedMembers); - MembershipAttributesData membershipAttributesData = regionMXBean.listMembershipAttributes(); - assertThat(membershipAttributesData).isNotNull(); + for (DistributedMember member : otherMemberSet) { + RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, regionName); - EvictionAttributesData evictionAttributesData = regionMXBean.listEvictionAttributes(); - assertThat(evictionAttributesData).isNotNull(); - } + RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes(); + assertThat(regionAttributesData).isNotNull(); - DistributedRegionMXBean distributedRegionMXBean = - awaitDistributedRegionMXBean(REGION_PATH, expectedMembers); + MembershipAttributesData membershipAttributesData = regionMXBean.listMembershipAttributes(); + assertThat(membershipAttributesData).isNotNull(); - assertThat(distributedRegionMXBean).isNotNull(); - assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(REGION_PATH); - }); + EvictionAttributesData evictionAttributesData = regionMXBean.listEvictionAttributes(); + assertThat(evictionAttributesData).isNotNull(); + } + + DistributedRegionMXBean distributedRegionMXBean = + awaitDistributedRegionMXBean(regionName, expectedMembers); + + assertThat(distributedRegionMXBean).isNotNull(); + assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(toPath(regionName)); } - private void verifyDistributedMBean(final VM managerVM, final int expectedMembers) { - managerVM.invoke("verifyDistributedMBean", () -> { - if (expectedMembers == 0) { - ManagementService service = getManagementService(); - String alias = "Waiting for the proxy to get deleted at managing node"; - await(alias) - .untilAsserted( - () -> assertThat(service.getDistributedRegionMXBean(REGION_PATH)).isNull()); - return; - } + private void verifyDistributedMBean(final String regionName, final int expectedMembers) { + if (expectedMembers == 0) { + ManagementService service = getManagementService(); + String alias = "Waiting for the proxy to get deleted at managing node"; + await(alias) + .untilAsserted( + () -> assertThat(service.getDistributedRegionMXBean(toPath(regionName))).isNull()); + return; + } - DistributedRegionMXBean distributedRegionMXBean = - awaitDistributedRegionMXBean(REGION_PATH, expectedMembers); + DistributedRegionMXBean distributedRegionMXBean = + awaitDistributedRegionMXBean(regionName, expectedMembers); - assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(REGION_PATH); - assertThat(distributedRegionMXBean.getMemberCount()).isEqualTo(expectedMembers); - assertThat(distributedRegionMXBean.getMembers()).hasSize(expectedMembers); + assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(toPath(regionName)); + assertThat(distributedRegionMXBean.getMemberCount()).isEqualTo(expectedMembers); + assertThat(distributedRegionMXBean.getMembers()).hasSize(expectedMembers); - // Check Stats related Data - // LogWriterUtils.getLogWriter().info("<ExpectedString> CacheListenerCallsAvgLatency is " + - // distributedRegionMXBean.getCacheListenerCallsAvgLatency() + "</ExpectedString> "); - // LogWriterUtils.getLogWriter().info("<ExpectedString> CacheWriterCallsAvgLatency is " + - // distributedRegionMXBean.getCacheWriterCallsAvgLatency() + "</ExpectedString> "); - // LogWriterUtils.getLogWriter().info("<ExpectedString> CreatesRate is " + - // distributedRegionMXBean.getCreatesRate() + "</ExpectedString> "); - }); + // Check Stats related Data + // LogWriterUtils.getLogWriter().info("<ExpectedString> CacheListenerCallsAvgLatency is " + + // distributedRegionMXBean.getCacheListenerCallsAvgLatency() + "</ExpectedString> "); + // LogWriterUtils.getLogWriter().info("<ExpectedString> CacheWriterCallsAvgLatency is " + + // distributedRegionMXBean.getCacheWriterCallsAvgLatency() + "</ExpectedString> "); + // LogWriterUtils.getLogWriter().info("<ExpectedString> CreatesRate is " + + // distributedRegionMXBean.getCreatesRate() + "</ExpectedString> "); } - private void verifyRemotePartitionRegion(final VM managerVM) { - managerVM.invoke("verifyRemotePartitionRegion", () -> { - Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp(); + private void verifyRemotePartitionRegion(final String regionName) { + Set<DistributedMember> otherMemberSet = getOtherMembers(); - for (DistributedMember member : otherMemberSet) { - RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, PARTITIONED_REGION_PATH); - PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes(); - assertThat(partitionAttributesData).isNotNull(); - } + for (DistributedMember member : otherMemberSet) { + RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, regionName); + PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes(); + assertThat(partitionAttributesData).isNotNull(); + } - ManagementService service = getManagementService(); - DistributedRegionMXBean distributedRegionMXBean = - service.getDistributedRegionMXBean(PARTITIONED_REGION_PATH); - assertThat(distributedRegionMXBean.getMembers()).hasSize(3); - }); + ManagementService service = getManagementService(); + DistributedRegionMXBean distributedRegionMXBean = + service.getDistributedRegionMXBean(toPath(regionName)); + assertThat(distributedRegionMXBean.getMembers()).hasSize(3); } - private void verifyReplicateRegionAfterCreate(final VM memberVM) { - memberVM.invoke("verifyReplicateRegionAfterCreate", () -> { - Cache cache = getCache(); + private void verifyReplicateRegionAfterCreate(final String regionName) + throws MalformedObjectNameException { + Cache cache = getCache(); - String memberId = - MBeanJMXAdapter.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember()); - ObjectName objectName = ObjectName.getInstance("GemFire:type=Member,member=" + memberId); + String memberId = + MBeanJMXAdapter.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember()); + ObjectName objectName = ObjectName.getInstance("GemFire:type=Member,member=" + memberId); - // List<Notification> notifications = new ArrayList<>(); - // MEMBER_NOTIFICATIONS_REF.set(notifications); - // - // MemberNotificationListener listener = new MemberNotificationListener(notifications); - // ManagementFactory.getPlatformMBeanServer().addNotificationListener(objectName, listener, - // null, null); + // List<Notification> notifications = new ArrayList<>(); + // MEMBER_NOTIFICATIONS_REF.set(notifications); + // + // MemberNotificationListener listener = new MemberNotificationListener(notifications); + // ManagementFactory.getPlatformMBeanServer().addNotificationListener(objectName, listener, + // null, null); - SystemManagementService service = getSystemManagementService_tmp(); - RegionMXBean regionMXBean = service.getLocalRegionMBean(REGION_PATH); - assertThat(regionMXBean).isNotNull(); + SystemManagementService service = getSystemManagementService(); + RegionMXBean regionMXBean = service.getLocalRegionMBean(toPath(regionName)); + assertThat(regionMXBean).isNotNull(); - Region region = cache.getRegion(REGION_PATH); - RegionAttributes regionAttributes = region.getAttributes(); + Region region = cache.getRegion(regionName); + RegionAttributes regionAttributes = region.getAttributes(); - RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes(); - verifyRegionAttributes(regionAttributes, regionAttributesData); + RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes(); + verifyRegionAttributes(regionAttributes, regionAttributesData); - MembershipAttributesData membershipData = regionMXBean.listMembershipAttributes(); - assertThat(membershipData).isNotNull(); + MembershipAttributesData membershipData = regionMXBean.listMembershipAttributes(); + assertThat(membershipData).isNotNull(); - EvictionAttributesData evictionData = regionMXBean.listEvictionAttributes(); - assertThat(evictionData).isNotNull(); - }); + EvictionAttributesData evictionData = regionMXBean.listEvictionAttributes(); + assertThat(evictionData).isNotNull(); } - private void verifyPartitionRegionAfterCreate(final VM memberVM) { - memberVM.invoke("verifyPartitionRegionAfterCreate", () -> { - Region region = getCache().getRegion(PARTITIONED_REGION_PATH); + private void verifyPartitionRegionAfterCreate(final String regionName, + final boolean hasPartitionResolver) { + Region region = getCache().getRegion(regionName); - SystemManagementService service = getSystemManagementService_tmp(); - RegionMXBean regionMXBean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH); + SystemManagementService service = getSystemManagementService(); + RegionMXBean regionMXBean = service.getLocalRegionMBean(toPath(regionName)); - verifyPartitionData(region.getAttributes(), regionMXBean.listPartitionAttributes()); - }); + verifyPartitionData(region.getAttributes(), regionMXBean.listPartitionAttributes(), + hasPartitionResolver); } - private void verifyReplicatedRegionAfterClose(final VM memberVM) { - memberVM.invoke("verifyReplicatedRegionAfterClose", () -> { - SystemManagementService service = getSystemManagementService_tmp(); - RegionMXBean regionMXBean = service.getLocalRegionMBean(REGION_PATH); - assertThat(regionMXBean).isNull(); + private void verifyReplicatedRegionAfterClose(final String regionName) { + SystemManagementService service = getSystemManagementService(); + RegionMXBean regionMXBean = service.getLocalRegionMBean(toPath(regionName)); + assertThat(regionMXBean).isNull(); - ObjectName objectName = service.getRegionMBeanName( - getCache().getDistributedSystem().getDistributedMember(), REGION_PATH); - assertThat(service.getLocalManager().getManagementResourceRepo() - .getEntryFromLocalMonitoringRegion(objectName)).isNull(); - }); + ObjectName objectName = service.getRegionMBeanName( + getCache().getDistributedSystem().getDistributedMember(), toPath(regionName)); + assertThat(service.getLocalManager().getManagementResourceRepo() + .getEntryFromLocalMonitoringRegion(objectName)).isNull(); } - private void verifyPartitionRegionAfterClose(final VM memberVM) { - memberVM.invoke("verifyPartitionRegionAfterClose", () -> { - ManagementService service = getManagementService(); - RegionMXBean regionMXBean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH); - assertThat(regionMXBean).isNull(); - }); + private void verifyPartitionRegionAfterClose(String regionName) { + ManagementService service = getManagementService(); + RegionMXBean regionMXBean = service.getLocalRegionMBean(toPath(regionName)); + assertThat(regionMXBean).isNull(); } - /** - * Invoked in member VMs - */ private void verifyPartitionData(final RegionAttributes expectedRegionAttributes, - final PartitionAttributesData partitionAttributesData) { + final PartitionAttributesData partitionAttributesData, + final boolean hasPartitionResolver) { PartitionAttributes expectedPartitionAttributes = expectedRegionAttributes.getPartitionAttributes(); @@ -809,12 +886,15 @@ public class RegionManagementDUnitTest implements Serializable { assertThat(partitionAttributesData.getColocatedWith()) .isEqualTo(expectedPartitionAttributes.getColocatedWith()); - String partitionResolver = null; - // TODO: these conditionals should be deterministic - if (expectedPartitionAttributes.getPartitionResolver() != null) { - partitionResolver = expectedPartitionAttributes.getPartitionResolver().getName(); + if (hasPartitionResolver) { + PartitionResolver partitionResolver = expectedPartitionAttributes.getPartitionResolver(); + assertThat(partitionAttributesData.getPartitionResolver()) + .isEqualTo(partitionResolver.getName()); + + } else { + + assertThat(partitionAttributesData.getPartitionResolver()).isNull(); } - assertThat(partitionAttributesData.getPartitionResolver()).isEqualTo(partitionResolver); assertThat(partitionAttributesData.getRecoveryDelay()) .isEqualTo(expectedPartitionAttributes.getRecoveryDelay()); @@ -832,17 +912,9 @@ public class RegionManagementDUnitTest implements Serializable { } } - /** - * Invoked in member VMs - */ private void verifyRegionAttributes(final RegionAttributes regionAttributes, final RegionAttributesData regionAttributesData) { - String compressorClassName = null; - // TODO: these conditionals should be deterministic - if (regionAttributes.getCompressor() != null) { - compressorClassName = regionAttributes.getCompressor().getClass().getCanonicalName(); - } - assertThat(regionAttributesData.getCompressorClassName()).isEqualTo(compressorClassName); + assertThat(regionAttributesData.getCompressorClassName()).isNull(); String cacheLoaderClassName = null; if (regionAttributes.getCacheLoader() != null) { @@ -953,181 +1025,50 @@ public class RegionManagementDUnitTest implements Serializable { .isEqualTo(regionAttributes.isDiskSynchronous()); } - private void verifyRemoteFixedPartitionRegion(final VM managerVM) { - managerVM.invoke("Verify Partition region", () -> { - Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp(); + private void verifyRemoteFixedPartitionRegion(final String regionName) { + Set<DistributedMember> otherMemberSet = getOtherMembers(); - for (DistributedMember member : otherMemberSet) { - RegionMXBean bean = awaitRegionMXBeanProxy(member, FIXED_PR_PATH); + for (DistributedMember member : otherMemberSet) { + RegionMXBean bean = awaitRegionMXBeanProxy(member, regionName); - PartitionAttributesData data = bean.listPartitionAttributes(); - assertThat(data).isNotNull(); + PartitionAttributesData data = bean.listPartitionAttributes(); + assertThat(data).isNotNull(); - FixedPartitionAttributesData[] fixedPrData = bean.listFixedPartitionAttributes(); - assertThat(fixedPrData).isNotNull(); - assertThat(fixedPrData).hasSize(3); + FixedPartitionAttributesData[] fixedPrData = bean.listFixedPartitionAttributes(); + assertThat(fixedPrData).isNotNull(); + assertThat(fixedPrData).hasSize(3); - for (FixedPartitionAttributesData aFixedPrData : fixedPrData) { - // TODO: add real assertions - // LogWriterUtils.getLogWriter().info("<ExpectedString> Remote PR Data is " + - // fixedPrData[i] + "</ExpectedString> "); - } + for (FixedPartitionAttributesData aFixedPrData : fixedPrData) { + // TODO: add real assertions for FixedPartitionAttributesData + // LogWriterUtils.getLogWriter().info("<ExpectedString> Remote PR Data is " + + // fixedPrData[i] + "</ExpectedString> "); } - }); - } - - private void createDistributedRegion_tmp(final VM vm, final String regionName) { - vm.invoke(() -> createDistributedRegion_tmp(regionName)); - } - - private void createDistributedRegion_tmp(final String regionName) { - getCache().createRegionFactory(RegionShortcut.REPLICATE).create(regionName); - } - - private void createPartitionRegion_tmp(final VM vm, final String partitionRegionName) { - vm.invoke("Create Partitioned region", () -> { - SystemManagementService service = getSystemManagementService_tmp(); - RegionFactory regionFactory = - getCache().createRegionFactory(RegionShortcut.PARTITION_REDUNDANT); - regionFactory.create(partitionRegionName); - }); - } - - private void createLocalRegion_tmp(final VM vm, final String localRegionName) { - vm.invoke("Create Local region", () -> { - SystemManagementService service = getSystemManagementService_tmp(); - RegionFactory regionFactory = getCache().createRegionFactory(RegionShortcut.LOCAL); - regionFactory.create(localRegionName); - }); - } - - private void createSubRegion_tmp(final VM vm, final String parentRegionPath, - final String subregionName) { - vm.invoke("Create Sub region", () -> { - SystemManagementService service = getSystemManagementService_tmp(); - Region region = getCache().getRegion(parentRegionPath); - region.createSubregion(subregionName, region.getAttributes()); - }); - } - - private String getDistributedMemberId_tmp(final VM vm) { - return vm.invoke("getMemberId", - () -> getCache().getDistributedSystem().getDistributedMember().getId()); - } - - private DistributedMember getDistributedMember_tmp(final VM anyVM) { - return anyVM.invoke("getDistributedMember_tmp", - () -> getCache().getDistributedSystem().getDistributedMember()); - } - - private SystemManagementService getSystemManagementService_tmp() { - return (SystemManagementService) getManagementService(); - } - - private DistributionManager getDistributionManager_tmp() { - return ((GemFireCacheImpl) getCache()).getDistributionManager(); - } - - private DistributedMember getDistributedMember_tmp() { - return getCache().getDistributedSystem().getDistributedMember(); - } - - private Set<DistributedMember> getOtherNormalMembers_tmp() { - Set<DistributedMember> allMembers = - new HashSet<>(getDistributionManager_tmp().getNormalDistributionManagerIds()); - allMembers.remove(getDistributedMember_tmp()); - return allMembers; - } - - private void awaitMemberCount(final int expectedCount) { - DistributedSystemMXBean distributedSystemMXBean = awaitDistributedSystemMXBean(); - await() - .untilAsserted( - () -> assertThat(distributedSystemMXBean.getMemberCount()).isEqualTo(expectedCount)); - } - - private DistributedRegionMXBean awaitDistributedRegionMXBean(final String name) { - SystemManagementService service = getSystemManagementService_tmp(); - - await().untilAsserted(() -> assertThat(service.getDistributedRegionMXBean(name)).isNotNull()); - - return service.getDistributedRegionMXBean(name); - } - - private DistributedRegionMXBean awaitDistributedRegionMXBean(final String name, - final int memberCount) { - SystemManagementService service = getSystemManagementService_tmp(); - - await().untilAsserted(() -> assertThat(service.getDistributedRegionMXBean(name)).isNotNull()); - await() - .untilAsserted(() -> assertThat(service.getDistributedRegionMXBean(name).getMemberCount()) - .isEqualTo(memberCount)); - - return service.getDistributedRegionMXBean(name); - } - - private RegionMXBean awaitRegionMXBeanProxy(final DistributedMember member, final String name) { - SystemManagementService service = getSystemManagementService_tmp(); - ObjectName objectName = service.getRegionMBeanName(member, name); - String alias = "awaiting RegionMXBean proxy for " + member; - - await(alias) - .untilAsserted( - () -> assertThat(service.getMBeanProxy(objectName, RegionMXBean.class)).isNotNull()); - - return service.getMBeanProxy(objectName, RegionMXBean.class); - } - - private RegionMXBean awaitRegionMXBeanProxy(final ObjectName objectName) { - SystemManagementService service = getSystemManagementService_tmp(); - - await() - .untilAsserted( - () -> assertThat(service.getMBeanProxy(objectName, RegionMXBean.class)).isNotNull()); - - return service.getMBeanProxy(objectName, RegionMXBean.class); - } - - private MemberMXBean awaitMemberMXBeanProxy(final DistributedMember member) { - SystemManagementService service = getSystemManagementService_tmp(); - ObjectName objectName = service.getMemberMBeanName(member); - String alias = "awaiting MemberMXBean proxy for " + member; - - await(alias) - .untilAsserted( - () -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull()); - - return service.getMBeanProxy(objectName, MemberMXBean.class); - } - - private MemberMXBean awaitMemberMXBeanProxy(final ObjectName objectName) { - SystemManagementService service = getSystemManagementService_tmp(); - await() - .untilAsserted( - () -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull()); - return service.getMBeanProxy(objectName, MemberMXBean.class); + } } - private DistributedSystemMXBean awaitDistributedSystemMXBean() { - ManagementService service = getSystemManagementService_tmp(); - - await().untilAsserted(() -> assertThat(service.getDistributedSystemMXBean()).isNotNull()); + private static void createManager(CacheRule cacheRule) { + Properties config = new Properties(); + config.put(JMX_MANAGER, "true"); + config.put(JMX_MANAGER_START, "true"); + config.put(JMX_MANAGER_PORT, "0"); + config.put(HTTP_SERVICE_PORT, "0"); + config.put(ENABLE_TIME_STATISTICS, "true"); + config.put(STATISTIC_SAMPLING_ENABLED, "true"); - return service.getDistributedSystemMXBean(); + cacheRule.createCache(config); } - private ConditionFactory await() { - return Awaitility.await().atMost(2, MINUTES); - } + private static void createMember(CacheRule cacheRule) { + Properties config = new Properties(); + config.put(JMX_MANAGER, "false"); + config.put(ENABLE_TIME_STATISTICS, "true"); + config.put(STATISTIC_SAMPLING_ENABLED, "true"); - private ConditionFactory await(final String alias) { - return Awaitility.await(alias).atMost(2, MINUTES); + cacheRule.createCache(config); } /** - * Registered in manager VM - * - * User defined notification handler for Region creation handling + * Registered in manager VM. Listens to notifications from a MemberMXBean. */ private static class MemberNotificationListener implements NotificationListener { @@ -1146,16 +1087,14 @@ public class RegionManagementDUnitTest implements Serializable { notifications.add(notification); - // TODO: add better validation + // TODO: add real assertions for Notifications // LogWriterUtils.getLogWriter().info("<ExpectedString> Member Level Notifications" + // notification + "</ExpectedString> "); } } /** - * Registered in manager VM - * - * User defined notification handler for Region creation handling + * Registered in manager VM. Listens to notifications from a DistributedSystemMXBean. */ private static class DistributedSystemNotificationListener implements NotificationListener { @@ -1171,9 +1110,80 @@ public class RegionManagementDUnitTest implements Serializable { notifications.add(notification); - // TODO: add something that will be validated + // TODO: add real assertions for Notifications // LogWriterUtils.getLogWriter().info("<ExpectedString> Distributed System Notifications" + // notification + "</ExpectedString> "); } } + + /** + * Routes based on which quarter of the year that a month falls within. + */ + private static class QuarterlyFixedPartitionResolver<K, V> + implements FixedPartitionResolver<K, V> { + + @Override + public String getPartitionName(EntryOperation<K, V> opDetails, + @Deprecated Set<String> targetPartitions) { + int month = getMonth(opDetails); + + if (month == 0 || month == 1 || month == 2) { + return "Q1"; + } else if (month == 3 || month == 4 || month == 5) { + return "Q2"; + } else if (month == 6 || month == 7 || month == 8) { + return "Q3"; + } else if (month == 9 || month == 10 || month == 11) { + return "Q4"; + } else { + return "Invalid Quarter"; + } + } + + @Override + public Serializable getRoutingObject(EntryOperation<K, V> opDetails) { + int month = getMonth(opDetails); + + switch (month) { + case 0: + return "January"; + case 1: + return "February"; + case 2: + return "March"; + case 3: + return "April"; + case 4: + return "May"; + case 5: + return "June"; + case 6: + return "July"; + case 7: + return "August"; + case 8: + return "September"; + case 9: + return "October"; + case 10: + return "November"; + case 11: + return "December"; + default: + return null; + } + } + + @Override + public String getName() { + return getClass().getSimpleName(); + } + + private int getMonth(EntryOperation<K, V> opDetails) { + Date date = (Date) opDetails.getKey(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.get(MONTH); + } + } } diff --git a/geode-dunit/src/main/java/org/apache/geode/test/dunit/VM.java b/geode-dunit/src/main/java/org/apache/geode/test/dunit/VM.java index bd272ea..4c54c8f 100644 --- a/geode-dunit/src/main/java/org/apache/geode/test/dunit/VM.java +++ b/geode-dunit/src/main/java/org/apache/geode/test/dunit/VM.java @@ -139,6 +139,13 @@ public class VM implements Serializable { } /** + * Returns an array of all provided VMs. + */ + public static VM[] toArray(VM... vms) { + return vms; + } + + /** * Creates a new {@code VM} that runs on a given host with a given process id. */ public VM(final Host host, final int id, final RemoteDUnitVMIF client) {
