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:37 UTC

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

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;