You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2018/08/22 23:22:10 UTC

[geode] 01/02: GEODE-5547: cleanup RegionManagementDUnitTest

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 <kl...@apache.org>
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) {