2
* Licensed to the Apache Software Foundation (ASF) under one or more
3
* contributor license agreements. See the NOTICE file distributed with
4
* this work for additional information regarding copyright ownership.
5
* The ASF licenses this file to You under the Apache License, Version 2.0
6
* (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
17
package org.apache.catalina.tribes.test.membership;
19
import java.util.ArrayList;
21
import junit.framework.TestCase;
23
import org.apache.catalina.tribes.Channel;
24
import org.apache.catalina.tribes.ManagedChannel;
25
import org.apache.catalina.tribes.Member;
26
import org.apache.catalina.tribes.MembershipListener;
27
import org.apache.catalina.tribes.group.GroupChannel;
29
public class TestMemberArrival
31
private static int count = 10;
32
private ManagedChannel[] channels = new ManagedChannel[count];
33
private TestMbrListener[] listeners = new TestMbrListener[count];
36
protected void setUp() throws Exception {
38
for (int i = 0; i < channels.length; i++) {
39
channels[i] = new GroupChannel();
40
channels[i].getMembershipService().setPayload( ("Channel-" + (i + 1)).getBytes("ASCII"));
41
listeners[i] = new TestMbrListener( ("Listener-" + (i + 1)));
42
channels[i].addMembershipListener(listeners[i]);
48
for (int i = 0; i < channels.length; i++) {
49
listeners[i].members.clear();
53
public void testMemberArrival() throws Exception {
54
//purpose of this test is to make sure that we have received all the members
55
//that we can expect before the start method returns
56
Thread[] threads = new Thread[channels.length];
57
for (int i=0; i<channels.length; i++ ) {
58
final Channel channel = channels[i];
59
Thread t = new Thread() {
63
channel.start(Channel.DEFAULT);
64
}catch ( Exception x ) {
65
throw new RuntimeException(x);
71
for (int i=0; i<threads.length; i++ ) threads[i].start();
72
for (int i=0; i<threads.length; i++ ) threads[i].join();
74
System.out.println("All channels started.");
75
for (int i=listeners.length-1; i>=0; i-- ) assertEquals("Checking member arrival length",channels.length-1,listeners[i].members.size());
79
protected void tearDown() throws Exception {
81
for (int i = 0; i < channels.length; i++) {
83
channels[i].stop(Channel.DEFAULT);
84
} catch (Exception ignore) {
91
public static class TestMbrListener
92
implements MembershipListener {
93
public String name = null;
94
public TestMbrListener(String name) {
98
public ArrayList<Member> members = new ArrayList<Member>();
100
public void memberAdded(Member member) {
101
if (!members.contains(member)) {
104
System.out.println(name + ":member added[" + new String(member.getPayload(), "ASCII") + "; Thread:"+Thread.currentThread().getName()+"]");
105
} catch (Exception x) {
106
System.out.println(name + ":member added[unknown]");
112
public void memberDisappeared(Member member) {
113
if (members.contains(member)) {
114
members.remove(member);
116
System.out.println(name + ":member disappeared[" + new String(member.getPayload(), "ASCII") + "; Thread:"+Thread.currentThread().getName()+"]");
117
} catch (Exception x) {
118
System.out.println(name + ":member disappeared[unknown]");