/** * @deprecated use {@link #inboundMessages()} */ @Deprecated public Queue<Object> lastInboundBuffer() { return inboundMessages(); }
/** * Called for each inbound message. */ protected void handleInboundMessage(Object msg) { inboundMessages().add(msg); }
/** * @deprecated use {@link #inboundMessages()} */ @Deprecated public Queue<Object> lastInboundBuffer() { return inboundMessages(); }
/** * Called for each inbound message. */ protected void handleInboundMessage(Object msg) { inboundMessages().add(msg); }
/** * Called for each inbound message. */ protected void handleInboundMessage(Object msg) { inboundMessages().add(msg); }
/** * @deprecated use {@link #inboundMessages()} */ @Deprecated public Queue<Object> lastInboundBuffer() { return inboundMessages(); }
@Test public void shouldDecodeFullChunk() { // whole chunk with header and body arrives at once ByteBuf input = buffer(); input.writeShort( 7 ); input.writeByte( 1 ); input.writeByte( 11 ); input.writeByte( 2 ); input.writeByte( 22 ); input.writeByte( 3 ); input.writeByte( 33 ); input.writeByte( 4 ); // after buffer is written there should be something to read on the other side assertTrue( channel.writeInbound( input ) ); assertTrue( channel.finish() ); // there should only be a single chunk available for reading assertEquals( 1, channel.inboundMessages().size() ); // it should have no size header and expected body assertByteBufEquals( input.slice( 2, 7 ), channel.readInbound() ); }
@Test public void shouldDecodeMaxSizeChunk() { byte[] message = new byte[0xFFFF]; ByteBuf input = buffer(); input.writeShort( message.length ); input.writeBytes( message ); assertTrue( channel.writeInbound( input ) ); assertTrue( channel.finish() ); assertEquals( 1, channel.inboundMessages().size() ); assertByteBufEquals( wrappedBuffer( message ), channel.readInbound() ); } }
@Test public void shouldDecodeMultipleConsecutiveMessages() { channel.writeInbound( wrappedBuffer( new byte[]{1, 2, 3} ) ); channel.writeInbound( wrappedBuffer( new byte[0] ) ); channel.writeInbound( wrappedBuffer( new byte[]{4, 5} ) ); channel.writeInbound( wrappedBuffer( new byte[]{6} ) ); channel.writeInbound( wrappedBuffer( new byte[0] ) ); channel.writeInbound( wrappedBuffer( new byte[]{7, 8} ) ); channel.writeInbound( wrappedBuffer( new byte[]{9, 10} ) ); channel.writeInbound( wrappedBuffer( new byte[0] ) ); assertEquals( 3, channel.inboundMessages().size() ); assertByteBufEquals( wrappedBuffer( new byte[]{1, 2, 3} ), channel.readInbound() ); assertByteBufEquals( wrappedBuffer( new byte[]{4, 5, 6} ), channel.readInbound() ); assertByteBufEquals( wrappedBuffer( new byte[]{7, 8, 9, 10} ), channel.readInbound() ); }
@Test public void shouldDecodeMessageWithMultipleChunks() { assertFalse( channel.writeInbound( wrappedBuffer( new byte[]{1, 2, 3} ) ) ); assertFalse( channel.writeInbound( wrappedBuffer( new byte[]{4, 5} ) ) ); assertFalse( channel.writeInbound( wrappedBuffer( new byte[]{6, 7, 8} ) ) ); assertTrue( channel.writeInbound( wrappedBuffer( new byte[0] ) ) ); assertTrue( channel.finish() ); assertEquals( 1, channel.inboundMessages().size() ); assertByteBufEquals( wrappedBuffer( new byte[]{1, 2, 3, 4, 5, 6, 7, 8} ), channel.readInbound() ); }
@Test public void shouldDecodeMessageWithSingleChunk() { assertFalse( channel.writeInbound( wrappedBuffer( new byte[]{1, 2, 3, 4, 5} ) ) ); assertTrue( channel.writeInbound( wrappedBuffer( new byte[0] ) ) ); assertTrue( channel.finish() ); assertEquals( 1, channel.inboundMessages().size() ); assertByteBufEquals( wrappedBuffer( new byte[]{1, 2, 3, 4, 5} ), channel.readInbound() ); }
assertEquals( 1, channel.inboundMessages().size() );
@Test public void shouldDecodeEmptyChunk() { // chunk contains just the size header which is zero ByteBuf input = copyShort( 0 ); assertTrue( channel.writeInbound( input ) ); assertTrue( channel.finish() ); // there should only be a single chunk available for reading assertEquals( 1, channel.inboundMessages().size() ); // it should have no size header and empty body assertByteBufEquals( wrappedBuffer( new byte[0] ), channel.readInbound() ); }
@Test public void shouldHandleHandshakeFollowedImmediatelyByMessage() { // Given BoltProtocol protocol = newBoltProtocol( 1 ); BoltProtocolFactory handlerFactory = newProtocolFactory( 1, protocol ); EmbeddedChannel channel = new EmbeddedChannel( new ProtocolHandshaker( handlerFactory, boltChannel, logProvider, false, true ) ); // When ByteBuf input = Unpooled.wrappedBuffer( // create handshake data new byte[]{(byte) 0x60, (byte) 0x60, (byte) 0xB0, (byte) 0x17}, // preamble new byte[]{0, 0, 0, 0}, // first choice - no protocol new byte[]{0, 0, 0, 1}, // second choise - protocol 1 new byte[]{0, 0, 0, 0}, // third choice - no protocol new byte[]{0, 0, 0, 0}, // fourth choice - no protocol new byte[]{1, 2, 3, 4} ); // this is a message channel.writeInbound( input ); // Then assertEquals( 1, channel.outboundMessages().size() ); assertByteBufEquals( Unpooled.buffer().writeInt( 1 ), channel.readOutbound() ); assertEquals( 1, channel.inboundMessages().size() ); assertByteBufEquals( Unpooled.wrappedBuffer( new byte[]{1, 2, 3, 4} ), channel.readInbound() ); thrown.expect( NoSuchElementException.class ); channel.pipeline().remove( ProtocolHandshaker.class ); assertTrue( channel.isActive() ); verify( protocol ).install(); }
/** * @deprecated use {@link #inboundMessages()} */ @Deprecated public Queue<Object> lastInboundBuffer() { return inboundMessages(); }
/** * Called for each inbound message. */ protected void handleInboundMessage(Object msg) { inboundMessages().add(msg); }
/** * @deprecated use {@link #inboundMessages()} */ @Deprecated public Queue<Object> lastInboundBuffer() { return inboundMessages(); }
/** * Called for each inbound message. */ protected void handleInboundMessage(Object msg) { inboundMessages().add(msg); }
private void testServerToClient(Message msg) { EmbeddedChannel serverChannel = new EmbeddedChannel(new FileRegionEncoder(), MessageEncoder.INSTANCE); serverChannel.writeOutbound(msg); EmbeddedChannel clientChannel = new EmbeddedChannel( NettyUtils.createFrameDecoder(), MessageDecoder.INSTANCE); while (!serverChannel.outboundMessages().isEmpty()) { clientChannel.writeInbound(serverChannel.readOutbound()); } assertEquals(1, clientChannel.inboundMessages().size()); assertEquals(msg, clientChannel.readInbound()); }
private void testClientToServer(Message msg) { EmbeddedChannel clientChannel = new EmbeddedChannel(new FileRegionEncoder(), MessageEncoder.INSTANCE); clientChannel.writeOutbound(msg); EmbeddedChannel serverChannel = new EmbeddedChannel( NettyUtils.createFrameDecoder(), MessageDecoder.INSTANCE); while (!clientChannel.outboundMessages().isEmpty()) { serverChannel.writeOneInbound(clientChannel.readOutbound()); } assertEquals(1, serverChannel.inboundMessages().size()); assertEquals(msg, serverChannel.readInbound()); }