You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2020/01/27 18:57:36 UTC

[geode] branch feature/GEODE-7742 created (now 96f3446)

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a change to branch feature/GEODE-7742
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at 96f3446  GEODE-7742: move existing membership unit/integration tests to geode-membership

This branch includes the following new commits:

     new 96f3446  GEODE-7742: move existing membership unit/integration tests to geode-membership

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-7742: move existing membership unit/integration tests to geode-membership

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-7742
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 96f344619c568b0b9b0f3e243c48813e870f772d
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Jan 27 10:51:38 2020 -0800

    GEODE-7742: move existing membership unit/integration tests to geode-membership
    
    Moved all membership integration tests that do not rely on
    AvailablePortHelper to the geode-membership sub-project.
    
    There don't appear to be any regular unit tests for membership - all are
    integration and dunit tests.  DUnit tests won't be moved to the
    membership sub-project.
    
    Remaining integration tests are:
    GMSHealthMonitorJUnitTest
    GMSJoinLeaveJUnitTest
    GMSLocatorIntegrationTest
    GMSLocatorRecoveryIntegrationTest
    JGroupsMessengerJUnitTest
    
    These need to be moved to geode-membership after required
    AvailablePortHelper and SocketCreator functionality has been moved out
    of geode-core into a sub-project used by geode-membership.
---
 .../membership/InternalDistributedMember.java      |   5 +
 geode-membership/build.gradle                      |   5 +-
 .../membership/GMSMembershipViewJUnitTest.java     |  23 +--
 .../MembershipDependenciesJUnitTest.java           |   4 +
 .../api/MemberIdentifierFactoryImplTest.java       |   0
 .../membership/api/MembershipAPIArchUnitTest.java  |   4 +-
 .../membership/gms/GMSMemberDataJUnitTest.java     |   0
 .../membership/gms/GMSMembershipJUnitTest.java     | 156 +++++++++++++--------
 .../internal/membership/gms/GMSUtilTest.java       |   0
 .../membership/gms/MemberDataBuilderImplTest.java  |   3 +-
 .../gms/messenger/GMSEncryptJUnitTest.java         |  23 ++-
 .../gms/messenger/GMSQuorumCheckerJUnitTest.java   |  29 ++--
 .../gms/messenger/StatRecorderJUnitTest.java       |   6 -
 .../membership/gms/util/MembershipAddressUtil.java |  68 +++++++++
 .../membership/api/MemberIdentifierImpl.java       |   2 +-
 .../internal/membership/gms/GMSMemberData.java     |   3 +
 .../membership/gms/MemberDataBuilderImpl.java      |   3 +-
 .../internal/membership/gms/Services.java          |   4 +-
 .../gms/locator/MembershipLocatorImpl.java         |   6 +
 .../serialization/DataSerializableFixedID.java     |   2 +-
 20 files changed, 228 insertions(+), 118 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 912dd42..88124b6 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -60,6 +60,11 @@ public class InternalDistributedMember extends MemberIdentifierImpl
   // Used only by deserialization
   public InternalDistributedMember() {}
 
