Search in sources :

Example 16 with Request

use of com.alibaba.dubbo.remoting.exchange.Request in project dubbo by alibaba.

the class ExchangeCodecTest method test_Decode_Return_Request_Heartbeat_Object.

@Test
public void test_Decode_Return_Request_Heartbeat_Object() throws IOException {
    //|10011111|20-stats=ok|id=0|length=0
    byte[] header = new byte[] { MAGIC_HIGH, MAGIC_LOW, (byte) 0xff, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    byte[] request = getRequestBytes(null, header);
    Request obj = (Request) decode(request);
    Assert.assertEquals(null, obj.getData());
    Assert.assertEquals(true, obj.isTwoWay());
    Assert.assertEquals(true, obj.isHeartbeat());
    Assert.assertEquals("2.0.0", obj.getVersion());
    System.out.println(obj);
}
Also used : Request(com.alibaba.dubbo.remoting.exchange.Request) Test(org.junit.Test)

Example 17 with Request

use of com.alibaba.dubbo.remoting.exchange.Request in project dubbo by alibaba.

the class ExchangeCodecTest method test_Decode_Return_Request_Event_Object.

@Test
public void test_Decode_Return_Request_Event_Object() throws IOException {
    //|10011111|20-stats=ok|id=0|length=0
    byte[] header = new byte[] { MAGIC_HIGH, MAGIC_LOW, (byte) 0xff, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    Person person = new Person();
    byte[] request = getRequestBytes(person, header);
    Request obj = (Request) decode(request);
    Assert.assertEquals(person, obj.getData());
    Assert.assertEquals(true, obj.isTwoWay());
    Assert.assertEquals(true, obj.isEvent());
    Assert.assertEquals("2.0.0", obj.getVersion());
    System.out.println(obj);
}
Also used : Request(com.alibaba.dubbo.remoting.exchange.Request) Test(org.junit.Test)

Example 18 with Request

use of com.alibaba.dubbo.remoting.exchange.Request in project dubbo by alibaba.

the class ExchangeCodecTest method test_Decode_Return_Request_Object.

@Test
public void test_Decode_Return_Request_Object() throws IOException {
    //|10011111|20-stats=ok|id=0|length=0
    byte[] header = new byte[] { MAGIC_HIGH, MAGIC_LOW, (byte) 0xdf, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    Person person = new Person();
    byte[] request = getRequestBytes(person, header);
    Request obj = (Request) decode(request);
    Assert.assertEquals(person, obj.getData());
    Assert.assertEquals(true, obj.isTwoWay());
    Assert.assertEquals(false, obj.isHeartbeat());
    Assert.assertEquals("2.0.0", obj.getVersion());
    System.out.println(obj);
}
Also used : Request(com.alibaba.dubbo.remoting.exchange.Request) Test(org.junit.Test)

Example 19 with Request

use of com.alibaba.dubbo.remoting.exchange.Request in project dubbo by alibaba.

the class ThriftCodecTest method testEncodeRequest.

@Test
public void testEncodeRequest() throws Exception {
    Request request = createRequest();
    ChannelBuffer output = ChannelBuffers.dynamicBuffer(1024);
    codec.encode(channel, output, request);
    byte[] bytes = new byte[output.readableBytes()];
    output.readBytes(bytes);
    ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
    TTransport transport = new TIOStreamTransport(bis);
    TBinaryProtocol protocol = new TBinaryProtocol(transport);
    // frame
    byte[] length = new byte[4];
    transport.read(length, 0, 4);
    if (bis.markSupported()) {
        bis.mark(0);
    }
    // magic
    Assert.assertEquals(ThriftCodec.MAGIC, protocol.readI16());
    // message length
    int messageLength = protocol.readI32();
    Assert.assertEquals(messageLength + 4, bytes.length);
    // header length
    short headerLength = protocol.readI16();
    // version
    Assert.assertEquals(ThriftCodec.VERSION, protocol.readByte());
    // service name
    Assert.assertEquals(Demo.Iface.class.getName(), protocol.readString());
    // dubbo request id
    Assert.assertEquals(request.getId(), protocol.readI64());
    // test message header length
    if (bis.markSupported()) {
        bis.reset();
        bis.skip(headerLength);
    }
    TMessage message = protocol.readMessageBegin();
    Demo.echoString_args args = new Demo.echoString_args();
    args.read(protocol);
    protocol.readMessageEnd();
    Assert.assertEquals("echoString", message.name);
    Assert.assertEquals(TMessageType.CALL, message.type);
    Assert.assertEquals("Hello, World!", args.getArg());
}
Also used : Demo(com.alibaba.dubbo.rpc.gen.thrift.Demo) Request(com.alibaba.dubbo.remoting.exchange.Request) TIOStreamTransport(org.apache.thrift.transport.TIOStreamTransport) ChannelBuffer(com.alibaba.dubbo.remoting.buffer.ChannelBuffer) TBinaryProtocol(org.apache.thrift.protocol.TBinaryProtocol) ByteArrayInputStream(java.io.ByteArrayInputStream) TMessage(org.apache.thrift.protocol.TMessage) TTransport(org.apache.thrift.transport.TTransport) Test(org.junit.Test)

Example 20 with Request

use of com.alibaba.dubbo.remoting.exchange.Request in project dubbo by alibaba.

the class ThriftCodecTest method testEncodeReplyResponse.

@Test
public void testEncodeReplyResponse() throws Exception {
    URL url = URL.valueOf(ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName());
    Channel channel = new MockedChannel(url);
    Request request = createRequest();
    RpcResult rpcResult = new RpcResult();
    rpcResult.setResult("Hello, World!");
    Response response = new Response();
    response.setResult(rpcResult);
    response.setId(request.getId());
    ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024);
    ThriftCodec.RequestData rd = ThriftCodec.RequestData.create(ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString");
    ThriftCodec.cachedRequest.putIfAbsent(request.getId(), rd);
    codec.encode(channel, bos, response);
    byte[] buf = new byte[bos.writerIndex() - 4];
    System.arraycopy(bos.array(), 4, buf, 0, bos.writerIndex() - 4);
    ByteArrayInputStream bis = new ByteArrayInputStream(buf);
    if (bis.markSupported()) {
        bis.mark(0);
    }
    TIOStreamTransport transport = new TIOStreamTransport(bis);
    TBinaryProtocol protocol = new TBinaryProtocol(transport);
    Assert.assertEquals(ThriftCodec.MAGIC, protocol.readI16());
    Assert.assertEquals(protocol.readI32() + 4, bos.writerIndex());
    int headerLength = protocol.readI16();
    Assert.assertEquals(ThriftCodec.VERSION, protocol.readByte());
    Assert.assertEquals(Demo.Iface.class.getName(), protocol.readString());
    Assert.assertEquals(request.getId(), protocol.readI64());
    if (bis.markSupported()) {
        bis.reset();
        bis.skip(headerLength);
    }
    TMessage message = protocol.readMessageBegin();
    Assert.assertEquals("echoString", message.name);
    Assert.assertEquals(TMessageType.REPLY, message.type);
    Assert.assertEquals(ThriftCodec.getSeqId(), message.seqid);
    Demo.echoString_result result = new Demo.echoString_result();
    result.read(protocol);
    protocol.readMessageEnd();
    Assert.assertEquals(rpcResult.getValue(), result.getSuccess());
}
Also used : Demo(com.alibaba.dubbo.rpc.gen.thrift.Demo) Channel(com.alibaba.dubbo.remoting.Channel) Request(com.alibaba.dubbo.remoting.exchange.Request) RpcResult(com.alibaba.dubbo.rpc.RpcResult) TIOStreamTransport(org.apache.thrift.transport.TIOStreamTransport) URL(com.alibaba.dubbo.common.URL) ChannelBuffer(com.alibaba.dubbo.remoting.buffer.ChannelBuffer) Response(com.alibaba.dubbo.remoting.exchange.Response) TBinaryProtocol(org.apache.thrift.protocol.TBinaryProtocol) ByteArrayInputStream(java.io.ByteArrayInputStream) TMessage(org.apache.thrift.protocol.TMessage) Test(org.junit.Test)

Aggregations

Request (com.alibaba.dubbo.remoting.exchange.Request)38 Test (org.junit.Test)22 Response (com.alibaba.dubbo.remoting.exchange.Response)18 Channel (com.alibaba.dubbo.remoting.Channel)14 ExchangeChannel (com.alibaba.dubbo.remoting.exchange.ExchangeChannel)10 ChannelBuffer (com.alibaba.dubbo.remoting.buffer.ChannelBuffer)8 RemotingException (com.alibaba.dubbo.remoting.RemotingException)7 TMessage (org.apache.thrift.protocol.TMessage)7 HeaderExchangeHandler (com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler)6 Demo (com.alibaba.dubbo.rpc.gen.thrift.Demo)6 TBinaryProtocol (org.apache.thrift.protocol.TBinaryProtocol)6 TIOStreamTransport (org.apache.thrift.transport.TIOStreamTransport)6 DefaultFuture (com.alibaba.dubbo.remoting.exchange.support.DefaultFuture)5 RpcResult (com.alibaba.dubbo.rpc.RpcResult)5 URL (com.alibaba.dubbo.common.URL)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 Serialization (com.alibaba.dubbo.common.serialize.Serialization)3 ExchangeHandler (com.alibaba.dubbo.remoting.exchange.ExchangeHandler)3 RpcInvocation (com.alibaba.dubbo.rpc.RpcInvocation)3 RandomAccessByteArrayOutputStream (com.alibaba.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream)3