Return-Path: X-Original-To: apmail-geode-commits-archive@minotaur.apache.org Delivered-To: apmail-geode-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 99DD318310 for ; Mon, 7 Dec 2015 17:06:29 +0000 (UTC) Received: (qmail 61686 invoked by uid 500); 7 Dec 2015 17:05:55 -0000 Delivered-To: apmail-geode-commits-archive@geode.apache.org Received: (qmail 61655 invoked by uid 500); 7 Dec 2015 17:05:55 -0000 Mailing-List: contact commits-help@geode.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@geode.incubator.apache.org Delivered-To: mailing list commits@geode.incubator.apache.org Received: (qmail 61646 invoked by uid 99); 7 Dec 2015 17:05:55 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Dec 2015 17:05:55 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id D7596C0473 for ; Mon, 7 Dec 2015 17:05:54 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.226 X-Spam-Level: * X-Spam-Status: No, score=1.226 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.554] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id o57vM-cAFd1D for ; Mon, 7 Dec 2015 17:05:52 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with SMTP id 992B54452F for ; Mon, 7 Dec 2015 17:05:46 +0000 (UTC) Received: (qmail 61007 invoked by uid 99); 7 Dec 2015 17:05:45 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Dec 2015 17:05:45 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2D5EEE07EC; Mon, 7 Dec 2015 17:05:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: jensdeppe@apache.org To: commits@geode.incubator.apache.org Date: Mon, 07 Dec 2015 17:06:19 -0000 Message-Id: <4fcaef0fc12a4bd7a56c0517f2f30caf@git.apache.org> In-Reply-To: <6eab8170c971407ea4704217184c5d00@git.apache.org> References: <6eab8170c971407ea4704217184c5d00@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [37/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-17 Commit: 2258d74cac3e13a162a06079b78eb83141eaa641 Parents: 442faa0 Author: Jason Huynh Authored: Tue Dec 1 14:01:53 2015 -0800 Committer: Jason Huynh 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()); + } +}