com.gemstone.gemfire.distributed.internal.membership.MembershipJUnitTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gemfire-junit Show documentation
Show all versions of gemfire-junit Show documentation
SnappyData store based off Pivotal GemFireXD
/*
* Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
*
* Licensed 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. See accompanying
* LICENSE file.
*/
package com.gemstone.gemfire.distributed.internal.membership;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;
import com.gemstone.gemfire.distributed.internal.DistributionManager;
import com.gemstone.org.jgroups.View;
import com.gemstone.org.jgroups.ViewId;
import com.gemstone.org.jgroups.protocols.pbcast.GMS;
import com.gemstone.org.jgroups.stack.IpAddress;
import junit.framework.TestCase;
public class MembershipJUnitTest extends TestCase {
public MembershipJUnitTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Test that failed weight calculations are correctly performed. See bug #47342
* @throws Exception
*/
public void testFailedWeight() throws Exception {
// in #47342 a new view was created that contained a member that was joining but
// was no longer reachable. The member was included in the failed-weight and not
// in the previous view-weight, causing a spurious network partition to be declared
IpAddress members[] = new IpAddress[] {
new IpAddress("localhost", 1), new IpAddress("localhost", 2), new IpAddress("localhost", 3),
new IpAddress("localhost", 4), new IpAddress("localhost", 5), new IpAddress("localhost", 6)};
int i = 0;
// weight 3
members[i].setVmKind(DistributionManager.LOCATOR_DM_TYPE);
members[i++].shouldntBeCoordinator(false);
// weight 3
members[i].setVmKind(DistributionManager.LOCATOR_DM_TYPE);
members[i++].shouldntBeCoordinator(false);
// weight 15 (cache+leader)
members[i].setVmKind(DistributionManager.NORMAL_DM_TYPE);
members[i++].shouldntBeCoordinator(true);
// weight 0
members[i].setVmKind(DistributionManager.ADMIN_ONLY_DM_TYPE);
members[i++].shouldntBeCoordinator(true);
// weight 0
members[i].setVmKind(DistributionManager.ADMIN_ONLY_DM_TYPE);
members[i++].shouldntBeCoordinator(true);
// weight 10
members[i].setVmKind(DistributionManager.NORMAL_DM_TYPE);
members[i++].shouldntBeCoordinator(true);
ViewId vid = new ViewId(members[0], 4);
Vector vmbrs = new Vector();
for (i=0; i failedMembers = new HashSet();
failedMembers.add(joiningMember);
failedMembers.add(members[members.length-1]); // cache
failedMembers.add(members[members.length-2]); // admin
int failedWeight = GMS.processFailuresAndGetWeight(lastView, leader, failedMembers);
// System.out.println("last view = " + lastView);
// System.out.println("failed mbrs = " + failedMembers);
// System.out.println("failed weight = " + failedWeight);
assertEquals("failure weight calculation is incorrect", 10, failedWeight);
assertTrue(!failedMembers.contains(members[members.length-2]));
}
}