   dubbo-rpc/dubbo-rpc-rmi
   dubbo-rpc/dubbo-rpc-thrift
   dubbo-rpc/dubbo-rpc-webservice/
args.read(protocol);
        protocol.readMessageEnd();
        Assert.assertEquals("echoString", message.name);
        Assert.assertEquals(TMessageType.CALL, message.type);
        Assert.assertEquals("Hello, World!", args.getArg());
    }
    @Test
    public void testDecodeReplyResponse() throws Exception {
        URL url = URL.valueOf(ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName());
        Channel channel = new MockedChannel(url);
        RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(128);
        Request request = createRequest();
        DefaultFuture future = new DefaultFuture(channel, request, 10);
        TMessage message = new TMessage("echoString", TMessageType.REPLY, ThriftCodec.getSeqId());
        Demo.echoString_result methodResult = new Demo.echoString_result();
        methodResult.success = "Hello, World!";
        TTransport transport = new TIOStreamTransport(bos);
        TBinaryProtocol protocol = new TBinaryProtocol(transport);
        int messageLength, headerLength;
        
        protocol.writeI16(ThriftCodec.MAGIC);
        protocol.writeI32(Integer.MAX_VALUE);
        protocol.writeI16(Short.MAX_VALUE);
        protocol.writeByte(ThriftCodec.VERSION);
        protocol.writeString(Demo.Iface.class.getName());
        protocol.writeI64(request.getId());
        protocol.getTransport().flush();
        headerLength = bos.size();
        protocol.writeMessageBegin(message);
        methodResult.write(protocol);