unicast_test.java

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

JAVA
181
字号
// $Id: UNICAST_Test.java,v 1.1 2005/08/24 13:35:07 belaban Exp $package org.jgroups.tests;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.View;import org.jgroups.debug.Simulator;import org.jgroups.protocols.DISCARD;import org.jgroups.protocols.UNICAST;import org.jgroups.stack.IpAddress;import org.jgroups.stack.Protocol;import java.nio.ByteBuffer;import java.util.Properties;import java.util.Vector;/** * Tests the UNICAST protocol * @author Bela Ban */public class UNICAST_Test extends TestCase {    IpAddress a1, a2;    Vector members;    View v;    Simulator s;    final int SIZE=1000; // bytes    final int NUM_MSGS=10000;    public UNICAST_Test(String name) {        super(name);    }    public void setUp() throws Exception {        super.setUp();    }    public void tearDown() throws Exception {        super.tearDown();        s.stop();    }    public void testReceptionOfAllMessages() throws Throwable {        UNICAST unicast=new UNICAST();        Properties props=new Properties();        props.setProperty("timeout", "500,1000,2000,3000");        unicast.setProperties(props);        Protocol[] stack=new Protocol[]{unicast};        createStack(stack);        _testReceptionOfAllMessages();    }    public void testReceptionOfAllMessagesWithDISCARD() throws Throwable {        UNICAST unicast=new UNICAST();        Properties props=new Properties();        props.setProperty("timeout", "500,1000,2000,3000");        unicast.setProperties(props);        DISCARD discard=new DISCARD();        props.clear();        props.setProperty("down", "0.1"); // discard all down message with 10% probability        discard.setProperties(props);        Protocol[] stack=new Protocol[]{unicast,discard};        createStack(stack);        _testReceptionOfAllMessages();    }    private static byte[] createPayload(int size, int seqno) {        ByteBuffer buf=ByteBuffer.allocate(size);        buf.putInt(seqno);        return buf.array();    }    /** Checks that messages 1 - NUM_MSGS are received in order */    class Receiver implements Simulator.Receiver {        int num_mgs_received=0, next=1;        Throwable exception=null;        boolean received_all=false;        public void receive(Event evt) {            if(evt.getType() == Event.MSG) {                if(exception != null)                return;                Message msg=(Message)evt.getArg();                ByteBuffer buf=ByteBuffer.wrap(msg.getRawBuffer());                int seqno=buf.getInt();                if(seqno != next) {                    exception=new Exception("expected seqno was " + next + ", but received " + seqno);                    return;                }                next++;                num_mgs_received++;                if(num_mgs_received % 1000 == 0)                    System.out.println("<== " + num_mgs_received);                if(num_mgs_received == NUM_MSGS) {                    synchronized(this) {                        received_all=true;                        this.notifyAll();                    }                }            }        }        public int getNumberOfReceivedMessages() {            return num_mgs_received;        }        public boolean receivedAll() {return received_all;}        public Throwable getException() {            return exception;        }    }    private void _testReceptionOfAllMessages() throws Throwable {        int num_received=0;        Receiver r=new Receiver();        s.setReceiver(r);        for(int i=1; i <= NUM_MSGS; i++) {            Message msg=new Message(a1, null, createPayload(SIZE, i)); // unicast message            Event evt=new Event(Event.MSG, msg);            s.send(evt);            if(i % 1000 == 0)                System.out.println("==> " + i);        }        int num_tries=10;        while((num_received=r.getNumberOfReceivedMessages()) != NUM_MSGS && num_tries > 0) {            if(r.getException() != null)                throw r.getException();            synchronized(r) {                try {r.wait(3000);}                catch(InterruptedException e) {}            }            num_tries--;        }        printStats(num_received);        assertTrue(num_received == NUM_MSGS);    }    private void createStack(Protocol[] stack) throws Exception {        a1=new IpAddress(1111);        members=new Vector();        members.add(a1);        v=new View(a1, 1, members);        s=new Simulator();        s.setLocalAddress(a1);        s.setView(v);        s.addMember(a1);        s.setProtocolStack(stack);        s.start();    }    private void printStats(int num_received) {        System.out.println("-- num received=" + num_received + ", stats:\n" + s.dumpStats());    }    public static Test suite() {        TestSuite s=new TestSuite(UNICAST_Test.class);        return s;    }    public static void main(String[] args) {        junit.textui.TestRunner.run(suite());    }}

⌨️ 快捷键说明

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