blob: b742579d487242b81ae5e5f1146ddb5efe61646c [file] [log] [blame]
package org.apache.catalina.tribes.test.interceptors;
import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.group.GroupChannel;
import org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator;
import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
import junit.framework.TestCase;
import junit.framework.TestResult;
import junit.framework.TestSuite;
public class TestNonBlockingCoordinator extends TestCase {
GroupChannel[] channels = null;
NonBlockingCoordinator[] coordinators = null;
int channelCount = 10;
Thread[] threads = null;
protected void setUp() throws Exception {
System.out.println("Setup");
super.setUp();
channels = new GroupChannel[channelCount];
coordinators = new NonBlockingCoordinator[channelCount];
threads = new Thread[channelCount];
for ( int i=0; i<channelCount; i++ ) {
channels[i] = new GroupChannel();
coordinators[i] = new NonBlockingCoordinator();
channels[i].addInterceptor(coordinators[i]);
channels[i].addInterceptor(new TcpFailureDetector());
final int j = i;
threads[i] = new Thread() {
public void run() {
try {
channels[j].start(Channel.DEFAULT);
Thread.sleep(50);
} catch (Exception x) {
x.printStackTrace();
}
}
};
}
for ( int i=0; i<channelCount; i++ ) threads[i].start();
for ( int i=0; i<channelCount; i++ ) threads[i].join();
Thread.sleep(1000);
}
public void testCoord1() throws Exception {
for (int i=1; i<channelCount; i++ )
assertEquals("Message count expected to be equal.",channels[i-1].getMembers().length,channels[i].getMembers().length);
Member member = coordinators[0].getCoordinator();
int cnt = 0;
while ( member == null && (cnt++ < 100 ) ) try {Thread.sleep(100); member = coordinators[0].getCoordinator();}catch ( Exception x){}
for (int i=0; i<channelCount; i++ ) super.assertEquals(member,coordinators[i].getCoordinator());
System.out.println("Coordinator[1] is:"+member);
}
public void testCoord2() throws Exception {
Member member = coordinators[1].getCoordinator();
System.out.println("Coordinator[2a] is:" + member);
int index = -1;
for ( int i=0; i<channelCount; i++ ) {
if ( channels[i].getLocalMember(false).equals(member) ) {
System.out.println("Shutting down:" + channels[i].getLocalMember(true).toString());
channels[i].stop(Channel.DEFAULT);
index = i;
}
}
int dead = index;
Thread.sleep(1000);
if ( index == 0 ) index = 1; else index = 0;
System.out.println("Member count:"+channels[index].getMembers().length);
member = coordinators[index].getCoordinator();
for (int i = 1; i < channelCount; i++) if ( i != dead ) super.assertEquals(member, coordinators[i].getCoordinator());
System.out.println("Coordinator[2b] is:" + member);
}
protected void tearDown() throws Exception {
System.out.println("tearDown");
super.tearDown();
for ( int i=0; i<channelCount; i++ ) {
channels[i].stop(Channel.DEFAULT);
}
}
public static void main(String[] args) throws Exception {
TestSuite suite = new TestSuite();
suite.addTestSuite(TestNonBlockingCoordinator.class);
suite.run(new TestResult());
}
}