package org.jgroups.tests;
import org.jgroups.Address;
import org.jgroups.Global;
import org.jgroups.Membership;
import org.jgroups.util.UUID;
import org.jgroups.util.Util;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
/**
* Author: Bela Ban
*/
@Test(groups=Global.FUNCTIONAL,sequential=true)
public class MembershipTest {
Membership m1, m2;
List<Address> v1, v2;
Address a1, a2, a3, a4, a5;
@BeforeMethod
public void setUp() {
a1=Util.createRandomAddress();
a2=Util.createRandomAddress();
a3=a2;
a4=Util.createRandomAddress();
a5=Util.createRandomAddress();
m1=new Membership();
}
public void testConstructor() {
v1=Arrays.asList(a1, a2, a3);
m2=new Membership(v1);
assert m2.size() == 2;
assert m2.contains(a1);
assert m2.contains(a2);
assert m2.contains(a3);
}
public void testClone() {
v1=Arrays.asList(a1, a2, a3);
m2=new Membership(v1);
m1=(Membership)m2.clone();
assert m1.size() == m2.size();
assert m1.contains(a1);
assert m1.contains(a2);
assert m2.contains(a1);
assert m2.contains(a2);
}
public void testCopy() {
v1=Arrays.asList(a1, a2, a3);
m2=new Membership(v1);
m1=m2.copy();
assert m1.size() == m2.size();
assert m1.contains(a1);
assert m1.contains(a2);
assert m2.contains(a1);
assert m2.contains(a2);
}
public void testAdd() {
m1.add(a1, a2, a3);
assert m1.size() == 2;
assert m1.contains(a1);
assert m1.contains(a2);
assert m1.contains(a3);
}
public void testAddVector() {
v1=Arrays.asList(a1, a2, a3);
m1.add(v1);
assert m1.size() == 2;
assert m1.contains(a1);
assert m1.contains(a2);
}
public void testAddVectorDupl() {
v1=Arrays.asList(a1, a2, a3, a4, a5);
m1.add(a5, a1);
m1.add(v1);
assert m1.size() == 4;
assert m1.contains(a1);
assert m1.contains(a2);
assert m1.contains(a4);
assert m1.contains(a5);
}
public void testRemove() {
m1.add(a1, a2, a3, a4, a5);
m1.remove(a2);
assert m1.size() == 3;
}
public void testGetMembers() {
testAdd();
Vector v=m1.getMembers();
assert v.size() == 2;
}
public void testSet() {
v1=Arrays.asList(a1, a2);
m1.add(a1, a2, a4, a5);
m1.set(v1);
assert m1.size() == 2;
assert m1.contains(a1);
assert m1.contains(a2);
}
public void testSet2() {
m1=new Membership();
m2=new Membership();
m1.add(a1, a2, a4);
m2.add(a5);
m2.set(m1);
assert m2.size() == 3;
assert m2.contains(a1);
assert m2.contains(a2);
assert m2.contains(a4);
assert !m2.contains(a5);
}
public void testMerge() {
v1=Arrays.asList(a5);
v2=Arrays.asList(a2, a3);
m1.add(a1, a2, a3, a4);
m1.merge(v1, v2);
assert m1.size() == 3;
assert m1.contains(a1);
assert m1.contains(a4);
assert m1.contains(a5);
}
public void testSort() {
m1.add(a3, a4, a2, a1, a5, a2);
System.out.println("membership:\n" + printUUIDs(m1));
Assert.assertEquals(4, m1.size());
Assert.assertEquals(a3, m1.elementAt(0));
Assert.assertEquals(a4, m1.elementAt(1));
Assert.assertEquals(a1, m1.elementAt(2));
Assert.assertEquals(a5, m1.elementAt(3));
m1.sort();
System.out.println("sorted: " + m1);
Assert.assertEquals(4, m1.size());
Address addr0=m1.elementAt(0);
Address addr1=m1.elementAt(1);
Address addr2=m1.elementAt(2);
Address addr3=m1.elementAt(3);
System.out.println("sorted membership:\n" + printUUIDs(m1));
assert addr0.compareTo(addr1) < 0;
assert addr1.compareTo(addr2) < 0;
assert addr2.compareTo(addr3) < 0;
}
private static String printUUIDs(Membership mbrs) {
StringBuilder sb=new StringBuilder();
boolean first=true;
for(int i=0; i < mbrs.size(); i++) {
UUID mbr=(UUID)mbrs.elementAt(i);
if(first)
first=false;
else
sb.append(", ");
sb.append(mbr.toStringLong());
}
return sb.toString();
}
}