+  @Override
+  public int getDSFID() {
+    return DISTRIBUTED_MEMBER;
+  }
+
   /**
    * Construct a InternalDistributedMember
    * <p>
diff --git a/geode-membership/build.gradle b/geode-membership/build.gradle
index 3a36871..9d549c5 100644
--- a/geode-membership/build.gradle
+++ b/geode-membership/build.gradle
@@ -52,9 +52,6 @@ dependencies {
     integrationTestCompile(project(':geode-junit')) {
         exclude module: 'geode-logging'
     }
-    integrationTestCompile(project(':geode-dunit')) {
-        exclude module: 'geode-logging'
-    }
     integrationTestCompile('pl.pragmatists:JUnitParams')
     distributedTestCompile(project(':geode-junit')) {
         exclude module: 'geode-logging'
@@ -68,6 +65,8 @@ dependencies {
 
     testImplementation('com.tngtech.archunit:archunit-junit4')
 
+    integrationTestCompile('com.tngtech.archunit:archunit-junit4')
+  
 }
 
 distributedTest {
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
similarity index 93%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
index f17a8c2..223d5fe 100755
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.distributed.internal.membership;
 
+import static org.apache.geode.distributed.internal.membership.gms.util.MembershipAddressUtil.createMemberID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
@@ -32,7 +33,6 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -45,7 +45,7 @@ public class GMSMembershipViewJUnitTest {
     int numMembers = 10;
     members = new ArrayList<>(numMembers);
     for (int i = 0; i < numMembers; i++) {
-      members.add(new InternalDistributedMember(LocalHostUtil.getLocalHost(), 1000 + i));
+      members.add(createMemberID(1000 + i));
     }
     // view creator is a locator
     members.get(0).setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
@@ -96,7 +96,8 @@ public class GMSMembershipViewJUnitTest {
 
     assertFalse(view.shouldBeCoordinator(members.get(1)));
     assertTrue(view.shouldBeCoordinator(members.get(0)));
-    assertEquals(members.get(numMembers - 1),
+    System.out.println("view is " + view + " and members are " + members);
+    assertEquals(members.get(1),
         view.getCoordinator(Collections.singletonList(members.get(0))));
     members.get(numMembers - 1).setPreferredForCoordinator(false);
     assertEquals(members.get(1), view.getCoordinator(Collections.singletonList(members.get(0))));
@@ -182,7 +183,7 @@ public class GMSMembershipViewJUnitTest {
 
     int oldSize = view.size();
     for (int i = 0; i < 100; i++) {
-      MemberIdentifier mbr = new InternalDistributedMember(LocalHostUtil.getLocalHost(), 2000 + i);
+      MemberIdentifier mbr = createMemberID(2000 + i);
       mbr.setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
       mbr.setVmViewId(2);
       view.add(mbr);
@@ -224,12 +225,12 @@ public class GMSMembershipViewJUnitTest {
     // in the previous view-weight, causing a spurious network partition to be declared
     MemberIdentifier members[] =
         new MemberIdentifier[] {
-            new InternalDistributedMember("localhost", 1),
-            new InternalDistributedMember("localhost", 2),
-            new InternalDistributedMember("localhost", 3),
-            new InternalDistributedMember("localhost", 4),
-            new InternalDistributedMember("localhost", 5),
-            new InternalDistributedMember("localhost", 6)};
+            createMemberID(1),
+            createMemberID(2),
+            createMemberID(3),
+            createMemberID(4),
+            createMemberID(5),
+            createMemberID(6)};
     int i = 0;
     // weight 3
     members[i].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
@@ -260,7 +261,7 @@ public class GMSMembershipViewJUnitTest {
     MemberIdentifier leader = (MemberIdentifier) members[2];
     assertTrue(!leader.preferredForCoordinator());
 
-    MemberIdentifier joiningMember = new InternalDistributedMember("localhost", 7);
+    MemberIdentifier joiningMember = createMemberID(7);
     joiningMember.setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
     joiningMember.setPreferredForCoordinator(false);
 
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
similarity index 94%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
index 2767bb2..a1b1260 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
@@ -16,6 +16,7 @@ package org.apache.geode.distributed.internal.membership;
 
 import static com.tngtech.archunit.base.DescribedPredicate.not;
 import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
+import static com.tngtech.archunit.core.domain.JavaClass.Predicates.type;
 import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
 
 import com.tngtech.archunit.core.importer.ImportOption;
@@ -26,6 +27,8 @@ import com.tngtech.archunit.junit.CacheMode;
 import com.tngtech.archunit.lang.ArchRule;
 import org.junit.runner.RunWith;
 
+import org.apache.geode.internal.AvailablePortHelper;
+
 @RunWith(ArchUnitRunner.class)
 @AnalyzeClasses(packages = "org.apache.geode.distributed.internal.membership.gms..",
     cacheMode = CacheMode.PER_CLASS,
@@ -56,6 +59,7 @@ public class MembershipDependenciesJUnitTest {
               .or(resideInAPackage("org.apache.geode.internal.lang.."))
 
               .or(not(resideInAPackage("org.apache.geode..")))
+              .or(type(AvailablePortHelper.class))
 
               // TODO: we dursn't depend on the test package cause it depends on pkgs in geode-core
               .or(resideInAPackage("org.apache.geode.test..")));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierFactoryImplTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierFactoryImplTest.java
similarity index 100%
rename from geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierFactoryImplTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierFactoryImplTest.java
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java
similarity index 94%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java
index adf677d..2c280df 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/MembershipAPIArchUnitTest.java
@@ -30,6 +30,7 @@ import org.junit.runner.RunWith;
 import org.apache.geode.distributed.internal.membership.gms.MemberDataBuilderImpl;
 import org.apache.geode.distributed.internal.membership.gms.MembershipBuilderImpl;
 import org.apache.geode.distributed.internal.membership.gms.MembershipLocatorBuilderImpl;
+import org.apache.geode.internal.inet.LocalHostUtil;
 
 @RunWith(ArchUnitRunner.class)
 @AnalyzeClasses(packages = "org.apache.geode.distributed.internal.membership.api",
@@ -51,5 +52,6 @@ public class MembershipAPIArchUnitTest {
               // allowed
               .or(type(MembershipBuilderImpl.class))
               .or(type(MembershipLocatorBuilderImpl.class))
-              .or(type(MemberDataBuilderImpl.class)));
+              .or(type(MemberDataBuilderImpl.class)
+                  .or(type(LocalHostUtil.class))));
 }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
similarity index 100%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
similarity index 73%
rename from geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
index ffe14b8..8e3f614 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
@@ -14,15 +14,8 @@
  */
 package org.apache.geode.distributed.internal.membership.gms;
 
