You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2015/12/11 22:22:42 UTC
[08/50] [abbrv] incubator-geode git commit: [GEODE-619]: Add
GMSMemberJUnitTest Adding unit tests that should improve code coverage of
GMSMember to ~90% Fixing array index out of bounds issue when one address is
longer than the other
[GEODE-619]: Add GMSMemberJUnitTest
Adding unit tests that should improve code coverage of GMSMember to ~90%
Fixing array index out of bounds issue when one address is longer than the other
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/2258d74c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2258d74c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2258d74c
Branch: refs/heads/feature/GEODE-217
Commit: 2258d74cac3e13a162a06079b78eb83141eaa641
Parents: 442faa0
Author: Jason Huynh <hu...@gmail.com>
Authored: Tue Dec 1 14:01:53 2015 -0800
Committer: Jason Huynh <hu...@gmail.com>
Committed: Tue Dec 1 14:06:15 2015 -0800
----------------------------------------------------------------------
.../internal/membership/gms/GMSMember.java | 20 +--
.../membership/gms/GMSMemberJUnitTest.java | 148 +++++++++++++++++++
2 files changed, 159 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2258d74c/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
index f4784ed..05b3aee 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
@@ -211,7 +211,7 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
byte[] hisAddr = his.inetAddr.getAddress();
if (myAddr != hisAddr) {
for (int idx=0; idx < myAddr.length; idx++) {
- if (idx > hisAddr.length) {
+ if (idx >= hisAddr.length) {
return 1;
} else if (myAddr[idx] > hisAddr[idx]) {
return 1;
@@ -219,6 +219,10 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
return -1;
}
}
+ //After checking both addresses we have only gone up to myAddr.length, their address could be longer
+ if (hisAddr.length > myAddr.length) {
+ return -1;
+ }
}
if (udpPort < his.udpPort) return -1;
if (his.udpPort < udpPort) return 1;
@@ -226,16 +230,14 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
// bug #41983, address of kill-9'd member is reused
// before it can be ejected from membership
- if (result == 0) {
- if (this.vmViewId >= 0 && his.vmViewId >= 0) {
- if (this.vmViewId < his.vmViewId) {
- result = -1;
- } else if (his.vmViewId < this.vmViewId) {
- result = 1;
- }
+ if (this.vmViewId >= 0 && his.vmViewId >= 0) {
+ if (this.vmViewId < his.vmViewId) {
+ result = -1;
+ } else if (his.vmViewId < this.vmViewId) {
+ result = 1;
}
}
- if (result == 0 && this.uuidMSBs != 0 && his.uuidMSBs != 0) {
+ if (result == 0 && this.uuidMSBs != 0 && his.uuidMSBs != 0) {
if (this.uuidMSBs < his.uuidMSBs) {
result = -1;
} else if (his.uuidMSBs < this.uuidMSBs) {
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2258d74c/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberJUnitTest.java
new file mode 100644
index 0000000..0b75d3d
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberJUnitTest.java
@@ -0,0 +1,148 @@
+package com.gemstone.gemfire.distributed.internal.membership.gms;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.net.InetAddress;
+
+import org.jgroups.util.UUID;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.distributed.internal.membership.MemberAttributes;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class GMSMemberJUnitTest {
+
+ @Test
+ public void testEqualsNotSameType() {
+ GMSMember member = new GMSMember();
+ Assert.assertFalse(member.equals("Not a GMSMember"));
+ }
+
+ @Test
+ public void testEqualsIsSame() {
+ GMSMember member = new GMSMember();
+ Assert.assertTrue(member.equals(member));
+ }
+
+ @Test
+ public void testCompareToIsSame() {
+ GMSMember member = new GMSMember();
+ UUID uuid = new UUID(0, 0);
+ member.setUUID(uuid);
+ Assert.assertEquals(0, member.compareTo(member));
+ }
+
+ private GMSMember createGMSMember(byte[] inetAddress, int viewId, long msb, long lsb) {
+ GMSMember member = new GMSMember();
+ InetAddress addr1 = mock(InetAddress.class);
+ when(addr1.getAddress()).thenReturn(inetAddress);
+ member.setInetAddr(addr1);
+ member.setBirthViewId(viewId);
+ member.setUUID(new UUID(msb, lsb));
+ return member;
+ }
+
+ @Test
+ public void testCompareToInetAddressIsLongerThan() {
+ GMSMember member1 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1, 1, 1, 1}, 1, 1, 1);
+ Assert.assertEquals(1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToInetAddressIsShorterThan() {
+ GMSMember member1 = createGMSMember(new byte[] {1, 1, 1, 1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
+ Assert.assertEquals(-1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToInetAddressIsGreater() {
+ GMSMember member1 = createGMSMember(new byte[] {1, 2, 1, 1, 1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
+ Assert.assertEquals(1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToInetAddressIsLessThan() {
+ GMSMember member1 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1, 2, 1, 1, 1}, 1, 1, 1);
+ Assert.assertEquals(-1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToMyViewIdLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 2, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ Assert.assertEquals(1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToTheirViewIdLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 2, 1, 1);
+ Assert.assertEquals(-1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToMyMSBLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 1, 2, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ Assert.assertEquals(1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToTheirMSBLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 1, 2, 1);
+ Assert.assertEquals(-1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToMyLSBLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 1, 1, 2);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ Assert.assertEquals(1, member1.compareTo(member2));
+ }
+
+ @Test
+ public void testCompareToTheirLSBLarger() {
+ GMSMember member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
+ GMSMember member2 = createGMSMember(new byte[] {1}, 1, 1, 2);
+ Assert.assertEquals(-1, member1.compareTo(member2));
+ }
+
+
+ //Makes sure a NPE is not thrown
+ @Test
+ public void testNoNPEWhenSetAttributesWithNull() {
+ GMSMember member = new GMSMember();
+ member.setAttributes(null);
+ MemberAttributes attrs = member.getAttributes();
+ MemberAttributes invalid = MemberAttributes.INVALID;
+ Assert.assertEquals(attrs.getVmKind(), invalid.getVmKind());
+ Assert.assertEquals(attrs.getPort(), invalid.getPort());
+ Assert.assertEquals(attrs.getVmViewId(), invalid.getVmViewId());
+ Assert.assertEquals(attrs.getName(), invalid.getName());
+ }
+
+ @Test
+ public void testGetUUIDReturnsNullWhenUUIDIs0() {
+ GMSMember member = new GMSMember();
+ UUID uuid = new UUID(0, 0);
+ member.setUUID(uuid);
+ Assert.assertNull(member.getUUID());
+ }
+
+ @Test
+ public void testGetUUID() {
+ GMSMember member = new GMSMember();
+ UUID uuid = new UUID(1, 1);
+ member.setUUID(uuid);
+ Assert.assertNotNull(member.getUUID());
+ }
+}