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: import org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor;
028: import org.apache.catalina.tribes.util.UUIDGenerator;
029:
030: public class TestDomainFilter extends TestCase {
031: private static int count = 10;
032: private ManagedChannel[] channels = new ManagedChannel[count];
033: private TestMbrListener[] listeners = new TestMbrListener[count];
034:
035: protected void setUp() throws Exception {
036: super .setUp();
037: for (int i = 0; i < channels.length; i++) {
038: channels[i] = new GroupChannel();
039: channels[i].getMembershipService().setPayload(
040: ("Channel-" + (i + 1)).getBytes("ASCII"));
041: listeners[i] = new TestMbrListener(("Listener-" + (i + 1)));
042: channels[i].addMembershipListener(listeners[i]);
043: DomainFilterInterceptor filter = new DomainFilterInterceptor();
044: filter.setDomain(UUIDGenerator.randomUUID(false));
045: channels[i].addInterceptor(filter);
046: }
047: }
048:
049: public void clear() {
050: for (int i = 0; i < channels.length; i++) {
051: listeners[i].members.clear();
052: }
053: }
054:
055: public void testMemberArrival() throws Exception {
056: //purpose of this test is to make sure that we have received all the members
057: //that we can expect before the start method returns
058: Thread[] threads = new Thread[channels.length];
059: for (int i = 0; i < channels.length; i++) {
060: final Channel channel = channels[i];
061: Thread t = new Thread() {
062: public void run() {
063: try {
064: channel.start(Channel.DEFAULT);
065: } catch (Exception x) {
066: throw new RuntimeException(x);
067: }
068: }
069: };
070: threads[i] = t;
071: }
072: for (int i = 0; i < threads.length; i++)
073: threads[i].start();
074: for (int i = 0; i < threads.length; i++)
075: threads[i].join();
076: System.out.println("All channels started.");
077: for (int i = listeners.length - 1; i >= 0; i--)
078: assertEquals("Checking member arrival length", 0,
079: listeners[i].members.size());
080: }
081:
082: protected void tearDown() throws Exception {
083:
084: for (int i = 0; i < channels.length; i++) {
085: try {
086: channels[i].stop(Channel.DEFAULT);
087: } catch (Exception ignore) {
088: }
089: }
090: super .tearDown();
091: }
092:
093: public class TestMbrListener implements MembershipListener {
094: public String name = null;
095:
096: public TestMbrListener(String name) {
097: this .name = name;
098: }
099:
100: public ArrayList members = new ArrayList();
101:
102: public void memberAdded(Member member) {
103: if (!members.contains(member)) {
104: members.add(member);
105: try {
106: System.out.println(name + ":member added["
107: + new String(member.getPayload(), "ASCII")
108: + "; Thread:"
109: + Thread.currentThread().getName() + "]");
110: } catch (Exception x) {
111: System.out.println(name + ":member added[unknown]");
112: }
113: }
114: }
115:
116: public void memberDisappeared(Member member) {
117: if (members.contains(member)) {
118: members.remove(member);
119: try {
120: System.out.println(name + ":member disappeared["
121: + new String(member.getPayload(), "ASCII")
122: + "; Thread:"
123: + Thread.currentThread().getName() + "]");
124: } catch (Exception x) {
125: System.out.println(name
126: + ":member disappeared[unknown]");
127: }
128: }
129: }
130:
131: }
132:
133: }
|