001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.catalina.tribes.test.membership;
018:
019: import java.util.ArrayList;
020:
021: import org.apache.catalina.tribes.Channel;
022: import org.apache.catalina.tribes.ManagedChannel;
023: import org.apache.catalina.tribes.Member;
024: import org.apache.catalina.tribes.MembershipListener;
025: import org.apache.catalina.tribes.group.GroupChannel;
026: import junit.framework.TestCase;
027:
028: public class TestMemberArrival extends TestCase {
029: private static int count = 10;
030: private ManagedChannel[] channels = new ManagedChannel[count];
031: private TestMbrListener[] listeners = new TestMbrListener[count];
032:
033: protected void setUp() throws Exception {
034: super .setUp();
035: for (int i = 0; i < channels.length; i++) {
036: channels[i] = new GroupChannel();
037: channels[i].getMembershipService().setPayload(
038: ("Channel-" + (i + 1)).getBytes("ASCII"));
039: listeners[i] = new TestMbrListener(("Listener-" + (i + 1)));
040: channels[i].addMembershipListener(listeners[i]);
041:
042: }
043: }
044:
045: public void clear() {
046: for (int i = 0; i < channels.length; i++) {
047: listeners[i].members.clear();
048: }
049: }
050:
051: public void testMemberArrival() throws Exception {
052: //purpose of this test is to make sure that we have received all the members
053: //that we can expect before the start method returns
054: Thread[] threads = new Thread[channels.length];
055: for (int i = 0; i < channels.length; i++) {
056: final Channel channel = channels[i];
057: Thread t = new Thread() {
058: public void run() {
059: try {
060: channel.start(Channel.DEFAULT);
061: } catch (Exception x) {
062: throw new RuntimeException(x);
063: }
064: }
065: };
066: threads[i] = t;
067: }
068: for (int i = 0; i < threads.length; i++)
069: threads[i].start();
070: for (int i = 0; i < threads.length; i++)
071: threads[i].join();
072: Thread.sleep(2000);
073: System.out.println("All channels started.");
074: for (int i = listeners.length - 1; i >= 0; i--)
075: assertEquals("Checking member arrival length",
076: channels.length - 1, listeners[i].members.size());
077: }
078:
079: protected void tearDown() throws Exception {
080:
081: for (int i = 0; i < channels.length; i++) {
082: try {
083: channels[i].stop(Channel.DEFAULT);
084: } catch (Exception ignore) {
085: }
086: }
087: super .tearDown();
088: }
089:
090: public class TestMbrListener implements MembershipListener {
091: public String name = null;
092:
093: public TestMbrListener(String name) {
094: this .name = name;
095: }
096:
097: public ArrayList members = new ArrayList();
098:
099: public void memberAdded(Member member) {
100: if (!members.contains(member)) {
101: members.add(member);
102: try {
103: System.out.println(name + ":member added["
104: + new String(member.getPayload(), "ASCII")
105: + "; Thread:"
106: + Thread.currentThread().getName() + "]");
107: } catch (Exception x) {
108: System.out.println(name + ":member added[unknown]");
109: }
110: }
111: }
112:
113: public void memberDisappeared(Member member) {
114: if (members.contains(member)) {
115: members.remove(member);
116: try {
117: System.out.println(name + ":member disappeared["
118: + new String(member.getPayload(), "ASCII")
119: + "; Thread:"
120: + Thread.currentThread().getName() + "]");
121: } catch (Exception x) {
122: System.out.println(name
123: + ":member disappeared[unknown]");
124: }
125: }
126: }
127:
128: }
129:
130: }
|