streamabletest.java

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

JAVA
288
字号
// $Id: StreamableTest.java,v 1.5 2006/09/09 13:16:19 belaban Exp $package org.jgroups.tests;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import org.jgroups.*;import org.jgroups.util.Util;import org.jgroups.conf.ClassConfigurator;import org.jgroups.protocols.PingHeader;import org.jgroups.protocols.UdpHeader;import org.jgroups.protocols.WanPipeAddress;import org.jgroups.protocols.PingRsp;import org.jgroups.stack.IpAddress;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.util.Vector;public class StreamableTest extends TestCase {    Message m1, m2;    public StreamableTest(String name) {        super(name);    }    static {        try {            ClassConfigurator.getInstance(true);        }        catch(ChannelException e) {            e.printStackTrace();        }    }    public void testStreamable() throws Exception {        byte[] buf={'b', 'e', 'l', 'a', 'b', 'a', 'n'};        byte[] tmp;        m1=new Message(null, null, buf, 0, 4);        m2=new Message(null, null, buf, 4, 3);        ByteArrayOutputStream output=new ByteArrayOutputStream();        DataOutputStream out=new DataOutputStream(output);        m1.writeTo(out);        out.close();        tmp=output.toByteArray();        output.close();        ByteArrayInputStream input=new ByteArrayInputStream(tmp);        DataInputStream in=new DataInputStream(input);        Message m3, m4;        m3=new Message(false);        m3.readFrom(in);        assertEquals(4, m3.getLength());        assertEquals(4, m3.getRawBuffer().length);        assertEquals(4, m3.getBuffer().length);        assertEquals(0, m3.getOffset());        output=new ByteArrayOutputStream();        out=new DataOutputStream(output);        // out.writeObject(m2);        m2.writeTo(out);        out.close();        tmp=output.toByteArray();        output.close();        System.out.println("-- serialized buffer is " + tmp.length + " bytes");        input=new ByteArrayInputStream(tmp);        in=new DataInputStream(input);        // m4=(Message)in.readObject();        m4=new Message();        m4.readFrom(in);        assertEquals(3, m4.getLength());        assertEquals(3, m4.getBuffer().length);        assertEquals(3, m4.getRawBuffer().length);        assertEquals(0, m4.getOffset());    }    public void testStreamable2() throws Exception {        byte[] buf={'b', 'e', 'l', 'a', 'b', 'a', 'n'};        Message msg=new Message(null, null, buf, 0, 4);        stream(msg);    }    public void testStreamable3() throws Exception {        byte[] buf={'b', 'e', 'l', 'a', 'b', 'a', 'n'};        Message msg=new Message(null, null, buf, 4, 3);        stream(msg);    }    public void testNullBuffer() throws Exception {        Message msg=new Message();        stream(msg);    }    public void testNonNullBuffer() throws Exception {        Message msg=new Message(null, null, "Hello world".getBytes());        stream(msg);    }    public void testNonNullAddress() throws Exception {        Address dest, src;        dest=new IpAddress("228.1.2.3", 5555);        src=new IpAddress("127.0.0.1", 6666);        Message msg=new Message(dest, src, "Hello world".getBytes());        stream(msg);    }    public void testHeaders() throws Exception {        Address dest, src;        dest=new IpAddress("228.1.2.3", 5555);        src=new IpAddress("127.0.0.1", 6666);        Message msg=new Message(dest, src, "Hello world".getBytes());        PingHeader hdr=new PingHeader(PingHeader.GET_MBRS_REQ, new PingRsp(src, src, true));        msg.putHeader("ping-header", hdr);        UdpHeader udp_hdr=new UdpHeader("bla");        msg.putHeader("udp-header", udp_hdr);        stream(msg);    }    public void testAdditionalData() throws Exception {        IpAddress dest, src;        dest=new IpAddress("228.1.2.3", 5555);        dest.setAdditionalData("foo".getBytes());        src=new IpAddress("127.0.0.1", 6666);        src.setAdditionalData("foobar".getBytes());        Message msg=new Message(dest, src, "Hello world".getBytes());        PingHeader hdr=new PingHeader(PingHeader.GET_MBRS_REQ, new PingRsp(src, src, false));        msg.putHeader("ping-header", hdr);        UdpHeader udp_hdr=new UdpHeader("bla");        msg.putHeader("udp-header", udp_hdr);        stream(msg);    }    public void testDifferentAddress() throws Exception {        Address dest, src;        dest=new WanPipeAddress("foo");        src=new WanPipeAddress("foobar");        Message msg=new Message(dest, src, "Hello world".getBytes());        PingHeader hdr=new PingHeader(PingHeader.GET_MBRS_REQ, new PingRsp(src, src, false));        msg.putHeader("ping-header", hdr);        UdpHeader udp_hdr=new UdpHeader("bla");        msg.putHeader("udp-header", udp_hdr);        stream(msg);    }    public void testMergeView() throws Exception {        Vector tmp_m1, tmp_m2 , m3, all, subgroups;        Address a,b,c,d,e,f;        View v1, v2, v3, v4, v5, view_all;        a=new IpAddress(1000);        b=new IpAddress(2000);        c=new IpAddress(3000);        d=new IpAddress(4000);        e=new IpAddress(5000);        f=new IpAddress(6000);        tmp_m1=new Vector(); tmp_m2=new Vector(); m3=new Vector(); all=new Vector(); subgroups=new Vector();        tmp_m1.add(a); tmp_m1.add(b); tmp_m1.add(c);        tmp_m2.add(d);        m3.add(e); m3.add(f);        all.add(a); all.add(b); all.add(c); all.add(d); all.add(e); all.add(f);        v1=new View(a, 1, tmp_m1);        v2=new MergeView(d, 2, tmp_m2, new Vector());        v3=new View(e, 3, m3);        v4=new MergeView(e, 4, m3, null);        v5=new View(e, 5, m3);        subgroups.add(v1);        subgroups.add(v2);        subgroups.add(v3);        subgroups.add(v4);        subgroups.add(v5);        view_all=new MergeView(a, 5, all, subgroups);        System.out.println("MergeView: " + view_all);        Vector sub=((MergeView)view_all).getSubgroups();        assertTrue(sub.get(0) instanceof View);        assertTrue(sub.get(1) instanceof MergeView);        assertTrue(sub.get(2) instanceof View);        assertTrue(sub.get(3) instanceof MergeView);        assertTrue(sub.get(4) instanceof View);        byte[] buf=Util.streamableToByteBuffer(view_all);        assertNotNull(buf);        assertTrue(buf.length > 0);        MergeView merge_view=(MergeView)Util.streamableFromByteBuffer(MergeView.class, buf);        assertNotNull(merge_view);        System.out.println("MergeView: " + merge_view);        sub=merge_view.getSubgroups();        assertTrue(sub.get(0) instanceof View);        assertTrue(sub.get(1) instanceof MergeView);        assertTrue(sub.get(2) instanceof View);        assertTrue(sub.get(3) instanceof MergeView);        assertTrue(sub.get(4) instanceof View);    }    private void stream(Message msg) throws Exception {        int length, bufLength;        byte[] tmp;        Message msg2;        Address src;        int num_headers=getNumHeaders(msg);        length=msg.getLength();        bufLength=getBufLength(msg);        src=msg.getSrc();        ByteArrayOutputStream output=new ByteArrayOutputStream();        DataOutputStream out=new DataOutputStream(output);        msg.writeTo(out);        out.close();        tmp=output.toByteArray();        output.close();        System.out.println("-- serialized buffer is " + tmp.length + " bytes");        ByteArrayInputStream input=new ByteArrayInputStream(tmp);        DataInputStream in=new DataInputStream(input);        msg2=new Message();        msg2.readFrom(in);        assertEquals(length, msg2.getLength());        assertEquals(bufLength, getBufLength(msg2));        // assertTrue(match(dest, msg2.getDest()));        assertNull(msg2.getDest()); // we don't marshal the destination address        assertTrue(match(src, msg2.getSrc()));        assertEquals(num_headers, getNumHeaders(msg2));    }    private int getNumHeaders(Message msg) {        return msg.getHeaders() != null? msg.getHeaders().size() : 0;    }    private boolean match(Address a1, Address a2) {        if(a1 == null && a2 == null)            return true;        if(a1 != null)            return a1.equals(a2);        else            return a2.equals(a1);    }//    private int getRawBufLength(Message msg) {//        return msg.getRawBuffer() != null? msg.getRawBuffer().length : 0;//    }    private int getBufLength(Message msg) {        return msg.getBuffer() != null? msg.getBuffer().length : 0;    }    public static Test suite() {        TestSuite s=new TestSuite(StreamableTest.class);        return s;    }    public static void main(String[] args) {        junit.textui.TestRunner.run(suite());    }}

⌨️ 快捷键说明

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