connecttest.java

来自「JGRoups源码」· Java 代码 · 共 193 行

JAVA
193
字号
// $Id: ConnectTest.java,v 1.8 2006/08/08 08:13:10 belaban Exp $package org.jgroups.tests;import junit.framework.TestCase;import org.jgroups.JChannel;import org.jgroups.Message;import org.jgroups.MessageListener;import org.jgroups.View;import org.jgroups.blocks.PullPushAdapter;import org.jgroups.util.Promise;import org.jgroups.util.Util;/** * Runs through multiple channel connect and disconnects, without closing the channel. */public class ConnectTest extends TestCase {    JChannel channel;    final int TIMES=10;    String props="UDP(mcast_addr=228.8.8.8;mcast_port=45566;ip_ttl=32;" +            "mcast_send_buf_size=150000;mcast_recv_buf_size=80000;" +            "enable_bundling=true;use_incoming_packet_handler=true;loopback=true):" +            "PING(timeout=2000;num_initial_members=3):" +            "MERGE2(min_interval=5000;max_interval=10000):" +            "FD_SOCK:" +            "VERIFY_SUSPECT(timeout=1500):" +            "pbcast.NAKACK(gc_lag=50;retransmit_timeout=600,1200,2400,4800):" +            "UNICAST(timeout=600,1200,2400):" +            "pbcast.STABLE(desired_avg_gossip=20000):" +            "FRAG(frag_size=4096;down_thread=false;up_thread=false):" +            "pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;" +            "shun=true;print_local_addr=false)";    public ConnectTest(String name) {        super(name);    }    public void tearDown() throws Exception {        super.tearDown();        if(channel != null) {            channel.close();            channel = null;        }    }    void doIt(int times) {        for(int i=0; i < times; i++) {            System.out.println("\nAttempt #" + (i + 1));            System.out.print("Connecting to channel: ");            try {                channel.connect("ConnectTest");                System.out.println("-- connected: " + channel.getView() + " --");            }            catch(Exception e) {                System.out.println("-- connection failed --");                System.err.println(e);            }            System.out.print("Disconnecting from channel: ");            channel.disconnect();            System.out.println("-- disconnected --");        }    }    public void testConnectAndDisconnect() throws Exception {        System.out.print("Creating channel: ");        channel=new JChannel(props);        System.out.println("-- created --");        doIt(TIMES);        System.out.print("Closing channel: ");        channel.close();        System.out.println("-- closed --");        System.out.println("Remaining threads are:");        Util.printThreads();    }    public void testDisconnectConnectOne() throws Exception {        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()));        channel.close();        System.out.println("Remaining threads are:");        Util.printThreads();    }    /**     * Tests connect-disconnect-connect sequence for a group with two members     **/    public void testDisconnectConnectTwo() throws Exception {        View     view;        JChannel coordinator=new JChannel(props);        coordinator.connect("testgroup");        view=coordinator.getView();        System.out.println("-- view for coordinator: " + view);        channel=new JChannel(props);        channel.connect("testgroup1");        view=channel.getView();        System.out.println("-- view for channel: " + view);        channel.disconnect();        channel.connect("testgroup");        view=channel.getView();        System.out.println("-- view for channel: " + view);        assertEquals(2, view.size());        assertTrue(view.containsMember(channel.getLocalAddress()));        assertTrue(view.containsMember(coordinator.getLocalAddress()));        coordinator.close();        channel.close();        System.out.println("Remaining threads are:");        Util.printThreads();    }    /**     * Tests connect-disconnect-connect-send sequence for a group with two     * members. 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() throws Exception {        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();        channel.close();        System.out.println("Remaining threads are:");        Util.printThreads();    }    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) {        }    }    public static void main(String[] args) {        String[] testCaseName={ConnectTest.class.getName()};        junit.textui.TestRunner.main(testCaseName);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?