-import static org.apache.geode.distributed.ConfigurationProperties.ACK_SEVERE_ALERT_THRESHOLD;
-import static org.apache.geode.distributed.ConfigurationProperties.ACK_WAIT_THRESHOLD;
-import static org.apache.geode.distributed.ConfigurationProperties.DISABLE_TCP;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_TTL;
-import static org.apache.geode.distributed.ConfigurationProperties.MEMBER_TIMEOUT;
+import static org.apache.geode.distributed.internal.membership.gms.util.MembershipAddressUtil.createMemberID;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.HIGH_PRIORITY_ACKED_MESSAGE;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -35,10 +28,12 @@ import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Properties;
 import java.util.Random;
 import java.util.Set;
 import java.util.Timer;
@@ -51,13 +46,6 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.mockito.Mockito;
 
-import org.apache.geode.distributed.internal.ClusterDistributionManager;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.DistributionConfigImpl;
-import org.apache.geode.distributed.internal.DistributionMessage;
-import org.apache.geode.distributed.internal.HighPriorityAckedMessage;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.distributed.internal.membership.adapter.ServiceConfig;
 import org.apache.geode.distributed.internal.membership.api.Authenticator;
 import org.apache.geode.distributed.internal.membership.api.LifecycleListener;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
@@ -73,7 +61,12 @@ import org.apache.geode.distributed.internal.membership.gms.Services.Stopper;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.HealthMonitor;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.JoinLeave;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Messenger;
-import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
+import org.apache.geode.distributed.internal.membership.gms.messages.AbstractGMSMessage;
+import org.apache.geode.internal.serialization.DSFIDSerializer;
+import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -81,40 +74,50 @@ public class GMSMembershipJUnitTest {
 
   private Services services;
   private MembershipConfig mockConfig;
-  private DistributionConfig distConfig;
   private Authenticator authenticator;
   private HealthMonitor healthMonitor;
-  private InternalDistributedMember myMemberId;
-  private InternalDistributedMember[] mockMembers;
+  private MemberIdentifier myMemberId;
+  private MemberIdentifier[] mockMembers;
   private Messenger messenger;
   private JoinLeave joinLeave;
   private Stopper stopper;
   private MembershipListener listener;
-  private GMSMembership<InternalDistributedMember> manager;
-  private List<InternalDistributedMember> members;
+  private GMSMembership<MemberIdentifier> manager;
+  private List<MemberIdentifier> members;
   private MessageListener messageListener;
   private LifecycleListener directChannelCallback;
 
   @Before
   public void initMocks() throws Exception {
-    Properties nonDefault = new Properties();
-    nonDefault.put(ACK_WAIT_THRESHOLD, "1");
-    nonDefault.put(ACK_SEVERE_ALERT_THRESHOLD, "10");
-    nonDefault.put(DISABLE_TCP, "true");
-    nonDefault.put(MCAST_PORT, "0");
-    nonDefault.put(MCAST_TTL, "0");
-    nonDefault.put(LOG_FILE, "");
-    nonDefault.put(LOG_LEVEL, "fine");
-    nonDefault.put(MEMBER_TIMEOUT, "2000");
-    nonDefault.put(LOCATORS, "localhost[10344]");
-    distConfig = new DistributionConfigImpl(nonDefault);
-    RemoteTransportConfig tconfig =
-        new RemoteTransportConfig(distConfig, ClusterDistributionManager.NORMAL_DM_TYPE);
-
-    mockConfig = new ServiceConfig(tconfig, distConfig);
+    mockConfig = new MembershipConfig() {
+      @Override
+      public long getMemberTimeout() {
+        return 2000;
+      }
+
+      @Override
+      public String getLocators() {
+        return "localhost[10344]";
+      }
+
+      @Override
+      public boolean getDisableTcp() {
+        return true;
+      }
+
+      @Override
+      public long getAckWaitThreshold() {
+        return 1;
+      }
+
+      @Override
+      public long getAckSevereAlertThreshold() {
+        return 10;
+      }
+    };
 
     authenticator = mock(Authenticator.class);
-    myMemberId = new InternalDistributedMember("localhost", 8887);
+    myMemberId = createMemberID(8887);
     GMSMemberData m = (GMSMemberData) myMemberId.getMemberData();
     UUID uuid = new UUID(12345, 12345);
     m.setUUID(uuid);
@@ -142,9 +145,9 @@ public class GMSMembershipJUnitTest {
     when(services.getTimer()).thenReturn(t);
 
     Random r = new Random();
-    mockMembers = new InternalDistributedMember[5];
+    mockMembers = new MemberIdentifier[5];
     for (int i = 0; i < mockMembers.length; i++) {
-      mockMembers[i] = new InternalDistributedMember("localhost", 8888 + i);
+      mockMembers[i] = createMemberID(8888 + i);
       m = (GMSMemberData) mockMembers[i].getMemberData();
       uuid = new UUID(r.nextLong(), r.nextLong());
       m.setUUID(uuid);
@@ -157,6 +160,10 @@ public class GMSMembershipJUnitTest {
     manager = new GMSMembership(listener, messageListener, directChannelCallback);
     manager.getGMSManager().init(services);
     when(services.getManager()).thenReturn(manager.getGMSManager());
+
+    DSFIDSerializer serializer = new DSFIDSerializerImpl();
+    when(services.getSerializer()).thenReturn(serializer);
+    Services.registerSerializables(serializer);
   }
 
   @After
@@ -169,7 +176,8 @@ public class GMSMembershipJUnitTest {
 
   @Test
   public void testSendMessage() throws Exception {
-    HighPriorityAckedMessage m = new HighPriorityAckedMessage();
+    services.getSerializer().registerDSFID(HIGH_PRIORITY_ACKED_MESSAGE, TestMessage.class);
+    TestMessage m = new TestMessage();
     m.setRecipient(mockMembers[0]);
     manager.getGMSManager().start();
     manager.getGMSManager().started();
@@ -177,8 +185,9 @@ public class GMSMembershipJUnitTest {
     List<MemberIdentifier> gmsMembers =
         members.stream().map(x -> ((MemberIdentifier) x)).collect(Collectors.toList());
     manager.getGMSManager().installView(new GMSMembershipView(myGMSMemberId, 1, gmsMembers));
-    Set<InternalDistributedMember> failures =
-        manager.send(m.getRecipientsArray(), m);
+    MemberIdentifier[] destinations = new MemberIdentifier[] {mockMembers[0]};
+    Set<MemberIdentifier> failures =
+        manager.send(destinations, m);
     verify(messenger).send(isA(Message.class));
     if (failures != null) {
       assertEquals(0, failures.size());
@@ -187,8 +196,8 @@ public class GMSMembershipJUnitTest {
 
 
 
-  private GMSMembershipView createView(InternalDistributedMember creator, int viewId,
-      List<InternalDistributedMember> members) {
+  private GMSMembershipView createView(MemberIdentifier creator, int viewId,
+      List<MemberIdentifier> members) {
     List<MemberIdentifier> gmsMembers = new ArrayList<>(members);
     return new GMSMembershipView(creator, viewId, gmsMembers);
   }
@@ -199,32 +208,32 @@ public class GMSMembershipJUnitTest {
     manager.getGMSManager().started();
     manager.isJoining = true;
 
-    List<InternalDistributedMember> viewmembers =
-        Arrays.asList(new InternalDistributedMember[] {mockMembers[0], myMemberId});
+    List<MemberIdentifier> viewmembers =
+        Arrays.asList(new MemberIdentifier[] {mockMembers[0], myMemberId});
     manager.getGMSManager().installView(createView(myMemberId, 2, viewmembers));
 
     // add a surprise member that will be shunned due to it's having
     // an old view ID
-    InternalDistributedMember surpriseMember = mockMembers[2];
+    MemberIdentifier surpriseMember = mockMembers[2];
     surpriseMember.setVmViewId(1);
     manager.handleOrDeferSurpriseConnect(surpriseMember);
     assertEquals(1, manager.getStartupEvents().size());
 
     // add a surprise member that will be accepted
-    InternalDistributedMember surpriseMember2 = mockMembers[3];
+    MemberIdentifier surpriseMember2 = mockMembers[3];
     surpriseMember2.setVmViewId(3);
     manager.handleOrDeferSurpriseConnect(surpriseMember2);
     assertEquals(2, manager.getStartupEvents().size());
 
     // suspect a member
-    InternalDistributedMember suspectMember = mockMembers[1];
+    MemberIdentifier suspectMember = mockMembers[1];
     manager.handleOrDeferSuspect(
         new SuspectMember(mockMembers[0], suspectMember, "testing"));
     // suspect messages aren't queued - they're ignored before joining the system
     assertEquals(2, manager.getStartupEvents().size());
     verify(listener, never()).memberSuspect(suspectMember, mockMembers[0], "testing");
 
-    HighPriorityAckedMessage m = new HighPriorityAckedMessage();
+    TestMessage m = new TestMessage();
     mockMembers[0].setVmViewId(1);
     m.setRecipient(mockMembers[0]);
     m.setSender(mockMembers[1]);
@@ -233,13 +242,13 @@ public class GMSMembershipJUnitTest {
 
     // this view officially adds surpriseMember2
     viewmembers = Arrays
-        .asList(new InternalDistributedMember[] {mockMembers[0], myMemberId, surpriseMember2});
+        .asList(new MemberIdentifier[] {mockMembers[0], myMemberId, surpriseMember2});
     manager.handleOrDeferViewEvent(new MembershipView(myMemberId, 3, viewmembers));
     assertEquals(4, manager.getStartupEvents().size());
 
     // add a surprise member that will be shunned due to it's having
     // an old view ID
-    InternalDistributedMember surpriseMember3 = mockMembers[4];
+    MemberIdentifier surpriseMember3 = mockMembers[4];
     surpriseMember.setVmViewId(1);
     manager.handleOrDeferSurpriseConnect(surpriseMember);
     assertEquals(5, manager.getStartupEvents().size());
@@ -247,7 +256,7 @@ public class GMSMembershipJUnitTest {
     // process a new view after we finish joining but before event processing has started
     manager.isJoining = false;
     mockMembers[4].setVmViewId(4);
-    viewmembers = Arrays.asList(new InternalDistributedMember[] {mockMembers[0], myMemberId,
+    viewmembers = Arrays.asList(new MemberIdentifier[] {mockMembers[0], myMemberId,
         surpriseMember2, mockMembers[4]});
     manager.handleOrDeferViewEvent(new MembershipView(myMemberId, 4, viewmembers));
     assertEquals(6, manager.getStartupEvents().size());
@@ -292,16 +301,16 @@ public class GMSMembershipJUnitTest {
     manager.getGMSManager().started();
     manager.isJoining = true;
 
-    List<InternalDistributedMember> viewmembers =
-        Arrays.asList(new InternalDistributedMember[] {mockMembers[0], mockMembers[1], myMemberId});
+    List<MemberIdentifier> viewmembers =
+        Arrays.asList(new MemberIdentifier[] {mockMembers[0], mockMembers[1], myMemberId});
     GMSMembershipView view = createView(myMemberId, 2, viewmembers);
     manager.getGMSManager().installView(view);
     when(services.getJoinLeave().getView()).thenReturn(view);
 
-    InternalDistributedMember[] destinations = new InternalDistributedMember[viewmembers.size()];
+    MemberIdentifier[] destinations = new MemberIdentifier[viewmembers.size()];
     for (int i = 0; i < destinations.length; i++) {
-      InternalDistributedMember id = viewmembers.get(i);
-      destinations[i] = new InternalDistributedMember(id.getHost(), id.getMembershipPort());
+      MemberIdentifier id = viewmembers.get(i);
+      destinations[i] = createMemberID(id.getMembershipPort());
     }
     manager.checkAddressesForUUIDs(destinations);
     // each destination w/o a UUID should have been replaced with the corresponding
@@ -313,7 +322,7 @@ public class GMSMembershipJUnitTest {
 
   @Test
   public void noDispatchWhenSick() throws MemberShunnedException, MemberStartupException {
-    final DistributionMessage msg = mock(DistributionMessage.class);
+    final Message msg = mock(Message.class);
     when(msg.dropMessageWhenMembershipIsPlayingDead()).thenReturn(true);
 
     final GMSMembership spy = Mockito.spy(manager);
@@ -324,8 +333,31 @@ public class GMSMembershipJUnitTest {
 
     spy.handleOrDeferMessage(msg);
 
-    verify(spy, never()).dispatchMessage(any(DistributionMessage.class));
+    verify(spy, never()).dispatchMessage(any(Message.class));
     assertThat(spy.getStartupEvents()).isEmpty();
   }
 
+  public static class TestMessage extends AbstractGMSMessage {
+
+    @Override
+    public int getDSFID() {
+      return HIGH_PRIORITY_ACKED_MESSAGE;
+    }
+
+    @Override
+    public void toData(DataOutput out, SerializationContext context) throws IOException {
+
+    }
+
+    @Override
+    public void fromData(DataInput in, DeserializationContext context)
+        throws IOException, ClassNotFoundException {
+
+    }
+
+    @Override
+    public Version[] getSerializationVersions() {
+      return null;
+    }
+  }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
similarity index 100%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java
similarity index 98%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java
index 8a3cb67..00dfe8b 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImplTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
 
 import org.apache.geode.distributed.internal.membership.api.MemberData;
 import org.apache.geode.distributed.internal.membership.api.MemberDataBuilder;
+import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.serialization.Version;
 
 public class MemberDataBuilderImplTest {
@@ -38,7 +39,7 @@ public class MemberDataBuilderImplTest {
 
   @Test
   public void testNewBuilderForLocalHost() throws UnknownHostException {
-    InetAddress localhost = InetAddress.getLocalHost();
+    InetAddress localhost = LocalHostUtil.getLocalHost();
     MemberData data = MemberDataBuilder.newBuilderForLocalHost("hostname").build();
     assertThat(data.getInetAddress()).isEqualTo(localhost);
     assertThat(data.getHostName()).isEqualTo("hostname");
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java
similarity index 92%
rename from geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java
index 318acb5..adee65f 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncryptJUnitTest.java
@@ -14,13 +14,13 @@
  */
 package org.apache.geode.distributed.internal.membership.gms.messenger;
 
+import static org.apache.geode.distributed.internal.membership.gms.util.MembershipAddressUtil.createMemberID;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import org.junit.Assert;
@@ -28,16 +28,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.distributed.ConfigurationProperties;
-import org.apache.geode.distributed.internal.ClusterDistributionManager;
-import org.apache.geode.distributed.internal.DistributionConfigImpl;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.distributed.internal.membership.adapter.ServiceConfig;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.Services;
-import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.test.junit.categories.MembershipTest;
 import org.apache.geode.test.junit.rules.ConcurrencyRule;
 
@@ -61,20 +55,19 @@ public class GMSEncryptJUnitTest {
   }
 
   private void initMocks(String algo) throws Exception {
-    Properties nonDefault = new Properties();
-    nonDefault.put(ConfigurationProperties.SECURITY_UDP_DHALGO, algo);
-    DistributionConfigImpl config = new DistributionConfigImpl(nonDefault);
-    RemoteTransportConfig tconfig =
-        new RemoteTransportConfig(config, ClusterDistributionManager.NORMAL_DM_TYPE);
-
-    MembershipConfig membershipConfig = new ServiceConfig(tconfig, config);
+    MembershipConfig membershipConfig = new MembershipConfig() {
+      @Override
+      public String getSecurityUDPDHAlgo() {
+        return algo;
+      }
+    };
 
     services = mock(Services.class);
     when(services.getConfig()).thenReturn(membershipConfig);
 
     mockMembers = new MemberIdentifier[4];
     for (int i = 0; i < mockMembers.length; i++) {
-      mockMembers[i] = new InternalDistributedMember("localhost", 8888 + i);
+      mockMembers[i] = createMemberID(8888 + i);
     }
     int viewId = 1;
     List<MemberIdentifier> mbrs = new LinkedList<>();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
similarity index 92%
rename from geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
index 54ebc20..783917d 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
@@ -39,10 +39,9 @@ import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
-import org.apache.geode.distributed.internal.ClusterDistributionManager;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
+import org.apache.geode.distributed.internal.membership.gms.util.MembershipAddressUtil;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -56,7 +55,7 @@ public class GMSQuorumCheckerJUnitTest {
   public void initMocks() {
     mockMembers = new MemberIdentifier[12];
     for (int i = 0; i < mockMembers.length; i++) {
-      mockMembers[i] = new InternalDistributedMember("localhost", 8888 + i);
+      mockMembers[i] = MembershipAddressUtil.createMemberID(8888 + i);
     }
     channel = mock(JChannel.class);
     address = mock(JGAddress.class);
@@ -136,8 +135,8 @@ public class GMSQuorumCheckerJUnitTest {
   @Test
   public void testQuorumChecker10Servers2Locators4ServersLost() throws Exception {
     GMSMembershipView view = prepareView();
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < mockMembers.length; i++) {
@@ -163,8 +162,8 @@ public class GMSQuorumCheckerJUnitTest {
   @Test
   public void testQuorumChecker10Servers2Locators4ServersAnd1LocatorLost() throws Exception {
     GMSMembershipView view = prepareView();
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < mockMembers.length; i++) {
@@ -194,8 +193,8 @@ public class GMSQuorumCheckerJUnitTest {
   public void testQuorumChecker10Servers2Locators5ServersAnd2LocatorsButNotLeadMemberLost()
       throws Exception {
     GMSMembershipView view = prepareView();
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < mockMembers.length; i++) {
@@ -227,8 +226,8 @@ public class GMSQuorumCheckerJUnitTest {
   public void testQuorumChecker10Servers2Locators5ServerAnd1LocatorWithLeadMemberLost()
       throws Exception {
     GMSMembershipView view = prepareView();
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < mockMembers.length; i++) {
@@ -258,8 +257,8 @@ public class GMSQuorumCheckerJUnitTest {
   public void testQuorumChecker2Servers2LocatorsLeadMemberLost() throws Exception {
     int numMembers = 4;
     GMSMembershipView view = prepareView(numMembers);
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < numMembers; i++) {
@@ -282,8 +281,8 @@ public class GMSQuorumCheckerJUnitTest {
   public void testQuorumChecker2Servers2LocatorsLeadMemberAnd1LocatorLost() throws Exception {
     int numMembers = 4;
     GMSMembershipView view = prepareView(numMembers);
-    mockMembers[0].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
-    mockMembers[1].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    mockMembers[0].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
+    mockMembers[1].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
 
     Set<Integer> pongResponders = new HashSet<>();
     for (int i = 0; i < numMembers; i++) {
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java
similarity index 95%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java
rename to geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java
index 3a4f3c5..2af832c 100755
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorderJUnitTest.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.distributed.internal.membership.gms.messenger;
 
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.isA;
@@ -25,7 +23,6 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Properties;
 import java.util.concurrent.RejectedExecutionException;
 
 import org.jgroups.Event;
@@ -163,9 +160,6 @@ public class StatRecorderJUnitTest {
     Services mockServices = mock(Services.class);
 
     // first test to see if the non-multicast stack has the recorder installed
-    Properties nonDefault = new Properties();
-    nonDefault.put(MCAST_PORT, "0");
-    nonDefault.put(LOCATORS, "localhost[12345]");
     MembershipConfig mockConfig = mock(MembershipConfig.class);
     when(mockConfig.getMembershipPortRange()).thenReturn(new int[] {0, 10});
     when(mockConfig.getSecurityUDPDHAlgo()).thenReturn("");
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/util/MembershipAddressUtil.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/util/MembershipAddressUtil.java
new file mode 100644
index 0000000..975548c
--- /dev/null
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/util/MembershipAddressUtil.java
@@ -0,0 +1,68 @@
+/*
+ * 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.distributed.internal.membership.gms.util;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import org.jgroups.util.UUID;
+
+import org.apache.geode.distributed.internal.membership.api.MemberData;
+import org.apache.geode.distributed.internal.membership.api.MemberDataBuilder;
+import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
+import org.apache.geode.distributed.internal.membership.api.MemberIdentifierFactoryImpl;
+import org.apache.geode.distributed.internal.membership.gms.GMSMemberData;
+import org.apache.geode.internal.serialization.Version;
+
+public class MembershipAddressUtil {
+  public static MemberIdentifier createMemberID(short version, int viewId, long msb, long lsb)
+      throws UnknownHostException {
+    MemberData memberData = MemberDataBuilder.newBuilderForLocalHost("localhost")
+        .setVersionOrdinal(version)
+        .setVmViewId(viewId)
+        .setUuidMostSignificantBits(msb)
+        .setUuidLeastSignificantBits(lsb)
+        .build();
+    MemberIdentifier gmsMember = new MemberIdentifierFactoryImpl().create(memberData);
+    return gmsMember;
+  }
+
+  /**
+   * Create a new membership ID that is preferred for coordinator and has a UUID established
+   */
+  public static MemberIdentifier createMemberID(int port) {
+    UUID uuid = UUID.randomUUID();
+    try {
+      return new MemberIdentifierFactoryImpl().create(new GMSMemberData(InetAddress.getLocalHost(),
+          port, Version.CURRENT_ORDINAL, uuid.getMostSignificantBits(),
+          uuid.getLeastSignificantBits(), -1));
+    } catch (UnknownHostException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  /**
+   * Create a new membership ID that is preferred for coordinator and has no UUID
+   */
+  public static MemberIdentifier createMemberIDWithNoUUID(int port) {
+    try {
+      return new MemberIdentifierFactoryImpl().create(new GMSMemberData(InetAddress.getLocalHost(),
+          port, Version.CURRENT_ORDINAL, 0l, 0l, -1));
+    } catch (UnknownHostException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+}
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierImpl.java
index 0b63583..bc3aa73 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifierImpl.java
@@ -608,7 +608,7 @@ public class MemberIdentifierImpl implements MemberIdentifier, DataSerializableF
 
   @Override
   public int getDSFID() {
-    return DISTRIBUTED_MEMBER;
+    return DEFAULT_MEMBER_ID;
   }
 
   @Override
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
index 4fed230..c8c1c57 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
@@ -23,6 +23,7 @@ import java.net.InetAddress;
 import org.jgroups.util.UUID;
 
 import org.apache.geode.distributed.internal.membership.api.MemberData;
+import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
@@ -120,6 +121,8 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
     this.uuidMSBs = msbs;
     this.uuidLSBs = lsbs;
     this.vmViewId = viewId;
+    this.vmKind = MemberIdentifier.NORMAL_DM_TYPE;
+    this.preferredForCoordinator = true;
   }
 
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
index f38a7a9..7545290 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
@@ -20,6 +20,7 @@ import java.net.UnknownHostException;
 import org.apache.geode.distributed.internal.membership.api.MemberData;
 import org.apache.geode.distributed.internal.membership.api.MemberDataBuilder;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
+import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.serialization.Version;
 
 /**
@@ -75,7 +76,7 @@ public class MemberDataBuilderImpl implements MemberDataBuilder {
 
   private MemberDataBuilderImpl(String fakeHostName) {
     try {
-      inetAddress = InetAddress.getLocalHost();
+      inetAddress = LocalHostUtil.getLocalHost();
     } catch (UnknownHostException e2) {
       throw new RuntimeException("Unable to resolve local host address", e2);
     }
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
index 2592a20..33aabab 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.distributed.internal.membership.gms;
 
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.DEFAULT_MEMBER_ID;
 import static org.apache.geode.internal.serialization.DataSerializableFixedID.FINAL_CHECK_PASSED_MESSAGE;
 import static org.apache.geode.internal.serialization.DataSerializableFixedID.FIND_COORDINATOR_REQ;
 import static org.apache.geode.internal.serialization.DataSerializableFixedID.FIND_COORDINATOR_RESP;
@@ -40,6 +41,7 @@ import org.apache.geode.distributed.internal.membership.api.Authenticator;
 import org.apache.geode.distributed.internal.membership.api.MemberDisconnectedException;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifierFactory;
+import org.apache.geode.distributed.internal.membership.api.MemberIdentifierImpl;
 import org.apache.geode.distributed.internal.membership.api.MemberStartupException;
 import org.apache.geode.distributed.internal.membership.api.MembershipClosedException;
 import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
@@ -173,7 +175,7 @@ public class Services<ID extends MemberIdentifier> {
     serializer.registerDSFID(FIND_COORDINATOR_RESP, FindCoordinatorResponse.class);
     serializer.registerDSFID(JOIN_RESPONSE, JoinResponseMessage.class);
     serializer.registerDSFID(JOIN_REQUEST, JoinRequestMessage.class);
-
+    serializer.registerDSFID(DEFAULT_MEMBER_ID, MemberIdentifierImpl.class);
   }
 
   /**
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
index bda5ec0..982d06f 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
@@ -27,6 +27,7 @@ import java.util.function.Supplier;
 
 import org.apache.logging.log4j.Logger;
 
+import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import org.apache.geode.distributed.internal.membership.api.Membership;
 import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
@@ -153,6 +154,11 @@ public class MembershipLocatorImpl<ID extends MemberIdentifier> implements Membe
     return this.handler.isHandled(clazz);
   }
 
+  @VisibleForTesting
+  public GMSLocator getGMSLocator() {
+    return this.gmsLocator;
+  }
+
   public void stop() {
     if (isAlive()) {
       logger.info("Stopping {}", this);
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
index d4e45ab..812f8f4 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
@@ -70,7 +70,7 @@ public interface DataSerializableFixedID extends SerializationVersions, BasicSer
 
   short VIEW_ACK_MESSAGE = -151;
   short INSTALL_VIEW_MESSAGE = -150;
-  // -149 is unused;
+  short DEFAULT_MEMBER_ID = -149; // membership module's default identifier
   short NETVIEW = -148;
   short GET_VIEW_REQ = -147;
   short GET_VIEW_RESP = -146;