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 2016/10/18 16:39:29 UTC

incubator-geode git commit: Ready for ManagementTestRule

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-1930 a904acf66 -> a83f8c02f


Ready for ManagementTestRule


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/a83f8c02
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/a83f8c02
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/a83f8c02

Branch: refs/heads/feature/GEODE-1930
Commit: a83f8c02fc0a56f90ec4bb9ebc8b589caec35c57
Parents: a904acf
Author: Kirk Lund <kl...@apache.org>
Authored: Tue Oct 18 09:39:01 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Tue Oct 18 09:39:01 2016 -0700

----------------------------------------------------------------------
 .../internal/SystemManagementService.java       |   2 +-
 .../management/RegionManagementDUnitTest.java   | 787 +++++++++++++------
 2 files changed, 531 insertions(+), 258 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a83f8c02/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
index 29bbb15..65b71d6 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
@@ -357,7 +357,7 @@ public final class SystemManagementService extends BaseManagementService {
   }
 
 
-  public <T> T getMBeanProxy(ObjectName objectName, Class<T> interfaceClass) {
+  public <T> T getMBeanProxy(ObjectName objectName, Class<T> interfaceClass) { // TODO: this is too generic
     if (!isStartedAndOpen()) {
       return null;
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a83f8c02/geode-core/src/test/java/org/apache/geode/management/RegionManagementDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/RegionManagementDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/RegionManagementDUnitTest.java
index ff643d4..71359be 100644
--- a/geode-core/src/test/java/org/apache/geode/management/RegionManagementDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/RegionManagementDUnitTest.java
@@ -14,24 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.geode.management;
 
-import static com.jayway.awaitility.Awaitility.*;
+import static java.util.concurrent.TimeUnit.MINUTES;
 import static org.apache.geode.cache.Region.*;
 import static org.apache.geode.test.dunit.Host.*;
-import static org.junit.Assert.*;
+import static org.apache.geode.test.dunit.Invoke.invokeInEveryVM;
+import static org.assertj.core.api.Assertions.*;
 
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.management.Notification;
 import javax.management.NotificationListener;
 import javax.management.ObjectName;
 
+import com.jayway.awaitility.Awaitility;
+import com.jayway.awaitility.core.ConditionFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,9 +67,12 @@ import org.apache.geode.cache.PartitionAttributes;
 import org.apache.geode.cache.PartitionAttributesFactory;
 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.DM;
 import org.apache.geode.internal.cache.AbstractRegion;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.TestObjectSizerImpl;
@@ -57,7 +80,10 @@ import org.apache.geode.internal.cache.lru.LRUStatistics;
 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.LogWriterUtils;
 import org.apache.geode.test.dunit.VM;
+import org.apache.geode.test.dunit.Wait;
+import org.apache.geode.test.dunit.WaitCriterion;
 import org.apache.geode.test.junit.categories.DistributedTest;
 
 /**
@@ -68,11 +94,8 @@ import org.apache.geode.test.junit.categories.DistributedTest;
  * Region Attributes data and stats are of proper value
  */
 @Category(DistributedTest.class)
-@SuppressWarnings("serial")
+@SuppressWarnings({ "serial", "unused" })
 public class RegionManagementDUnitTest extends ManagementTestBase {
-//public class RegionManagementDUnitTest extends JUnit4DistributedTestCase {
-
-  private static final int MAX_WAIT_MILLIS = 70 * 1000;
 
   private static final String REGION_NAME = "MANAGEMENT_TEST_REGION";
   private static final String PARTITIONED_REGION_NAME = "MANAGEMENT_PAR_REGION";
@@ -85,13 +108,16 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
   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;
 
-  // fields used in managedNode VMs
+  // field used in manager VM
   private static Region fixedPartitionedRegion;
 
-  // this.managerVM is VM 0
-  // managedNodes are VMs 1-3
+  private static final AtomicReference<List<Notification>> MEMBER_NOTIFICATIONS_REF = new AtomicReference<>();
+  private static final AtomicReference<List<Notification>> SYSTEM_NOTIFICATIONS_REF = new AtomicReference<>();
 
+  @Manager
   private VM managerVM;
+
+  @Member
   private VM[] memberVMs;
 
   @Before
@@ -106,9 +132,31 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
 
   @After
   public void after() throws Exception {
+    invokeInEveryVM(() -> MEMBER_NOTIFICATIONS_REF.set(null));
+    invokeInEveryVM(() -> SYSTEM_NOTIFICATIONS_REF.set(null));
+    disconnectAllFromDS_tmp();
+  }
+
+  private void createMembersAndThenManagers_tmp() throws Exception {
+    initManagement(false);
+  }
+
+  private void createManagersAndThenMembers_tmp() throws Exception {
+    initManagement(true);
+  }
+
+  private void disconnectAllFromDS_tmp() {
     disconnectAllFromDS();
   }
 
+  private ManagementService getManagementService_tmp() {
+    return getManagementService();
+  }
+
+  private Cache getCache_tmp() {
+    return getCache();
+  }
+
   /**
    * Tests all Region MBean related Management APIs
    * <p>
@@ -118,13 +166,13 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   @Test
   public void testDistributedRegion() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
 
     // Adding notification listener for remote cache memberVMs
-    addMemberNotificationListener(this.managerVM); // TODO: what does this do for us?
+    addMemberNotificationListener(this.managerVM, 3); // TODO: why?
 
     for (VM memberVM : this.memberVMs) {
-      createDistributedRegion(memberVM, REGION_NAME);
+      createDistributedRegion_tmp(memberVM, REGION_NAME);
       verifyReplicateRegionAfterCreate(memberVM);
     }
 
@@ -136,6 +184,8 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
     }
 
     verifyProxyCleanup(this.managerVM);
+
+    verifyMemberNotifications(this.managerVM, REGION_NAME, 3);
   }
 
   /**
@@ -147,13 +197,13 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   @Test
   public void testPartitionedRegion() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
 
     // Adding notification listener for remote cache memberVMs
-    addMemberNotificationListener(this.managerVM); // TODO: what does this do for us?
+    addMemberNotificationListener(this.managerVM, 3); // TODO: why?
 
     for (VM memberVM : this.memberVMs) {
-      createPartitionRegion(memberVM, PARTITIONED_REGION_NAME);
+      createPartitionRegion_tmp(memberVM, PARTITIONED_REGION_NAME);
       verifyPartitionRegionAfterCreate(memberVM);
     }
 
@@ -163,6 +213,8 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
       closeRegion(memberVM, PARTITIONED_REGION_PATH);
       verifyPartitionRegionAfterClose(memberVM);
     }
+
+    verifyMemberNotifications(this.managerVM, PARTITIONED_REGION_NAME, 3);
   }
 
   /**
@@ -174,10 +226,10 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   @Test
   public void testFixedPRRegionMBean() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
 
     // Adding notification listener for remote cache memberVMs
-    addMemberNotificationListener(this.managerVM); // TODO: what does this do for us?
+    addMemberNotificationListener(this.managerVM, 3); // TODO: why?
 
     int primaryIndex = 0;
     for (VM memberVM : this.memberVMs) {
@@ -187,11 +239,13 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
     }
 
 //    // TODO: Workaround for bug 46683. Reenable validation when bug is fixed.
-//    verifyRemoteFixedPartitionRegion(this.managerVM);
-//
-//    for (VM vm : this.memberVMs) {
-//      closeFixedPartitionRegion(vm);
-//    }
+    verifyRemoteFixedPartitionRegion(this.managerVM);
+
+    for (VM memberVM : this.memberVMs) {
+      closeRegion(memberVM, FIXED_PR_PATH);
+    }
+
+    verifyMemberNotifications(this.managerVM, FIXED_PR_PATH, 3);
   }
 
   /**
@@ -200,17 +254,17 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   @Test
   public void testRegionAggregate() throws Exception {
-    initManagement(true);
+    createManagersAndThenMembers_tmp();
 
     // Adding notification listener for remote cache memberVMs
-    addDistributedSystemNotificationListener(this.managerVM); // TODO: what does this do for us?
+    addSystemNotificationListener(this.managerVM); // TODO: why?
 
     for (VM memberVM : this.memberVMs) {
-      createDistributedRegion(memberVM, REGION_NAME);
+      createDistributedRegion_tmp(memberVM, REGION_NAME);
     }
 
     verifyDistributedMBean(this.managerVM, 3);
-    createDistributedRegion(this.managerVM, REGION_NAME);
+    createDistributedRegion_tmp(this.managerVM, REGION_NAME);
     verifyDistributedMBean(this.managerVM, 4);
 
     for (VM memberVM : this.memberVMs) {
@@ -222,23 +276,25 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
     verifyDistributedMBean(this.managerVM, 1);
     closeRegion(this.managerVM, REGION_PATH);
     verifyDistributedMBean(this.managerVM, 0);
+
+    verifySystemNotifications(this.managerVM, REGION_NAME, 3);
   }
 
   @Test
   public void testNavigationAPIS() throws Exception {
-    initManagement(true);
+    createManagersAndThenMembers_tmp();
 
     for (VM memberVM : this.memberVMs) {
-      createDistributedRegion(memberVM, REGION_NAME);
-      createPartitionRegion(memberVM, PARTITIONED_REGION_NAME);
+      createDistributedRegion_tmp(memberVM, REGION_NAME);
+      createPartitionRegion_tmp(memberVM, PARTITIONED_REGION_NAME);
     }
 
-    createDistributedRegion(this.managerVM, REGION_NAME);
-    createPartitionRegion(this.managerVM, PARTITIONED_REGION_NAME);
+    createDistributedRegion_tmp(this.managerVM, REGION_NAME);
+    createPartitionRegion_tmp(this.managerVM, PARTITIONED_REGION_NAME);
     List<String> memberIds = new ArrayList<>();
 
     for (VM memberVM : this.memberVMs) {
-      memberIds.add(getMemberId(memberVM));
+      memberIds.add(getDistributedMemberId_tmp(memberVM));
     }
 
     verifyNavigationApis(this.managerVM, memberIds);
@@ -249,14 +305,13 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
     closeRegion(this.managerVM, REGION_PATH);
   }
 
-
   @Test
   public void testSubRegions() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
 
     for (VM memberVM : this.memberVMs) {
-      createLocalRegion(memberVM, LOCAL_REGION_NAME);
-      createSubRegion(memberVM, LOCAL_REGION_NAME, LOCAL_SUB_REGION_NAME);
+      createLocalRegion_tmp(memberVM, LOCAL_REGION_NAME);
+      createSubRegion_tmp(memberVM, LOCAL_REGION_NAME, LOCAL_SUB_REGION_NAME);
     }
 
     for (VM memberVM : this.memberVMs) {
@@ -271,15 +326,14 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
 
   @Test
   public void testSpecialRegions() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
     createSpecialRegion(this.memberVMs[0]);
-    DistributedMember member = getMember(this.memberVMs[0]);
     verifySpecialRegion(this.managerVM);
   }
 
   @Test
   public void testLruStats() throws Exception {
-    initManagement(false);
+    createMembersAndThenManagers_tmp();
     for (VM memberVM : this.memberVMs) {
       createDiskRegion(memberVM);
     }
@@ -287,20 +341,16 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
   }
 
   private void closeRegion(final VM anyVM, final String regionPath) {
-    anyVM.invoke("closeRegion", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Region region = cache.getRegion(regionPath);
-      region.close();
-    });
+    anyVM.invoke("closeRegion", () -> getCache_tmp().getRegion(regionPath).close());
   }
 
   private void createSpecialRegion(final VM memberVM) throws Exception {
     memberVM.invoke("createSpecialRegion", () -> {
-      Cache cache = getCache();
       AttributesFactory attributesFactory = new AttributesFactory();
       attributesFactory.setValueConstraint(Portfolio.class);
       RegionAttributes regionAttributes = attributesFactory.create();
 
+      Cache cache = getCache_tmp();
       cache.createRegion("p-os", regionAttributes);
       cache.createRegion("p_os", regionAttributes);
     });
@@ -308,8 +358,8 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
 
   private void verifySpecialRegion(final VM managerVM) throws Exception {
     managerVM.invoke("verifySpecialRegion", () -> {
-      MBeanUtil.getDistributedRegionMbean("/p-os", 1); // TODO: do something?
-      MBeanUtil.getDistributedRegionMbean("/p_os", 1);
+      awaitDistributedRegionMXBean("/p-os", 1); // TODO: why?
+      awaitDistributedRegionMXBean("/p_os", 1);
     });
   }
 
@@ -319,99 +369,99 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
       factory.setScope(Scope.LOCAL);
       factory.setEvictionAttributes(EvictionAttributes.createLRUMemoryAttributes(20, new TestObjectSizerImpl(), EvictionAction.LOCAL_DESTROY));
 
-      Region region = getCache().createRegion(REGION_NAME, factory.create());
+      Region region = getCache_tmp().createRegion(REGION_NAME, factory.create());
 
       LRUStatistics lruStats = ((AbstractRegion) region).getEvictionController().getLRUHelper().getStats();
-      assertNotNull(lruStats);
+      assertThat(lruStats).isNotNull();
 
-      RegionMXBean regionMXBean = managementService.getLocalRegionMBean(REGION_PATH);
-      assertNotNull(regionMXBean);
+      RegionMXBean regionMXBean = getManagementService_tmp().getLocalRegionMBean(REGION_PATH);
+      assertThat(regionMXBean).isNotNull();
 
       int total;
-      for (total = 0; total < 10000; total++) { // TODO: what is this?
+      for (total = 0; total < 10000; total++) { // TODO: why so many?
         int[] array = new int[250];
         array[0] = total;
         region.put(new Integer(total), array);
       }
-      assertTrue(regionMXBean.getEntrySize() > 0);
+      assertThat(regionMXBean.getEntrySize()).isGreaterThan(0);
     });
   }
 
   private void verifyEntrySize(final VM managerVM, final int expectedMembers) throws Exception {
     managerVM.invoke("verifyEntrySize", () -> {
-      DistributedRegionMXBean distributedRegionMXBean = MBeanUtil.getDistributedRegionMbean(REGION_PATH, expectedMembers);
-      assertNotNull(distributedRegionMXBean);
-      assertTrue(distributedRegionMXBean.getEntrySize() > 0);
+      DistributedRegionMXBean distributedRegionMXBean = awaitDistributedRegionMXBean(REGION_PATH, expectedMembers);
+      assertThat(distributedRegionMXBean).isNotNull();
+      assertThat(distributedRegionMXBean.getEntrySize()).isGreaterThan(0);
     });
   }
 
   private void verifySubRegions(final VM memberVM, final String subRegionPath) throws Exception {
     memberVM.invoke("verifySubRegions", () -> {
-      RegionMXBean regionMXBean = managementService.getLocalRegionMBean(subRegionPath);
-      assertNotNull(regionMXBean);
+      RegionMXBean regionMXBean = getManagementService_tmp().getLocalRegionMBean(subRegionPath);
+      assertThat(regionMXBean).isNotNull();
     });
   }
 
   private void verifyNullRegions(final VM memberVM, final String subRegionPath) throws Exception {
     memberVM.invoke("verifyNullRegions", () -> {
-      RegionMXBean regionMXBean = managementService.getLocalRegionMBean(subRegionPath);
-      assertNull(regionMXBean);
+      RegionMXBean regionMXBean = getManagementService_tmp().getLocalRegionMBean(subRegionPath);
+      assertThat(regionMXBean).isNull();
     });
   }
 
   private void verifyNavigationApis(final VM managerVM, final List<String> memberIds) {
     managerVM.invoke("verifyNavigationApis", () -> {
-      ManagementService service = getManagementService();
-      assertNotNull(service.getDistributedSystemMXBean());
+      ManagementService service = getManagementService_tmp();
+      assertThat(service.getDistributedSystemMXBean()).isNotNull();
 
-      waitForAllMembers(4);
+      awaitMemberCount(4);
 
       DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
-      assertTrue(distributedSystemMXBean.listDistributedRegionObjectNames().length == 2);
+      assertThat(distributedSystemMXBean.listDistributedRegionObjectNames()).hasSize(2);
 
-      assertNotNull(distributedSystemMXBean.fetchDistributedRegionObjectName(PARTITIONED_REGION_PATH));
-      assertNotNull(distributedSystemMXBean.fetchDistributedRegionObjectName(REGION_PATH));
+      assertThat(distributedSystemMXBean.fetchDistributedRegionObjectName(PARTITIONED_REGION_PATH)).isNotNull();
+      assertThat(distributedSystemMXBean.fetchDistributedRegionObjectName(REGION_PATH)).isNotNull();
 
       ObjectName actualName = distributedSystemMXBean.fetchDistributedRegionObjectName(PARTITIONED_REGION_PATH);
       ObjectName expectedName = MBeanJMXAdapter.getDistributedRegionMbeanName(PARTITIONED_REGION_PATH);
-      assertEquals(expectedName, actualName);
+      assertThat(actualName).isEqualTo(expectedName);
 
       actualName = distributedSystemMXBean.fetchDistributedRegionObjectName(REGION_PATH);
       expectedName = MBeanJMXAdapter.getDistributedRegionMbeanName(REGION_PATH);
-      assertEquals(expectedName, actualName);
+      assertThat(actualName).isEqualTo(expectedName);
 
       for (String memberId : memberIds) {
-        ObjectName memberMBeanName = MBeanJMXAdapter.getMemberMBeanName(memberId);
-        waitForProxy(memberMBeanName, MemberMXBean.class);
+        ObjectName objectName = MBeanJMXAdapter.getMemberMBeanName(memberId);
+        awaitMemberMXBeanProxy(objectName);
 
-        ObjectName[] regionMBeanNames = distributedSystemMXBean.fetchRegionObjectNames(memberMBeanName);
-        assertNotNull(regionMBeanNames);
-        assertTrue(regionMBeanNames.length == 2);
+        ObjectName[] objectNames = distributedSystemMXBean.fetchRegionObjectNames(objectName);
+        assertThat(objectNames).isNotNull();
+        assertThat(objectNames).hasSize(2);
 
-        List<ObjectName> listOfNames = Arrays.asList(regionMBeanNames);
+        List<ObjectName> listOfNames = Arrays.asList(objectNames);
 
         expectedName = MBeanJMXAdapter.getRegionMBeanName(memberId, PARTITIONED_REGION_PATH);
-        assertTrue(listOfNames.contains(expectedName));
+        assertThat(listOfNames).contains(expectedName);
 
         expectedName = MBeanJMXAdapter.getRegionMBeanName(memberId, REGION_PATH);
-        assertTrue(listOfNames.contains(expectedName));
+        assertThat(listOfNames).contains(expectedName);
       }
 
       for (String memberId : memberIds) {
-        ObjectName memberMBeanName = MBeanJMXAdapter.getMemberMBeanName(memberId);
-        waitForProxy(memberMBeanName, MemberMXBean.class);
+        ObjectName objectName = MBeanJMXAdapter.getMemberMBeanName(memberId);
+        awaitMemberMXBeanProxy(objectName);
 
         expectedName = MBeanJMXAdapter.getRegionMBeanName(memberId, PARTITIONED_REGION_PATH);
-        waitForProxy(expectedName, RegionMXBean.class);
+        awaitRegionMXBeanProxy(expectedName);
 
         actualName = distributedSystemMXBean.fetchRegionObjectName(memberId, PARTITIONED_REGION_PATH);
-        assertEquals(expectedName, actualName);
+        assertThat(actualName).isEqualTo(expectedName);
 
         expectedName = MBeanJMXAdapter.getRegionMBeanName(memberId, REGION_PATH);
-        waitForProxy(expectedName, RegionMXBean.class);
+        awaitRegionMXBeanProxy(expectedName);
 
         actualName = distributedSystemMXBean.fetchRegionObjectName(memberId, REGION_PATH);
-        assertEquals(expectedName, actualName);
+        assertThat(actualName).isEqualTo(expectedName);
       }
     });
   }
@@ -442,88 +492,78 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
   /**
    * Invoked in member VMs
    */
-  private static void createFixedPartitionRegion(final List<FixedPartitionAttributes> fixedPartitionAttributesList) {
-    GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-    SystemManagementService service = (SystemManagementService) getManagementService();
+  private void createFixedPartitionRegion(final List<FixedPartitionAttributes> fixedPartitionAttributesList) {
+    SystemManagementService service = getSystemManagementService_tmp();
 
-    PartitionAttributesFactory paf = new PartitionAttributesFactory();
+    PartitionAttributesFactory partitionAttributesFactory = new PartitionAttributesFactory();
 
-    paf.setRedundantCopies(2).setTotalNumBuckets(12);
-    for (FixedPartitionAttributes fpa : fixedPartitionAttributesList) {
-      paf.addFixedPartitionAttributes(fpa);
+    partitionAttributesFactory.setRedundantCopies(2).setTotalNumBuckets(12);
+    for (FixedPartitionAttributes fixedPartitionAttributes : fixedPartitionAttributesList) {
+      partitionAttributesFactory.addFixedPartitionAttributes(fixedPartitionAttributes);
     }
-    paf.setPartitionResolver(new SingleHopQuarterPartitionResolver());
-
-    AttributesFactory attr = new AttributesFactory();
-    attr.setPartitionAttributes(paf.create());
-
-    fixedPartitionedRegion = cache.createRegion(FIXED_PR_NAME, attr.create());
-    assertNotNull(fixedPartitionedRegion);
+    partitionAttributesFactory.setPartitionResolver(new SingleHopQuarterPartitionResolver());
 
-    RegionMXBean bean = service.getLocalRegionMBean(FIXED_PR_PATH);
-    RegionAttributes regAttrs = fixedPartitionedRegion.getAttributes();
+    AttributesFactory attributesFactory = new AttributesFactory();
+    attributesFactory.setPartitionAttributes(partitionAttributesFactory.create());
 
-    PartitionAttributesData parData = bean.listPartitionAttributes();
+    fixedPartitionedRegion = getCache_tmp().createRegion(FIXED_PR_NAME, attributesFactory.create());
+    assertThat(fixedPartitionedRegion).isNotNull();
 
-    assertPartitionData(regAttrs, parData);
+    RegionMXBean regionMXBean = service.getLocalRegionMBean(FIXED_PR_PATH);
+    RegionAttributes regionAttributes = fixedPartitionedRegion.getAttributes();
 
-    FixedPartitionAttributesData[] fixedPrData = bean.listFixedPartitionAttributes();
+    PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes();
+    verifyPartitionData(regionAttributes, partitionAttributesData);
 
-    assertNotNull(fixedPrData);
+    FixedPartitionAttributesData[] fixedPartitionAttributesData = regionMXBean.listFixedPartitionAttributes();
+    assertThat(fixedPartitionAttributesData).isNotNull();
+    assertThat(fixedPartitionAttributesData).hasSize(3);
 
-    assertEquals(3, fixedPrData.length);
-    for (int i = 0; i < fixedPrData.length; i++) {
-      //LogWriterUtils.getLogWriter().info("<ExpectedString> Fixed PR Data is " + fixedPrData[i] + "</ExpectedString> ");
+    for (int i = 0; i < fixedPartitionAttributesData.length; i++) {
+      //LogWriterUtils.getLogWriter().info("<ExpectedString> Fixed PR Data is " + fixedPartitionAttributesData[i] + "</ExpectedString> ");
     }
   }
 
-  /**
-   * Invoked in manager VM
-   *
-   * TODO: unused method
-   */
-  private void verifyRemoteFixedPartitionRegion(final VM vm) throws Exception {
-    vm.invoke("Verify Partition region", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds();
-
-      for (DistributedMember member : otherMemberSet) {
-        RegionMXBean bean = MBeanUtil.getRegionMbeanProxy(member, FIXED_PR_PATH);
-
-        PartitionAttributesData data = bean.listPartitionAttributes();
-        assertNotNull(data);
-
-        FixedPartitionAttributesData[] fixedPrData = bean.listFixedPartitionAttributes();
-        assertNotNull(fixedPrData);
-        assertEquals(3, fixedPrData.length);
-
-        for (int i = 0; i < fixedPrData.length; i++) {
-          //LogWriterUtils.getLogWriter().info("<ExpectedString> Remote PR Data is " + fixedPrData[i] + "</ExpectedString> ");
-        }
-      }
-    });
-  }
-
-  private void addMemberNotificationListener(final VM managerVM) {
+//  /**
+//   * Invoked in manager VM
+//   */
+//  private void verifyRemoteFixedPartitionRegion(final VM vm) throws Exception {
+//    vm.invoke("Verify Partition region", () -> {
+//      Set<DistributedMember> otherMemberSet = getDistributionManager_tmp().getOtherNormalDistributionManagerIds();
+//
+//      for (DistributedMember member : otherMemberSet) {
+//        RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, FIXED_PR_PATH);
+//
+//        PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes();
+//        assertNotNull(partitionAttributesData);
+//
+//        FixedPartitionAttributesData[] fixedPartitionAttributesData = regionMXBean.listFixedPartitionAttributes();
+//        assertNotNull(fixedPartitionAttributesData);
+//        assertEquals(3, fixedPartitionAttributesData.length);
+//
+//        for (int i = 0; i < fixedPartitionAttributesData.length; i++) {
+//          //LogWriterUtils.getLogWriter().info("<ExpectedString> Remote PR Data is " + fixedPartitionAttributesData[i] + "</ExpectedString> ");
+//        }
+//      }
+//    });
+//  }
+
+  private void addMemberNotificationListener(final VM managerVM, final int expectedMembers) {
     managerVM.invoke("addMemberNotificationListener", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds();
+      Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp();
+      assertThat(otherMemberSet).hasSize(expectedMembers);
 
-      SystemManagementService service = (SystemManagementService) getManagementService();
+      SystemManagementService service = getSystemManagementService_tmp();
 
-      for (DistributedMember member : otherMemberSet) {
-        MemberNotificationListener listener = new MemberNotificationListener();
-        ObjectName memberMBeanName = service.getMemberMBeanName(member);
-        Set<ObjectName> names = service.queryMBeanNames(member);
-        if (names != null) {
-          for (ObjectName name : names) {
-            //LogWriterUtils.getLogWriter().info("<ExpectedString> ObjectNames arr" + name + "</ExpectedString> ");
-          }
-        }
+      List<Notification> notifications = new ArrayList<>();
+      MEMBER_NOTIFICATIONS_REF.set(notifications);
 
-        waitForProxy(memberMBeanName, MemberMXBean.class);
+      for (DistributedMember member : otherMemberSet) {
+        MemberNotificationListener listener = new MemberNotificationListener(notifications);
+        ObjectName objectName = service.getMemberMBeanName(member);
+        awaitMemberMXBeanProxy(objectName);
 
-        ManagementFactory.getPlatformMBeanServer().addNotificationListener(memberMBeanName, listener, null, null);
+        ManagementFactory.getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null);
       }
     });
   }
@@ -534,187 +574,250 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    * MemberMBeans Hence Region created/destroyed should be visible to this
    * listener
    */
-  private void addDistributedSystemNotificationListener(final VM managerVM) {
-    managerVM.invoke("addDistributedSystemNotificationListener", () -> {
-      DistributedSystemNotificationListener listener = new DistributedSystemNotificationListener();
-      ObjectName systemMBeanName = MBeanJMXAdapter.getDistributedSystemName();
-      ManagementFactory.getPlatformMBeanServer().addNotificationListener(systemMBeanName, listener, null, null);
+  private void addSystemNotificationListener(final VM managerVM) {
+    managerVM.invoke("addSystemNotificationListener", () -> {
+      awaitDistributedSystemMXBean();
+
+      List<Notification> notifications = new ArrayList<>();
+      SYSTEM_NOTIFICATIONS_REF.set(notifications);
+
+      DistributedSystemNotificationListener listener = new DistributedSystemNotificationListener(notifications);
+      ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName();
+      ManagementFactory.getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null);
+    });
+  }
+
+  private void verifyMemberNotifications(final VM managerVM, final String regionName, final int expectedMembers) {
+    managerVM.invoke("verifyMemberNotifications", () -> {
+      assertThat(MEMBER_NOTIFICATIONS_REF.get()).isNotNull();
+      assertThat(MEMBER_NOTIFICATIONS_REF.get()).hasSize(expectedMembers * 2);
+
+      int regionCreatedCount = 0;
+      int regionDestroyedCount = 0;
+      for (Notification notification : MEMBER_NOTIFICATIONS_REF.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(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]]>
+
+  private void verifySystemNotifications(final VM managerVM, final String regionName, final int expectedMembers) {
+    managerVM.invoke("verifySystemNotifications", () -> {
+      assertThat(SYSTEM_NOTIFICATIONS_REF.get()).isNotNull();
+      assertThat(SYSTEM_NOTIFICATIONS_REF.get()).hasSize(expectedMembers + 2); // 2 for the manager
+
+
+      int regionCreatedCount = 0;
+      int regionDestroyedCount = 0;
+      for (Notification notification : SYSTEM_NOTIFICATIONS_REF.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 verifyProxyCleanup(final VM managerVM) {
     managerVM.invoke("verifyProxyCleanup", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds();
-
-      final SystemManagementService service = (SystemManagementService) getManagementService();
+      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).atMost(MAX_WAIT_MILLIS, TimeUnit.MILLISECONDS).until(() -> assertNull(service.getMBeanProxy(service.getRegionMBeanName(member, REGION_PATH), RegionMXBean.class)));
+        await(alias).until(() -> assertThat(service.getMBeanProxy(service.getRegionMBeanName(member, REGION_PATH), RegionMXBean.class)).isNull());
       }
     });
   }
 
   private void verifyRemoteDistributedRegion(final VM managerVM, final int expectedMembers) throws Exception {
     managerVM.invoke("verifyRemoteDistributedRegion", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds();
+      Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp();
+      assertThat(otherMemberSet).hasSize(expectedMembers);
 
       for (DistributedMember member : otherMemberSet) {
-        RegionMXBean bean = MBeanUtil.getRegionMbeanProxy(member, REGION_PATH);
-        assertNotNull(bean);
+        RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, REGION_PATH);
 
-        RegionAttributesData data = bean.listRegionAttributes();
-        assertNotNull(data);
+        RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes();
+        assertThat(regionAttributesData).isNotNull();
 
-        MembershipAttributesData membershipData = bean.listMembershipAttributes();
-        EvictionAttributesData evictionData = bean.listEvictionAttributes();
-        assertNotNull(membershipData);
-        assertNotNull(evictionData);
+        MembershipAttributesData membershipAttributesData = regionMXBean.listMembershipAttributes();
+        assertThat(membershipAttributesData).isNotNull();
 
-        //LogWriterUtils.getLogWriter().info("<ExpectedString> Membership Data is " + membershipData.toString() + "</ExpectedString> ");
-        //LogWriterUtils.getLogWriter().info("<ExpectedString> Eviction Data is " + membershipData.toString() + "</ExpectedString> ");
+        EvictionAttributesData evictionAttributesData = regionMXBean.listEvictionAttributes();
+        assertThat(evictionAttributesData).isNotNull();
       }
 
-      DistributedRegionMXBean bean = null;
-      bean = MBeanUtil.getDistributedRegionMbean(REGION_PATH, expectedMembers);
+      DistributedRegionMXBean distributedRegionMXBean = awaitDistributedRegionMXBean(REGION_PATH, expectedMembers);
 
-      assertNotNull(bean);
-      assertEquals(REGION_PATH, bean.getFullPath());
+      assertThat(distributedRegionMXBean).isNotNull();
+      assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(REGION_PATH);
     });
   }
 
   private void verifyDistributedMBean(final VM managerVM, final int expectedMembers) {
     managerVM.invoke("verifyDistributedMBean", () -> {
-      final ManagementService service = getManagementService();
-
       if (expectedMembers == 0) {
+        ManagementService service = getManagementService_tmp();
         String alias = "Waiting for the proxy to get deleted at managing node";
-        await(alias).atMost(MAX_WAIT_MILLIS, TimeUnit.MILLISECONDS).until(() -> assertNull(service.getDistributedRegionMXBean(REGION_PATH)));
+        await(alias).until(() -> assertThat(service.getDistributedRegionMXBean(REGION_PATH)).isNull());
         return;
       }
 
-      DistributedRegionMXBean bean = MBeanUtil.getDistributedRegionMbean(REGION_PATH, expectedMembers);
+      DistributedRegionMXBean distributedRegionMXBean = awaitDistributedRegionMXBean(REGION_PATH, expectedMembers);
 
-      assertNotNull(bean);
-      assertEquals(REGION_PATH, bean.getFullPath());
-      assertEquals(expectedMembers, bean.getMemberCount());
-      assertEquals(expectedMembers, bean.getMembers().length);
+      assertThat(distributedRegionMXBean.getFullPath()).isEqualTo(REGION_PATH);
+      assertThat(distributedRegionMXBean.getMemberCount()).isEqualTo(expectedMembers);
+      assertThat(distributedRegionMXBean.getMembers()).hasSize(expectedMembers);
 
       // Check Stats related Data
-      //LogWriterUtils.getLogWriter().info("<ExpectedString> CacheListenerCallsAvgLatency is " + bean.getCacheListenerCallsAvgLatency() + "</ExpectedString> ");
-      //LogWriterUtils.getLogWriter().info("<ExpectedString> CacheWriterCallsAvgLatency is " + bean.getCacheWriterCallsAvgLatency() + "</ExpectedString> ");
-      //LogWriterUtils.getLogWriter().info("<ExpectedString> CreatesRate is " + bean.getCreatesRate() + "</ExpectedString> ");
+      //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) throws Exception {
     managerVM.invoke("verifyRemotePartitionRegion", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Set<DistributedMember> otherMemberSet = cache.getDistributionManager().getOtherNormalDistributionManagerIds();
+      Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp();
 
       for (DistributedMember member : otherMemberSet) {
-        RegionMXBean regionMXBean = MBeanUtil.getRegionMbeanProxy(member, PARTITIONED_REGION_PATH);
+        RegionMXBean regionMXBean = awaitRegionMXBeanProxy(member, PARTITIONED_REGION_PATH);
         PartitionAttributesData partitionAttributesData = regionMXBean.listPartitionAttributes();
-        assertNotNull(partitionAttributesData);
+        assertThat(partitionAttributesData).isNotNull();
       }
 
-      ManagementService service = getManagementService();
+      ManagementService service = getManagementService_tmp();
       DistributedRegionMXBean distributedRegionMXBean = service.getDistributedRegionMXBean(PARTITIONED_REGION_PATH);
-      assertEquals(3, distributedRegionMXBean.getMembers().length);
+      assertThat(distributedRegionMXBean.getMembers()).hasSize(3);
     });
   }
 
   private void verifyReplicateRegionAfterCreate(final VM memberVM) {
     memberVM.invoke("verifyReplicateRegionAfterCreate", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
+      Cache cache = getCache_tmp();
+
       String memberId = MBeanJMXAdapter.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember());
-      ObjectName memberMBeanName = ObjectName.getInstance("GemFire:type=Member,member=" + memberId);
+      ObjectName objectName = ObjectName.getInstance("GemFire:type=Member,member=" + memberId);
 
-      MemberNotificationListener listener = new MemberNotificationListener();
-      ManagementFactory.getPlatformMBeanServer().addNotificationListener(memberMBeanName, 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 = (SystemManagementService) getManagementService();
+      SystemManagementService service = getSystemManagementService_tmp();
       RegionMXBean regionMXBean = service.getLocalRegionMBean(REGION_PATH);
-      assertNotNull(regionMXBean);
+      assertThat(regionMXBean).isNotNull();
 
       Region region = cache.getRegion(REGION_PATH);
       RegionAttributes regionAttributes = region.getAttributes();
 
       RegionAttributesData regionAttributesData = regionMXBean.listRegionAttributes();
-      assertRegionAttributes(regionAttributes, regionAttributesData);
+      verifyRegionAttributes(regionAttributes, regionAttributesData);
 
       MembershipAttributesData membershipData = regionMXBean.listMembershipAttributes();
-      assertNotNull(membershipData);
+      assertThat(membershipData).isNotNull();
 
       EvictionAttributesData evictionData = regionMXBean.listEvictionAttributes();
-      assertNotNull(evictionData);
+      assertThat(evictionData).isNotNull();
     });
   }
 
   private void verifyPartitionRegionAfterCreate(final VM memberVM) {
     memberVM.invoke("verifyPartitionRegionAfterCreate", () -> {
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      Region partitionedRegion = cache.getRegion(PARTITIONED_REGION_PATH);
+      Region region = getCache_tmp().getRegion(PARTITIONED_REGION_PATH);
 
-      SystemManagementService service = (SystemManagementService) getManagementService();
-      RegionMXBean regionMBean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH);
+      SystemManagementService service = getSystemManagementService_tmp();
+      RegionMXBean regionMXBean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH);
 
-      assertPartitionData(partitionedRegion.getAttributes(), regionMBean.listPartitionAttributes());
+      verifyPartitionData(region.getAttributes(), regionMXBean.listPartitionAttributes());
     });
   }
 
   private void verifyReplicatedRegionAfterClose(final VM memberVM) {
     memberVM.invoke("verifyReplicatedRegionAfterClose", () -> {
-      SystemManagementService service = (SystemManagementService) getManagementService();
+      SystemManagementService service = getSystemManagementService_tmp();
       RegionMXBean regionMXBean = service.getLocalRegionMBean(REGION_PATH);
-      assertNull(regionMXBean);
+      assertThat(regionMXBean).isNull();
 
-      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
-      ObjectName regionObjectName = service.getRegionMBeanName(cache.getDistributedSystem().getDistributedMember(), REGION_PATH);
-      assertNull(service.getLocalManager().getManagementResourceRepo().getEntryFromLocalMonitoringRegion(regionObjectName));
+      ObjectName objectName = service.getRegionMBeanName(getCache_tmp().getDistributedSystem().getDistributedMember(), REGION_PATH);
+      assertThat(service.getLocalManager().getManagementResourceRepo().getEntryFromLocalMonitoringRegion(objectName)).isNull();
     });
   }
 
   private void verifyPartitionRegionAfterClose(final VM memberVM) {
     memberVM.invoke("verifyPartitionRegionAfterClose", () -> {
-      ManagementService service = getManagementService();
-      RegionMXBean bean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH);
-      assertNull(bean);
+      ManagementService service = getManagementService_tmp();
+      RegionMXBean regionMXBean = service.getLocalRegionMBean(PARTITIONED_REGION_PATH);
+      assertThat(regionMXBean).isNull();
     });
   }
 
   /**
    * Invoked in member VMs
    */
-  private static void assertPartitionData(final RegionAttributes expectedRegionAttributes, final PartitionAttributesData partitionAttributesData) {
+  private void verifyPartitionData(final RegionAttributes expectedRegionAttributes, final PartitionAttributesData partitionAttributesData) {
     PartitionAttributes expectedPartitionAttributes = expectedRegionAttributes.getPartitionAttributes();
 
-    assertEquals(expectedPartitionAttributes.getRedundantCopies(), partitionAttributesData.getRedundantCopies());
+    assertThat(partitionAttributesData.getRedundantCopies()).isEqualTo(expectedPartitionAttributes.getRedundantCopies());
 
-    assertEquals(expectedPartitionAttributes.getTotalMaxMemory(), partitionAttributesData.getTotalMaxMemory());
+    assertThat(partitionAttributesData.getTotalMaxMemory()).isEqualTo(expectedPartitionAttributes.getTotalMaxMemory());
 
     // Total number of buckets for whole region
-    assertEquals(expectedPartitionAttributes.getTotalNumBuckets(), partitionAttributesData.getTotalNumBuckets());
+    assertThat(partitionAttributesData.getTotalNumBuckets()).isEqualTo(expectedPartitionAttributes.getTotalNumBuckets());
 
-    assertEquals(expectedPartitionAttributes.getLocalMaxMemory(), partitionAttributesData.getLocalMaxMemory());
+    assertThat(partitionAttributesData.getLocalMaxMemory()).isEqualTo(expectedPartitionAttributes.getLocalMaxMemory());
 
-    assertEquals(expectedPartitionAttributes.getColocatedWith(), partitionAttributesData.getColocatedWith());
+    assertThat(partitionAttributesData.getColocatedWith()).isEqualTo(expectedPartitionAttributes.getColocatedWith());
 
     String partitionResolver = null;
     if (expectedPartitionAttributes.getPartitionResolver() != null) { // TODO: these conditionals should be deterministic
       partitionResolver = expectedPartitionAttributes.getPartitionResolver().getName();
     }
-    assertEquals(partitionResolver, partitionAttributesData.getPartitionResolver());
+    assertThat(partitionAttributesData.getPartitionResolver()).isEqualTo(partitionResolver);
 
-    assertEquals(expectedPartitionAttributes.getRecoveryDelay(), partitionAttributesData.getRecoveryDelay());
+    assertThat(partitionAttributesData.getRecoveryDelay()).isEqualTo(expectedPartitionAttributes.getRecoveryDelay());
 
-    assertEquals(expectedPartitionAttributes.getStartupRecoveryDelay(), partitionAttributesData.getStartupRecoveryDelay());
+    assertThat(partitionAttributesData.getStartupRecoveryDelay()).isEqualTo(expectedPartitionAttributes.getStartupRecoveryDelay());
 
     if (expectedPartitionAttributes.getPartitionListeners() != null) {
       for (int i = 0; i < expectedPartitionAttributes.getPartitionListeners().length; i++) {
-        assertEquals((expectedPartitionAttributes.getPartitionListeners())[i].getClass().getCanonicalName(), partitionAttributesData.getPartitionListeners()[i]);
+        //assertEquals((expectedPartitionAttributes.getPartitionListeners())[i].getClass().getCanonicalName(), partitionAttributesData.getPartitionListeners()[i]);
+        assertThat(partitionAttributesData.getPartitionListeners()[i])
+          .isEqualTo(expectedPartitionAttributes.getPartitionListeners()[i].getClass().getCanonicalName());
+
       }
     }
   }
@@ -722,104 +825,255 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
   /**
    * Invoked in member VMs
    */
-  private static void assertRegionAttributes(final RegionAttributes regionAttributes, final RegionAttributesData regionAttributesData) {
+  private void verifyRegionAttributes(final RegionAttributes regionAttributes, final RegionAttributesData regionAttributesData) {
     String compressorClassName = null;
     if (regionAttributes.getCompressor() != null) { // TODO: these conditionals should be deterministic
       compressorClassName = regionAttributes.getCompressor().getClass().getCanonicalName();
     }
-    assertEquals(compressorClassName, regionAttributesData.getCompressorClassName());
+    assertThat(regionAttributesData.getCompressorClassName()).isEqualTo(compressorClassName);
 
     String cacheLoaderClassName = null;
     if (regionAttributes.getCacheLoader() != null) {
       cacheLoaderClassName = regionAttributes.getCacheLoader().getClass().getCanonicalName();
     }
-    assertEquals(cacheLoaderClassName, regionAttributesData.getCacheLoaderClassName());
+    assertThat(regionAttributesData.getCacheLoaderClassName()).isEqualTo(cacheLoaderClassName);
 
     String cacheWriteClassName = null;
     if (regionAttributes.getCacheWriter() != null) {
       cacheWriteClassName = regionAttributes.getCacheWriter().getClass().getCanonicalName();
     }
-    assertEquals(cacheWriteClassName, regionAttributesData.getCacheWriterClassName());
+    assertThat(regionAttributesData.getCacheWriterClassName()).isEqualTo(cacheWriteClassName);
 
     String keyConstraintClassName = null;
     if (regionAttributes.getKeyConstraint() != null) {
       keyConstraintClassName = regionAttributes.getKeyConstraint().getName();
     }
-    assertEquals(keyConstraintClassName, regionAttributesData.getKeyConstraintClassName());
+    assertThat(regionAttributesData.getKeyConstraintClassName()).isEqualTo(keyConstraintClassName);
 
     String valueContstaintClassName = null;
     if (regionAttributes.getValueConstraint() != null) {
       valueContstaintClassName = regionAttributes.getValueConstraint().getName();
     }
-    assertEquals(valueContstaintClassName, regionAttributesData.getValueConstraintClassName());
+    assertThat(regionAttributesData.getValueConstraintClassName()).isEqualTo(valueContstaintClassName);
 
     CacheListener[] listeners = regionAttributes.getCacheListeners();
     if (listeners != null) {
       String[] value = regionAttributesData.getCacheListeners();
       for (int i = 0; i < listeners.length; i++) {
-        assertEquals(value[i], listeners[i].getClass().getName());
+        assertThat(listeners[i].getClass().getName()).isEqualTo(value[i]);
       }
     }
 
-    assertEquals(regionAttributes.getRegionTimeToLive().getTimeout(), regionAttributesData.getRegionTimeToLive());
+    assertThat(regionAttributesData.getRegionTimeToLive()).isEqualTo(regionAttributes.getRegionTimeToLive().getTimeout());
 
-    assertEquals(regionAttributes.getRegionIdleTimeout().getTimeout(), regionAttributesData.getRegionIdleTimeout());
+    assertThat(regionAttributesData.getRegionIdleTimeout()).isEqualTo(regionAttributes.getRegionIdleTimeout().getTimeout());
 
-    assertEquals(regionAttributes.getEntryTimeToLive().getTimeout(), regionAttributesData.getEntryTimeToLive());
+    assertThat(regionAttributesData.getEntryTimeToLive()).isEqualTo(regionAttributes.getEntryTimeToLive().getTimeout());
 
-    assertEquals(regionAttributes.getEntryIdleTimeout().getTimeout(), regionAttributesData.getEntryIdleTimeout());
+    assertThat(regionAttributesData.getEntryIdleTimeout()).isEqualTo(regionAttributes.getEntryIdleTimeout().getTimeout());
 
     String customEntryTimeToLive = null;
     Object o1 = regionAttributes.getCustomEntryTimeToLive();
     if (o1 != null) {
       customEntryTimeToLive = o1.toString();
     }
-    assertEquals(customEntryTimeToLive, regionAttributesData.getCustomEntryTimeToLive());
+    assertThat(regionAttributesData.getCustomEntryTimeToLive()).isEqualTo(customEntryTimeToLive);
 
     String customEntryIdleTimeout = null;
     Object o2 = regionAttributes.getCustomEntryIdleTimeout();
     if (o2 != null) {
       customEntryIdleTimeout = o2.toString();
     }
-    assertEquals(customEntryIdleTimeout, regionAttributesData.getCustomEntryIdleTimeout());
+    assertThat(regionAttributesData.getCustomEntryIdleTimeout()).isEqualTo(customEntryIdleTimeout);
 
-    assertEquals(regionAttributes.getIgnoreJTA(), regionAttributesData.isIgnoreJTA());
+    assertThat(regionAttributesData.isIgnoreJTA()).isEqualTo(regionAttributes.getIgnoreJTA());
 
-    assertEquals(regionAttributes.getDataPolicy().toString(), regionAttributesData.getDataPolicy());
+    assertThat(regionAttributesData.getDataPolicy()).isEqualTo(regionAttributes.getDataPolicy().toString());
 
-    assertEquals(regionAttributes.getScope().toString(), regionAttributesData.getScope());
+    assertThat(regionAttributesData.getScope()).isEqualTo(regionAttributes.getScope().toString());
 
-    assertEquals(regionAttributes.getInitialCapacity(), regionAttributesData.getInitialCapacity());
+    assertThat(regionAttributesData.getInitialCapacity()).isEqualTo(regionAttributes.getInitialCapacity());
 
-    assertEquals(regionAttributes.getLoadFactor(), regionAttributesData.getLoadFactor(), 0);
+    assertThat(regionAttributesData.getLoadFactor()).isEqualTo(regionAttributes.getLoadFactor());
 
-    assertEquals(regionAttributes.isLockGrantor(), regionAttributesData.isLockGrantor());
+    assertThat(regionAttributesData.isLockGrantor()).isEqualTo(regionAttributes.isLockGrantor());
 
-    assertEquals(regionAttributes.getMulticastEnabled(), regionAttributesData.isMulticastEnabled());
+    assertThat(regionAttributesData.isMulticastEnabled()).isEqualTo(regionAttributes.getMulticastEnabled());
 
-    assertEquals(regionAttributes.getConcurrencyLevel(), regionAttributesData.getConcurrencyLevel());
+    assertThat(regionAttributesData.getConcurrencyLevel()).isEqualTo(regionAttributes.getConcurrencyLevel());
 
-    assertEquals(regionAttributes.getIndexMaintenanceSynchronous(), regionAttributesData.isIndexMaintenanceSynchronous());
+    assertThat(regionAttributesData.isIndexMaintenanceSynchronous()).isEqualTo(regionAttributes.getIndexMaintenanceSynchronous());
 
-    assertEquals(regionAttributes.getStatisticsEnabled(), regionAttributesData.isStatisticsEnabled());
+    assertThat(regionAttributesData.isStatisticsEnabled()).isEqualTo(regionAttributes.getStatisticsEnabled());
 
-    assertEquals(regionAttributes.getEnableSubscriptionConflation(), regionAttributesData.isSubscriptionConflationEnabled());
+    assertThat(regionAttributesData.isSubscriptionConflationEnabled()).isEqualTo(regionAttributes.getEnableSubscriptionConflation());
 
-    assertEquals(regionAttributes.getEnableAsyncConflation(), regionAttributesData.isAsyncConflationEnabled());
+    assertThat(regionAttributesData.isAsyncConflationEnabled()).isEqualTo(regionAttributes.getEnableAsyncConflation());
 
-    assertEquals(regionAttributes.getPoolName(), regionAttributesData.getPoolName());
+    assertThat(regionAttributesData.getPoolName()).isEqualTo(regionAttributes.getPoolName());
 
-    assertEquals(regionAttributes.getCloningEnabled(), regionAttributesData.isCloningEnabled());
+    assertThat(regionAttributesData.isCloningEnabled()).isEqualTo(regionAttributes.getCloningEnabled());
 
-    assertEquals(regionAttributes.getDiskStoreName(), regionAttributesData.getDiskStoreName());
+    assertThat(regionAttributesData.getDiskStoreName()).isEqualTo(regionAttributes.getDiskStoreName());
 
     String interestPolicy = null;
     if (regionAttributes.getSubscriptionAttributes() != null) {
       interestPolicy = regionAttributes.getSubscriptionAttributes().getInterestPolicy().toString();
     }
-    assertEquals(interestPolicy, regionAttributesData.getInterestPolicy());
+    assertThat(regionAttributesData.getInterestPolicy()).isEqualTo(interestPolicy);
+
+    assertThat(regionAttributesData.isDiskSynchronous()).isEqualTo(regionAttributes.isDiskSynchronous());
+  }
+
+  private void verifyRemoteFixedPartitionRegion(final VM managerVM) throws Exception {
+    managerVM.invoke("Verify Partition region", () -> {
+      Set<DistributedMember> otherMemberSet = getOtherNormalMembers_tmp();
+
+      for (DistributedMember member : otherMemberSet) {
+        RegionMXBean bean = awaitRegionMXBeanProxy(member, FIXED_PR_PATH);
+
+        PartitionAttributesData data = bean.listPartitionAttributes();
+        assertThat(data).isNotNull();
+
+        FixedPartitionAttributesData[] fixedPrData = bean.listFixedPartitionAttributes();
+        assertThat(fixedPrData).isNotNull();
+        assertThat(fixedPrData).hasSize(3);
+
+        for (int i = 0; i < fixedPrData.length; i++) {
+          //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_tmp().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_tmp().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_tmp().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_tmp().getRegion(parentRegionPath);
+      region.createSubregion(subregionName, region.getAttributes());
+    });
+  }
+
+  private String getDistributedMemberId_tmp(final VM vm) {
+    return vm.invoke("getMemberId", () -> getCache_tmp().getDistributedSystem().getDistributedMember().getId());
+  }
+
+  private DistributedMember getDistributedMember_tmp(final VM anyVM) {
+    return anyVM.invoke("getDistributedMember_tmp", () -> getCache_tmp().getDistributedSystem().getDistributedMember());
+  }
+
+  private SystemManagementService getSystemManagementService_tmp() {
+    return (SystemManagementService) getManagementService_tmp();
+  }
+
+  private DM getDistributionManager_tmp() {
+    return ((GemFireCacheImpl)getCache_tmp()).getDistributionManager();
+  }
+
+  private DistributedMember getDistributedMember_tmp() {
+    return getCache_tmp().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().until(() -> assertThat(distributedSystemMXBean.getMemberCount()).isEqualTo(expectedCount));
+  }
+
+  private DistributedRegionMXBean awaitDistributedRegionMXBean(final String name) {
+    SystemManagementService service = getSystemManagementService_tmp();
+
+    await().until(() -> assertThat(service.getDistributedRegionMXBean(name)).isNotNull());
+
+    return service.getDistributedRegionMXBean(name);
+  }
+
+  private DistributedRegionMXBean awaitDistributedRegionMXBean(final String name, final int memberCount) {
+    SystemManagementService service = getSystemManagementService_tmp();
+
+    await().until(() -> assertThat(service.getDistributedRegionMXBean(name)).isNotNull());
+    await().until(() -> 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).until(() -> assertThat(service.getMBeanProxy(objectName, RegionMXBean.class)).isNotNull());
+
+    return service.getMBeanProxy(objectName, RegionMXBean.class);
+  }
+
+  private RegionMXBean awaitRegionMXBeanProxy(final ObjectName objectName) {
+    SystemManagementService service = getSystemManagementService_tmp();
+
+    await().until(() -> 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;
 
-    assertEquals(regionAttributes.isDiskSynchronous(), regionAttributesData.isDiskSynchronous());
+    await(alias).until(() -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull());
+
+    return service.getMBeanProxy(objectName, MemberMXBean.class);
+  }
+
+  private MemberMXBean awaitMemberMXBeanProxy(final ObjectName objectName) {
+    SystemManagementService service = getSystemManagementService_tmp();
+    await().until(() -> assertThat(service.getMBeanProxy(objectName, MemberMXBean.class)).isNotNull());
+    return service.getMBeanProxy(objectName, MemberMXBean.class);
+  }
+
+  private DistributedSystemMXBean awaitDistributedSystemMXBean() {
+    ManagementService service = getSystemManagementService_tmp();
+
+    await().until(() -> assertThat(service.getDistributedSystemMXBean()).isNotNull());
+
+    return service.getDistributedSystemMXBean();
+  }
+
+  private ConditionFactory await() {
+    return Awaitility.await().atMost(2, MINUTES);
+  }
+
+  private ConditionFactory await(final String alias) {
+    return Awaitility.await(alias).atMost(2, MINUTES);
   }
 
   /**
@@ -829,11 +1083,21 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   private static class MemberNotificationListener implements NotificationListener {
 
+    private final List<Notification> notifications;
+
+    private MemberNotificationListener(List<Notification> notifications) {
+      this.notifications = notifications;
+    }
+
     @Override
     public void handleNotification(final Notification notification, final Object handback) {
-      assertNotNull(notification);
-      assertTrue(notification.getType().equals(JMXNotificationType.REGION_CREATED) ||
-                 notification.getType().equals(JMXNotificationType.REGION_CLOSED));
+      assertThat(notification).isNotNull();
+
+      assertThat(JMXNotificationType.REGION_CREATED.equals(notification.getType()) ||
+                 JMXNotificationType.REGION_CLOSED.equals(notification.getType())).isTrue();
+
+      notifications.add(notification);
+
       // TODO: add better validation
       //LogWriterUtils.getLogWriter().info("<ExpectedString> Member Level Notifications" + notification + "</ExpectedString> ");
     }
@@ -846,9 +1110,18 @@ public class RegionManagementDUnitTest extends ManagementTestBase {
    */
   private static class DistributedSystemNotificationListener implements NotificationListener {
 
+    private final List<Notification> notifications;
+
+    private DistributedSystemNotificationListener(List<Notification> notifications) {
+      this.notifications = notifications;
+    }
+
     @Override
     public void handleNotification(final Notification notification, final Object handback) {
-      assertNotNull(notification);
+      assertThat(notification).isNotNull();
+
+      notifications.add(notification);
+
       // TODO: add something that will be validated
       //LogWriterUtils.getLogWriter().info("<ExpectedString> Distributed System Notifications" + notification + "</ExpectedString> ");
     }