disconnecttest.java
来自「JGRoups源码」· Java 代码 · 共 277 行
JAVA
277 行
// $Id: DisconnectTest.java,v 1.11 2006/10/23 16:16:20 belaban Exp $package org.jgroups.tests;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import org.jgroups.JChannel;import org.jgroups.Message;import org.jgroups.MessageListener;import org.jgroups.View;import org.jgroups.tests.stack.Utilities;import org.jgroups.blocks.PullPushAdapter;import org.jgroups.util.Promise;/** * Ensures that a disconnected channel reconnects correctly, for different * stack configurations. * * @author Ovidiu Feodorov <ovidiu@feodorov.com> * @author Bela Ban belaban@yahoo.com * @version $Revision: 1.11 $ **/public class DisconnectTest extends TestCase { private JChannel channel; private int routerPort; public DisconnectTest(String name) { super(name); } public void setUp() throws Exception { super.setUp(); } public void tearDown() throws Exception { super.tearDown(); if(channel != null) { channel.close(); channel=null; } } private String getTUNNELProps(int routerPort, int gossipPort) { return "TUNNEL(router_host=127.0.0.1;router_port=" + routerPort + "):" + "PING(gossip_host=127.0.0.1;gossip_port=" + gossipPort + "):" + "FD:" + "VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):" + "pbcast.NAKACK(gc_lag=100;retransmit_timeout=3000;" + "down_thread=true;up_thread=true):" + "pbcast.STABLE(desired_avg_gossip=20000;down_thread=false;" + "up_thread=false):" + "pbcast.GMS(join_timeout=50000;join_retry_timeout=2000;shun=false;" + "print_local_addr=true;down_thread=true;up_thread=true)"; } /** * Tests if the channel has a null local address after disconnect (using * TUNNEL). * * TO_DO: uncomment or delete after clarifying the semantics of * getLocalAddress() on a disconnected channel. * **/ public void testNullLocalAddress_TUNNEL() throws Exception { try { routerPort=Utilities.startGossipRouter(); String props = getTUNNELProps(routerPort, routerPort); channel = new JChannel(props); channel.connect("testgroup"); assertTrue(channel.getLocalAddress() != null); channel.disconnect(); assertNull(channel.getLocalAddress()); } finally { Utilities.stopGossipRouter(); } } /** * Tests connect-disconnect-connect sequence for a group with one member * (using default configuration). **/ public void testDisconnectConnectOne_Default() throws Exception { channel=new JChannel(); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup2"); View view=channel.getView(); assertEquals(1, view.size()); assertTrue(view.containsMember(channel.getLocalAddress())); } /** * Tests connect-disconnect-connect sequence for a group with two members * (using default configuration). **/ public void testDisconnectConnectTwo_Default() throws Exception { JChannel coordinator=new JChannel(); coordinator.connect("testgroup"); channel=new JChannel(); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup"); View view=channel.getView(); assertEquals(2, view.size()); assertTrue(view.containsMember(channel.getLocalAddress())); assertTrue(view.containsMember(coordinator.getLocalAddress())); coordinator.close(); } /** * Tests connect-disconnect-connect-send sequence for a group with two * members, using the default stack configuration. Assumes that default * configuration includes pbcast.NAKACK. Test case introduced before fixing * pbcast.NAKACK bug, which used to leave pbcast.NAKACK in a broken state * after DISCONNECT. Because of this problem, the channel couldn't be used * to multicast messages. **/ public void testDisconnectConnectSendTwo_Default() throws Exception { final Promise msgPromise=new Promise(); JChannel coordinator=new JChannel(); coordinator.connect("testgroup"); PullPushAdapter ppa= new PullPushAdapter(coordinator, new PromisedMessageListener(msgPromise)); ppa.start(); channel=new JChannel(); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup"); channel.send(new Message(null, null, "payload")); Message msg=(Message)msgPromise.getResult(20000); assertTrue(msg != null); assertEquals("payload", msg.getObject()); ppa.stop(); coordinator.close(); } /** * Tests connect-disconnect-connect sequence for a group with one member * (using TUNNEL). **/ public void testDisconnectConnectOne_TUNNEL() throws Exception { try { routerPort = Utilities.startGossipRouter(); String props=getTUNNELProps(routerPort, routerPort); channel=new JChannel(props); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup2"); View view=channel.getView(); assertEquals(1, view.size()); assertTrue(view.containsMember(channel.getLocalAddress())); } finally { Utilities.stopGossipRouter(); } } /** * Tests connect-disconnect-connect sequence for a group with two members * (using TUNNEL). **/ public void testDisconnectConnectTwo_TUNNEL() throws Exception { try { routerPort = Utilities.startGossipRouter(); String props=getTUNNELProps(routerPort, routerPort); // String props="tunnel.xml"; JChannel coordinator=new JChannel(props); coordinator.connect("testgroup"); channel=new JChannel(props); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup"); Thread.sleep(1000); View view=channel.getView(); assertEquals(2, view.size()); assertTrue(view.containsMember(channel.getLocalAddress())); assertTrue(view.containsMember(coordinator.getLocalAddress())); coordinator.close(); } finally { Utilities.stopGossipRouter(); } } /** * Tests connect-disconnect-connect-send sequence for a group with two * members, using TUNNEL. Test case introduced before fixing pbcast.NAKACK * bug, which used to leave pbcast.NAKACK in a broken state after * DISCONNECT. Because of this problem, the channel couldn't be used to * multicast messages. **/ public void testDisconnectConnectSendTwo_TUNNEL() throws Exception { try { routerPort = Utilities.startGossipRouter(); String props=getTUNNELProps(routerPort, routerPort); final Promise msgPromise=new Promise(); JChannel coordinator=new JChannel(props); coordinator.connect("testgroup"); PullPushAdapter ppa= new PullPushAdapter(coordinator, new PromisedMessageListener(msgPromise)); ppa.start(); channel=new JChannel(props); channel.connect("testgroup1"); channel.disconnect(); channel.connect("testgroup"); channel.send(new Message(null, null, "payload")); Message msg=(Message)msgPromise.getResult(20000); assertTrue(msg != null); assertEquals("payload", msg.getObject()); ppa.stop(); coordinator.close(); } finally { Utilities.stopGossipRouter(); } } public static Test suite() { return new TestSuite(DisconnectTest.class); } public static void main(String[] args) { String[] testCaseName={DisconnectTest.class.getName()}; junit.textui.TestRunner.main(testCaseName); } private static class PromisedMessageListener implements MessageListener { private Promise promise; public PromisedMessageListener(Promise promise) { this.promise=promise; } public byte[] getState() { return null; } public void receive(Message msg) { promise.setResult(msg); } public void setState(byte[] state) { } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?