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.ByteMessage;
022: import org.apache.catalina.tribes.Channel;
023: import org.apache.catalina.tribes.ChannelException;
024: import org.apache.catalina.tribes.ManagedChannel;
025: import org.apache.catalina.tribes.Member;
026: import org.apache.catalina.tribes.MembershipListener;
027: import org.apache.catalina.tribes.group.GroupChannel;
028: import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
029: import junit.framework.TestCase;
030:
031: /**
032: * <p>Title: </p>
033: *
034: * <p>Description: </p>
035: *
036: * <p>Company: </p>
037: *
038: * @author not attributable
039: * @version 1.0
040: */
041: public class TestTcpFailureDetector extends TestCase {
042: private TcpFailureDetector tcpFailureDetector1 = null;
043: private TcpFailureDetector tcpFailureDetector2 = null;
044: private ManagedChannel channel1 = null;
045: private ManagedChannel channel2 = null;
046: private TestMbrListener mbrlist1 = null;
047: private TestMbrListener mbrlist2 = null;
048:
049: protected void setUp() throws Exception {
050: super .setUp();
051: channel1 = new GroupChannel();
052: channel2 = new GroupChannel();
053: channel1.getMembershipService().setPayload(
054: "Channel-1".getBytes("ASCII"));
055: channel2.getMembershipService().setPayload(
056: "Channel-2".getBytes("ASCII"));
057: mbrlist1 = new TestMbrListener("Channel-1");
058: mbrlist2 = new TestMbrListener("Channel-2");
059: tcpFailureDetector1 = new TcpFailureDetector();
060: tcpFailureDetector2 = new TcpFailureDetector();
061: channel1.addInterceptor(tcpFailureDetector1);
062: channel2.addInterceptor(tcpFailureDetector2);
063: channel1.addMembershipListener(mbrlist1);
064: channel2.addMembershipListener(mbrlist2);
065: }
066:
067: public void clear() {
068: mbrlist1.members.clear();
069: mbrlist2.members.clear();
070: }
071:
072: public void testTcpSendFailureMemberDrop() throws Exception {
073: System.out.println("testTcpSendFailureMemberDrop()");
074: clear();
075: channel1.start(channel1.DEFAULT);
076: channel2.start(channel2.DEFAULT);
077: //Thread.sleep(1000);
078: assertEquals("Expecting member count to be equal",
079: mbrlist1.members.size(), mbrlist2.members.size());
080: channel2.stop(channel2.SND_RX_SEQ);
081: ByteMessage msg = new ByteMessage(new byte[1024]);
082: try {
083: channel1.send(channel1.getMembers(), msg, 0);
084: assertEquals("Message send should have failed.", true,
085: false);
086: } catch (ChannelException x) {
087:
088: }
089: assertEquals("Expecting member count to not be equal",
090: mbrlist1.members.size() + 1, mbrlist2.members.size());
091: channel1.stop(Channel.DEFAULT);
092: channel2.stop(Channel.DEFAULT);
093: }
094:
095: public void testTcpFailureMemberAdd() throws Exception {
096: System.out.println("testTcpFailureMemberAdd()");
097: clear();
098: channel1.start(channel1.DEFAULT);
099: channel2.start(channel2.SND_RX_SEQ);
100: channel2.start(channel2.SND_TX_SEQ);
101: channel2.start(channel2.MBR_RX_SEQ);
102: channel2.stop(channel2.SND_RX_SEQ);
103: channel2.start(channel2.MBR_TX_SEQ);
104: //Thread.sleep(1000);
105: assertEquals("Expecting member count to not be equal",
106: mbrlist1.members.size() + 1, mbrlist2.members.size());
107: channel1.stop(Channel.DEFAULT);
108: channel2.stop(Channel.DEFAULT);
109: }
110:
111: public void testTcpMcastFail() throws Exception {
112: System.out.println("testTcpMcastFail()");
113: clear();
114: channel1.start(channel1.DEFAULT);
115: channel2.start(channel2.DEFAULT);
116: //Thread.sleep(1000);
117: assertEquals("Expecting member count to be equal",
118: mbrlist1.members.size(), mbrlist2.members.size());
119: channel2.stop(channel2.MBR_TX_SEQ);
120: ByteMessage msg = new ByteMessage(new byte[1024]);
121: try {
122: Thread.sleep(5000);
123: assertEquals("Expecting member count to be equal",
124: mbrlist1.members.size(), mbrlist2.members.size());
125: channel1.send(channel1.getMembers(), msg, 0);
126: } catch (ChannelException x) {
127: assertEquals("Message send should have succeeded.", true,
128: false);
129: }
130: channel1.stop(Channel.DEFAULT);
131: channel2.stop(Channel.DEFAULT);
132: }
133:
134: protected void tearDown() throws Exception {
135: tcpFailureDetector1 = null;
136: tcpFailureDetector2 = null;
137: try {
138: channel1.stop(Channel.DEFAULT);
139: } catch (Exception ignore) {
140: }
141: channel1 = null;
142: try {
143: channel2.stop(Channel.DEFAULT);
144: } catch (Exception ignore) {
145: }
146: channel2 = null;
147: super .tearDown();
148: }
149:
150: public class TestMbrListener implements MembershipListener {
151: public String name = null;
152:
153: public TestMbrListener(String name) {
154: this .name = name;
155: }
156:
157: public ArrayList members = new ArrayList();
158:
159: public void memberAdded(Member member) {
160: if (!members.contains(member)) {
161: members.add(member);
162: try {
163: System.out.println(name + ":member added["
164: + new String(member.getPayload(), "ASCII")
165: + "]");
166: } catch (Exception x) {
167: System.out.println(name + ":member added[unknown]");
168: }
169: }
170: }
171:
172: public void memberDisappeared(Member member) {
173: if (members.contains(member)) {
174: members.remove(member);
175: try {
176: System.out.println(name + ":member disappeared["
177: + new String(member.getPayload(), "ASCII")
178: + "]");
179: } catch (Exception x) {
180: System.out.println(name
181: + ":member disappeared[unknown]");
182: }
183: }
184: }
185:
186: }
187:
188: }
|