You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/01/09 15:24:44 UTC
[08/34] qpid-proton git commit: PROTON-1385: remove proton-j from the
existing repo, it now has its own repo at:
https://git-wip-us.apache.org/repos/asf/qpid-proton-j.git
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/SaslFrameParserTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/SaslFrameParserTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/SaslFrameParserTest.java
deleted file mode 100644
index 31dd200..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/SaslFrameParserTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.proton.engine.impl;
-
-import static org.mockito.Mockito.*;
-import static org.junit.Assert.*;
-import static org.junit.matchers.JUnitMatchers.containsString;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.proton.amqp.Binary;
-import org.apache.qpid.proton.amqp.Symbol;
-import org.apache.qpid.proton.amqp.security.SaslFrameBody;
-import org.apache.qpid.proton.amqp.security.SaslInit;
-import org.apache.qpid.proton.amqp.transport.FrameBody;
-import org.apache.qpid.proton.amqp.transport.Open;
-import org.apache.qpid.proton.codec.AMQPDefinedTypes;
-import org.apache.qpid.proton.codec.ByteBufferDecoder;
-import org.apache.qpid.proton.codec.DecodeException;
-import org.apache.qpid.proton.codec.DecoderImpl;
-import org.apache.qpid.proton.codec.EncoderImpl;
-import org.apache.qpid.proton.engine.TransportException;
-import org.junit.Test;
-
-/**
- * TODO test case where header is malformed
- * TODO test case where input provides frame and half etc
- */
-public class SaslFrameParserTest
-{
- private final SaslFrameHandler _mockSaslFrameHandler = mock(SaslFrameHandler.class);
- private final ByteBufferDecoder _mockDecoder = mock(ByteBufferDecoder.class);
- private final SaslFrameParser _frameParser;
- private final SaslFrameParser _frameParserWithMockDecoder = new SaslFrameParser(_mockSaslFrameHandler, _mockDecoder);
- private final AmqpFramer _amqpFramer = new AmqpFramer();
-
- private final SaslInit _saslFrameBody;
- private final ByteBuffer _saslFrameBytes;
-
- public SaslFrameParserTest()
- {
- DecoderImpl decoder = new DecoderImpl();
- EncoderImpl encoder = new EncoderImpl(decoder);
- AMQPDefinedTypes.registerAllTypes(decoder,encoder);
-
- _frameParser = new SaslFrameParser(_mockSaslFrameHandler, decoder);
- _saslFrameBody = new SaslInit();
- _saslFrameBody.setMechanism(Symbol.getSymbol("unused"));
- _saslFrameBytes = ByteBuffer.wrap(_amqpFramer.generateSaslFrame(0, new byte[0], _saslFrameBody));
- }
-
- @Test
- public void testInputOfValidFrame()
- {
- sendAmqpSaslHeader(_frameParser);
-
- when(_mockSaslFrameHandler.isDone()).thenReturn(false);
-
- _frameParser.input(_saslFrameBytes);
-
- verify(_mockSaslFrameHandler).handle(isA(SaslInit.class), (Binary)isNull());
- }
-
- @Test
- public void testInputOfInvalidFrame_causesErrorAndRefusesFurtherInput()
- {
- sendAmqpSaslHeader(_frameParserWithMockDecoder);
-
- String exceptionMessage = "dummy decode exception";
- when(_mockDecoder.readObject()).thenThrow(new DecodeException(exceptionMessage));
-
- // We send a valid frame but the mock decoder has been configured to reject it
- try {
- _frameParserWithMockDecoder.input(_saslFrameBytes);
- fail("expected exception");
- } catch (TransportException e) {
- assertThat(e.getMessage(), containsString(exceptionMessage));
- }
-
- verify(_mockSaslFrameHandler, never()).handle(any(SaslFrameBody.class), any(Binary.class));
-
- // Check that any further interaction causes an error TransportResult.
- try {
- _frameParserWithMockDecoder.input(ByteBuffer.wrap("".getBytes()));
- fail("expected exception");
- } catch (TransportException e) {
- // this is expected
- }
- }
-
- @Test
- public void testInputOfNonSaslFrame_causesErrorAndRefusesFurtherInput()
- {
- sendAmqpSaslHeader(_frameParserWithMockDecoder);
-
- FrameBody nonSaslFrame = new Open();
- when(_mockDecoder.readObject()).thenReturn(nonSaslFrame);
-
- // We send a valid frame but the mock decoder has been configured to reject it
- try {
- _frameParserWithMockDecoder.input(_saslFrameBytes);
- fail("expected exception");
- } catch (TransportException e) {
- assertThat(e.getMessage(), containsString("Unexpected frame type encountered."));
- }
-
- verify(_mockSaslFrameHandler, never()).handle(any(SaslFrameBody.class), any(Binary.class));
-
- // Check that any further interaction causes an error TransportResult.
- try {
- _frameParserWithMockDecoder.input(ByteBuffer.wrap("".getBytes()));
- fail("expected exception");
- } catch (TransportException e) {
- // this is expected
- }
- }
-
- private void sendAmqpSaslHeader(SaslFrameParser saslFrameParser)
- {
- saslFrameParser.input(ByteBuffer.wrap(AmqpHeader.SASL_HEADER));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
deleted file mode 100644
index 8711b9f..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.engine.impl;
-
-import static org.junit.Assert.*;
-
-import org.apache.qpid.proton.amqp.Binary;
-import org.junit.Test;
-
-public class StringUtilsTest
-{
- @Test
- public void testNullBinary()
- {
- assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(null, 10, true));
- }
-
- @Test
- public void testEmptyBinaryEmptyArray()
- {
- Binary bin = new Binary(new byte[0]);
- assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
- }
-
- @Test
- public void testEmptyBinaryNonEmptyArray()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 0, (byte) 0};
- Binary bin = new Binary(bytes, 0, 0);
- assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
- }
-
- @Test
- public void testEmptyBinaryNonEmptyArrayWithOffset()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 0, (byte) 0};
- Binary bin = new Binary(bytes, 1, 0);
- assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
- }
-
- @Test
- public void testBinaryStringifiedSmallerThanGivenMaxLength()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65, (byte) 152};
- String expected = "\"\\x00\\x01\\x03A\\x98\"";
- Binary bin = new Binary(bytes);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, false));
- }
-
- @Test
- public void testBinaryStringifiedSmallerThanGivenMaxLengthWithOffset()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65, (byte) 152};
- String expected = "\"\\x01\\x03A\\x98\"";
- Binary bin = new Binary(bytes, 1, 4);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, false));
- }
-
- @Test
- public void testBinaryStringifiedEqualToGivenMaxLength()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65};
- String expected = "\"\\x00\\x01\\x03A\"";
- Binary bin = new Binary(bytes);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, false));
-
- bytes = new byte[] {(byte) 0, (byte) 1, (byte) 65, (byte) 3};
- expected = "\"\\x00\\x01A\\x03\"";
- bin = new Binary(bytes);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, false));
- }
-
- @Test
- public void testBinaryStringifiedEqualToGivenMaxLengthWithOffset()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65};
- String expected = "\"\\x01\\x03A\"";
- Binary bin = new Binary(bytes, 1, 3);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, false));
-
- bytes = new byte[] {(byte) 0, (byte) 1, (byte) 65, (byte) 3};
- expected = "\"\\x01A\\x03\"";
- bin = new Binary(bytes, 1, 3);
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, true));
- assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, false));
- }
-
- @Test
- public void testBinaryStringifiedLargerThanGivenMaxLength()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3};
- String expected1 = "\"\\x00\\x01\"";
- Binary bin = new Binary(bytes);
-
- assertEquals("unexpected result", expected1, StringUtils.toQuotedString(bin, 10, false));
-
- String expected2 = "\"\\x00\\x01\"...(truncated)";
- assertEquals("unexpected result", expected2, StringUtils.toQuotedString(bin, 10, true));
- }
-
- @Test
- public void testBinaryStringifiedLargerThanGivenMaxLengthWithOffset()
- {
- byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3};
- String expected1 = "\"\\x00\\x01\"";
- Binary bin = new Binary(bytes);
-
- assertEquals("unexpected result", expected1, StringUtils.toQuotedString(bin, 10, false));
-
- String expected2 = "\"\\x00\\x01\"...(truncated)";
- assertEquals("unexpected result", expected2, StringUtils.toQuotedString(bin, 10, true));
- }
-}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
deleted file mode 100644
index a411cca..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
+++ /dev/null
@@ -1,1640 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.engine.impl;
-
-import static org.apache.qpid.proton.engine.impl.AmqpHeader.HEADER;
-import static org.apache.qpid.proton.engine.impl.TransportTestHelper.stringOfLength;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-
-import org.apache.qpid.proton.Proton;
-import org.apache.qpid.proton.amqp.Binary;
-import org.apache.qpid.proton.amqp.UnsignedInteger;
-import org.apache.qpid.proton.amqp.UnsignedShort;
-import org.apache.qpid.proton.amqp.messaging.AmqpValue;
-import org.apache.qpid.proton.amqp.messaging.Released;
-import org.apache.qpid.proton.amqp.transport.Attach;
-import org.apache.qpid.proton.amqp.transport.Begin;
-import org.apache.qpid.proton.amqp.transport.Close;
-import org.apache.qpid.proton.amqp.transport.Detach;
-import org.apache.qpid.proton.amqp.transport.End;
-import org.apache.qpid.proton.amqp.transport.Flow;
-import org.apache.qpid.proton.amqp.transport.FrameBody;
-import org.apache.qpid.proton.amqp.transport.Open;
-import org.apache.qpid.proton.amqp.transport.Role;
-import org.apache.qpid.proton.amqp.transport.Transfer;
-import org.apache.qpid.proton.engine.Collector;
-import org.apache.qpid.proton.engine.Connection;
-import org.apache.qpid.proton.engine.Delivery;
-import org.apache.qpid.proton.engine.EndpointState;
-import org.apache.qpid.proton.engine.Event;
-import org.apache.qpid.proton.engine.Link;
-import org.apache.qpid.proton.engine.Receiver;
-import org.apache.qpid.proton.engine.Sender;
-import org.apache.qpid.proton.engine.Session;
-import org.apache.qpid.proton.engine.Transport;
-import org.apache.qpid.proton.engine.TransportException;
-import org.apache.qpid.proton.framing.TransportFrame;
-import org.apache.qpid.proton.message.Message;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
-
-public class TransportImplTest
-{
- @SuppressWarnings("deprecation")
- private TransportImpl _transport = new TransportImpl();
-
- private static final int CHANNEL_ID = 1;
- private static final TransportFrame TRANSPORT_FRAME_BEGIN = new TransportFrame(CHANNEL_ID, new Begin(), null);
- private static final TransportFrame TRANSPORT_FRAME_OPEN = new TransportFrame(CHANNEL_ID, new Open(), null);
-
- private static final int BUFFER_SIZE = 4096;
-
- @Rule
- public ExpectedException _expectedException = ExpectedException.none();
-
- @Test
- public void testInput()
- {
- ByteBuffer buffer = _transport.getInputBuffer();
- buffer.put(HEADER);
- _transport.processInput().checkIsOk();
-
- assertNotNull(_transport.getInputBuffer());
- }
-
- @Test
- public void testInitialProcessIsNoop()
- {
- _transport.process();
- }
-
- @Test
- public void testProcessIsIdempotent()
- {
- _transport.process();
- _transport.process();
- }
-
- /**
- * Empty input is always allowed by {@link Transport#getInputBuffer()} and
- * {@link Transport#processInput()}, in contrast to the old API.
- *
- * @see TransportImplTest#testEmptyInputBeforeBindUsingOldApi_causesTransportException()
- */
- @Test
- public void testEmptyInput_isAllowed()
- {
- _transport.getInputBuffer();
- _transport.processInput().checkIsOk();
- }
-
- /**
- * Tests the end-of-stream behaviour specified by {@link Transport#input(byte[], int, int)}.
- */
- @Test
- public void testEmptyInputBeforeBindUsingOldApi_causesTransportException()
- {
- _expectedException.expect(TransportException.class);
- _expectedException.expectMessage("Unexpected EOS when remote connection not closed: connection aborted");
- _transport.input(new byte [0], 0, 0);
- }
-
- /**
- * TODO it's not clear why empty input is specifically allowed in this case.
- */
- @Test
- public void testEmptyInputWhenRemoteConnectionIsClosedUsingOldApi_isAllowed()
- {
- @SuppressWarnings("deprecation")
- ConnectionImpl connection = new ConnectionImpl();
- _transport.bind(connection);
- connection.setRemoteState(EndpointState.CLOSED);
- _transport.input(new byte [0], 0, 0);
- }
-
- @Test
- public void testOutupt()
- {
- {
- // TransportImpl's underlying output spontaneously outputs the AMQP header
- final ByteBuffer outputBuffer = _transport.getOutputBuffer();
- assertEquals(HEADER.length, outputBuffer.remaining());
-
- byte[] outputBytes = new byte[HEADER.length];
- outputBuffer.get(outputBytes);
- assertArrayEquals(HEADER, outputBytes);
-
- _transport.outputConsumed();
- }
-
- {
- final ByteBuffer outputBuffer = _transport.getOutputBuffer();
- assertEquals(0, outputBuffer.remaining());
- _transport.outputConsumed();
- }
- }
-
- @Test
- public void testTransportInitiallyHandlesFrames()
- {
- assertTrue(_transport.isHandlingFrames());
- }
-
- @Test
- public void testBoundTransport_continuesToHandleFrames()
- {
- @SuppressWarnings("deprecation")
- Connection connection = new ConnectionImpl();
-
- assertTrue(_transport.isHandlingFrames());
-
- _transport.bind(connection);
-
- assertTrue(_transport.isHandlingFrames());
-
- _transport.handleFrame(TRANSPORT_FRAME_OPEN);
-
- assertTrue(_transport.isHandlingFrames());
- }
-
- @Test
- public void testUnboundTransport_stopsHandlingFrames()
- {
- assertTrue(_transport.isHandlingFrames());
-
- _transport.handleFrame(TRANSPORT_FRAME_OPEN);
-
- assertFalse(_transport.isHandlingFrames());
- }
-
- @Test
- public void testHandleFrameWhenNotHandling_throwsIllegalStateException()
- {
- assertTrue(_transport.isHandlingFrames());
-
- _transport.handleFrame(TRANSPORT_FRAME_OPEN);
-
- assertFalse(_transport.isHandlingFrames());
-
- _expectedException.expect(IllegalStateException.class);
- _transport.handleFrame(TRANSPORT_FRAME_BEGIN);
- }
-
- @Test
- public void testOutputTooBigToBeWrittenInOneGo()
- {
- int smallMaxFrameSize = 512;
- _transport = new TransportImpl(smallMaxFrameSize);
-
- @SuppressWarnings("deprecation")
- Connection conn = new ConnectionImpl();
- _transport.bind(conn);
-
- // Open frame sized in order to produce a frame that will almost fill output buffer
- conn.setHostname(stringOfLength("x", 500));
- conn.open();
-
- // Close the connection to generate a Close frame which will cause an overflow
- // internally - we'll get the remaining bytes on the next interaction.
- conn.close();
-
- ByteBuffer buf = _transport.getOutputBuffer();
- assertEquals("Expecting buffer to be full", smallMaxFrameSize, buf.remaining());
- buf.position(buf.limit());
- _transport.outputConsumed();
-
- buf = _transport.getOutputBuffer();
- assertTrue("Expecting second buffer to have bytes", buf.remaining() > 0);
- assertTrue("Expecting second buffer to not be full", buf.remaining() < Transport.MIN_MAX_FRAME_SIZE);
- }
-
- @Test
- public void testAttemptToInitiateSaslAfterProcessingBeginsCausesIllegalStateException()
- {
- _transport.process();
-
- try
- {
- _transport.sasl();
- }
- catch(IllegalStateException ise)
- {
- //expected, sasl must be initiated before processing begins
- }
- }
-
- @Test
- public void testChannelMaxDefault() throws Exception
- {
- Transport transport = Proton.transport();
-
- assertEquals("Unesxpected value for channel-max", 65535, transport.getChannelMax());
- }
-
- @Test
- public void testSetGetChannelMax() throws Exception
- {
- Transport transport = Proton.transport();
-
- int channelMax = 456;
- transport.setChannelMax(channelMax);
- assertEquals("Unesxpected value for channel-max", channelMax, transport.getChannelMax());
- }
-
- @Test
- public void testSetChannelMaxOutsideLegalUshortRangeThrowsIAE() throws Exception
- {
- Transport transport = Proton.transport();
-
- try {
- transport.setChannelMax( 1 << 16);
- fail("Expected exception to be thrown");
- } catch (IllegalArgumentException iae ){
- // Expected
- }
-
- try {
- transport.setChannelMax(-1);
- fail("Expected exception to be thrown");
- } catch (IllegalArgumentException iae ){
- // Expected
- }
- }
-
- private class MockTransportImpl extends TransportImpl
- {
- LinkedList<FrameBody> writes = new LinkedList<FrameBody>();
- @Override
- protected void writeFrame(int channel, FrameBody frameBody,
- ByteBuffer payload, Runnable onPayloadTooLarge) {
- super.writeFrame(channel, frameBody, payload, onPayloadTooLarge);
- writes.addLast(frameBody);
- }
- }
-
- @Test
- public void testTickRemoteTimeout()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- int timeout = 4000;
- Open open = new Open();
- open.setIdleTimeOut(new UnsignedInteger(4000));
- TransportFrame openFrame = new TransportFrame(CHANNEL_ID, open, null);
- transport.handleFrame(openFrame);
- pumpMockTransport(transport);
-
- long deadline = transport.tick(0);
- assertEquals("Expected to be returned a deadline of 2000", 2000, deadline); // deadline = 4000 / 2
-
- deadline = transport.tick(1000); // Wait for less than the deadline with no data - get the same value
- assertEquals("When the deadline hasn't been reached tick() should return the previous deadline", 2000, deadline);
- assertEquals("When the deadline hasn't been reached tick() shouldn't write data", 0, transport.writes.size());
-
- deadline = transport.tick(timeout/2); // Wait for the deadline - next deadline should be (4000/2)*2
- assertEquals("When the deadline has been reached expected a new deadline to be returned 4000", 4000, deadline);
- assertEquals("tick() should have written data", 1, transport.writes.size());
- assertEquals("tick() should have written an empty frame", null, transport.writes.get(0));
-
- transport.writeFrame(CHANNEL_ID, new Begin(), null, null);
- while(transport.pending() > 0) transport.pop(transport.head().remaining());
- int framesWrittenBeforeTick = transport.writes.size();
- deadline = transport.tick(3000);
- assertEquals("Writing data resets the deadline", 5000, deadline);
- assertEquals("When the deadline is reset tick() shouldn't write an empty frame", 0, transport.writes.size() - framesWrittenBeforeTick);
-
- transport.writeFrame(CHANNEL_ID, new Attach(), null, null);
- assertTrue(transport.pending() > 0);
- framesWrittenBeforeTick = transport.writes.size();
- deadline = transport.tick(4000);
- assertEquals("Having pending data does not reset the deadline", 5000, deadline);
- assertEquals("Having pending data prevents tick() from sending an empty frame", 0, transport.writes.size() - framesWrittenBeforeTick);
- }
-
- @Test
- public void testTickLocalTimeout()
- {
- MockTransportImpl transport = new MockTransportImpl();
- transport.setIdleTimeout(4000);
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- transport.handleFrame(TRANSPORT_FRAME_OPEN);
- connection.open();
- pumpMockTransport(transport);
-
- long deadline = transport.tick(0);
- assertEquals("Expected to be returned a deadline of 4000", 4000, deadline);
-
- int framesWrittenBeforeTick = transport.writes.size();
- deadline = transport.tick(1000); // Wait for less than the deadline with no data - get the same value
- assertEquals("When the deadline hasn't been reached tick() should return the previous deadline", 4000, deadline);
- assertEquals("Reading data should never result in a frame being written", 0, transport.writes.size() - framesWrittenBeforeTick);
-
- // Protocol header + empty frame
- ByteBuffer data = ByteBuffer.wrap(new byte[] {'A', 'M', 'Q', 'P', 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00});
- while (data.remaining() > 0)
- {
- int origLimit = data.limit();
- int amount = Math.min(transport.tail().remaining(), data.remaining());
- data.limit(data.position() + amount);
- transport.tail().put(data);
- data.limit(origLimit);
- transport.process();
- }
- framesWrittenBeforeTick = transport.writes.size();
- deadline = transport.tick(2000);
- assertEquals("Reading data data resets the deadline", 6000, deadline);
- assertEquals("Reading data should never result in a frame being written", 0, transport.writes.size() - framesWrittenBeforeTick);
- assertEquals("Reading data before the deadline should keep the connection open", EndpointState.ACTIVE, connection.getLocalState());
-
- framesWrittenBeforeTick = transport.writes.size();
- deadline = transport.tick(7000);
- assertEquals("Calling tick() after the deadline should result in the connection being closed", EndpointState.CLOSED, connection.getLocalState());
- }
-
- /*
- * No frames should be written until the Connection object is
- * opened, at which point the Open, and Begin frames should
- * be pipelined together.
- */
- @Test
- public void testOpenSessionBeforeOpenConnection()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Session session = connection.session();
- session.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 0, transport.writes.size());
-
- connection.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- }
-
- /*
- * No frames should be written until the Connection object is
- * opened, at which point the Open, Begin, and Attach frames
- * should be pipelined together.
- */
- @Test
- public void testOpenReceiverBeforeOpenConnection()
- {
- doOpenLinkBeforeOpenConnectionTestImpl(true);
- }
-
- /**
- * No frames should be written until the Connection object is
- * opened, at which point the Open, Begin, and Attach frames
- * should be pipelined together.
- */
- @Test
- public void testOpenSenderBeforeOpenConnection()
- {
- doOpenLinkBeforeOpenConnectionTestImpl(false);
- }
-
- void doOpenLinkBeforeOpenConnectionTestImpl(boolean receiverLink)
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Session session = connection.session();
- session.open();
-
- Link link = null;
- if(receiverLink)
- {
- link = session.receiver("myReceiver");
- }
- else
- {
- link = session.sender("mySender");
- }
- link.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 0, transport.writes.size());
-
- // Now open the connection, expect the Open, Begin, and Attach frames
- connection.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
- }
-
- /*
- * No attach frame should be written before the Session begin is sent.
- */
- @Test
- public void testOpenReceiverBeforeOpenSession()
- {
- doOpenLinkBeforeOpenSessionTestImpl(true);
- }
-
- /*
- * No attach frame should be written before the Session begin is sent.
- */
- @Test
- public void testOpenSenderBeforeOpenSession()
- {
- doOpenLinkBeforeOpenSessionTestImpl(false);
- }
-
- void doOpenLinkBeforeOpenSessionTestImpl(boolean receiverLink)
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- // Open the connection
- connection.open();
-
- // Create but don't open the session
- Session session = connection.session();
-
- // Open the link
- Link link = null;
- if(receiverLink)
- {
- link = session.receiver("myReceiver");
- }
- else
- {
- link = session.sender("mySender");
- }
- link.open();
-
- pumpMockTransport(transport);
-
- // Expect only an Open frame, no attach should be sent as the session isn't open
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 1, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
-
- // Now open the session, expect the Begin
- session.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- // Note: an Attach wasn't sent because link is no longer 'modified' after earlier pump. It
- // could easily be argued it should, given how the engine generally handles things. Seems
- // unlikely to be of much real world concern.
- //assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
- }
-
- /*
- * Verify that no Attach frame is emitted by the Transport should a Receiver
- * be opened after the session End frame was sent.
- */
- @Test
- public void testReceiverAttachAfterEndSent()
- {
- doLinkAttachAfterEndSentTestImpl(true);
- }
-
- /*
- * Verify that no Attach frame is emitted by the Transport should a Sender
- * be opened after the session End frame was sent.
- */
- @Test
- public void testSenderAttachAfterEndSent()
- {
- doLinkAttachAfterEndSentTestImpl(false);
- }
-
- void doLinkAttachAfterEndSentTestImpl(boolean receiverLink)
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- Link link = null;
- if(receiverLink)
- {
- link = session.receiver("myReceiver");
- }
- else
- {
- link = session.sender("mySender");
- }
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
-
- // Send the necessary responses to open/begin
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- // Cause a End frame to be sent
- session.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof End);
-
- // Open the link and verify the transport doesn't
- // send any Attach frame, as an End frame was sent already.
- link.open();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- }
-
- /*
- * Verify that no Attach frame is emitted by the Transport should a Receiver
- * be closed after the session End frame was sent.
- */
- @Test
- public void testReceiverCloseAfterEndSent()
- {
- doLinkDetachAfterEndSentTestImpl(true);
- }
-
- /*
- * Verify that no Attach frame is emitted by the Transport should a Sender
- * be closed after the session End frame was sent.
- */
- @Test
- public void testSenderCloseAfterEndSent()
- {
- doLinkDetachAfterEndSentTestImpl(false);
- }
-
- void doLinkDetachAfterEndSentTestImpl(boolean receiverLink)
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- Link link = null;
- if(receiverLink)
- {
- link = session.receiver("myReceiver");
- }
- else
- {
- link = session.sender("mySender");
- }
- link.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Cause an End frame to be sent
- session.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof End);
-
- // Close the link and verify the transport doesn't
- // send any Detach frame, as an End frame was sent already.
- link.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- }
-
- /*
- * No frames should be written until the Connection object is
- * opened, at which point the Open and Begin frames should
- * be pipelined together.
- */
- @Test
- public void testReceiverFlowBeforeOpenConnection()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Session session = connection.session();
- session.open();
-
- Receiver reciever = session.receiver("myReceiver");
- reciever.flow(5);
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 0, transport.writes.size());
-
- // Now open the connection, expect the Open and Begin frames but
- // nothing else as we haven't opened the receiver itself yet.
- connection.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- }
-
- @Test
- public void testSenderSendBeforeOpenConnection()
- {
- MockTransportImpl transport = new MockTransportImpl();
-
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Collector collector = Collector.Factory.create();
- connection.collect(collector);
-
- Session session = connection.session();
- session.open();
-
- String linkName = "mySender";
- Sender sender = session.sender(linkName);
- sender.open();
-
- sendMessage(sender, "tag1", "content1");
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 0, transport.writes.size());
-
- // Now open the connection, expect the Open and Begin and Attach frames but
- // nothing else as we the sender wont have credit yet.
- connection.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach then give sender credit
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- Flow flow = new Flow();
- flow.setHandle(UnsignedInteger.ZERO);
- flow.setDeliveryCount(UnsignedInteger.ZERO);
- flow.setNextIncomingId(UnsignedInteger.ONE);
- flow.setNextOutgoingId(UnsignedInteger.ZERO);
- flow.setIncomingWindow(UnsignedInteger.valueOf(1024));
- flow.setOutgoingWindow(UnsignedInteger.valueOf(1024));
- flow.setLinkCredit(UnsignedInteger.valueOf(10));
-
- transport.handleFrame(new TransportFrame(0, flow, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Now pump the transport again and expect a transfer for the message
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Transfer);
- }
-
- @Test
- public void testEmitFlowEventOnSend()
- {
- doEmitFlowOnSendTestImpl(true);
- }
-
- public void testSupressFlowEventOnSend()
- {
- doEmitFlowOnSendTestImpl(false);
- }
-
- void doEmitFlowOnSendTestImpl(boolean emitFlowEventOnSend)
- {
- MockTransportImpl transport = new MockTransportImpl();
- transport.setEmitFlowEventOnSend(emitFlowEventOnSend);
-
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Collector collector = Collector.Factory.create();
- connection.collect(collector);
-
- Session session = connection.session();
- session.open();
-
- String linkName = "mySender";
- Sender sender = session.sender(linkName);
- sender.open();
-
- sendMessage(sender, "tag1", "content1");
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 0, transport.writes.size());
-
- assertEvents(collector, Event.Type.CONNECTION_INIT, Event.Type.SESSION_INIT, Event.Type.SESSION_LOCAL_OPEN,
- Event.Type.TRANSPORT, Event.Type.LINK_INIT, Event.Type.LINK_LOCAL_OPEN, Event.Type.TRANSPORT);
-
- // Now open the connection, expect the Open and Begin frames but
- // nothing else as we haven't opened the receiver itself yet.
- connection.open();
-
- pumpMockTransport(transport);
-
- assertEvents(collector, Event.Type.CONNECTION_LOCAL_OPEN, Event.Type.TRANSPORT);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach then give sender credit
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- Flow flow = new Flow();
- flow.setHandle(UnsignedInteger.ZERO);
- flow.setDeliveryCount(UnsignedInteger.ZERO);
- flow.setNextIncomingId(UnsignedInteger.ONE);
- flow.setNextOutgoingId(UnsignedInteger.ZERO);
- flow.setIncomingWindow(UnsignedInteger.valueOf(1024));
- flow.setOutgoingWindow(UnsignedInteger.valueOf(1024));
- flow.setLinkCredit(UnsignedInteger.valueOf(10));
-
- transport.handleFrame(new TransportFrame(0, flow, null));
-
- assertEvents(collector, Event.Type.CONNECTION_REMOTE_OPEN, Event.Type.SESSION_REMOTE_OPEN,
- Event.Type.LINK_REMOTE_OPEN, Event.Type.LINK_FLOW);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Now pump the transport again and expect a transfer for the message
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Transfer);
-
- // Verify that we did, or did not, emit a flow event
- if(emitFlowEventOnSend)
- {
- assertEvents(collector, Event.Type.LINK_FLOW);
- }
- else
- {
- assertNoEvents(collector);
- }
- }
-
- /**
- * Verify that no Begin frame is emitted by the Transport should a Session open
- * after the Close frame was sent.
- */
- @Test
- public void testSessionBeginAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 1, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
-
- // Send the necessary response to Open
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 1, transport.writes.size());
-
- // Cause a Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Close);
-
- // Open the session and verify the transport doesn't
- // send any Begin frame, as a Close frame was sent already.
- session.open();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
- }
-
- /**
- * Verify that no End frame is emitted by the Transport should a Session close
- * after the Close frame was sent.
- */
- @Test
- public void testSessionEndAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
-
- // Send the necessary responses to open/begin
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- // Cause a Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Close);
-
- // Close the session and verify the transport doesn't
- // send any End frame, as a Close frame was sent already.
- session.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- }
-
- /**
- * Verify that no Attach frame is emitted by the Transport should a Receiver
- * be opened after the Close frame was sent.
- */
- @Test
- public void testReceiverAttachAfterCloseSent()
- {
- doLinkAttachAfterCloseSentTestImpl(true);
- }
-
- /**
- * Verify that no Attach frame is emitted by the Transport should a Sender
- * be opened after the Close frame was sent.
- */
- @Test
- public void testSenderAttachAfterCloseSent()
- {
- doLinkAttachAfterCloseSentTestImpl(false);
- }
-
- void doLinkAttachAfterCloseSentTestImpl(boolean receiverLink)
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- Link link = null;
- if(receiverLink)
- {
- link = session.receiver("myReceiver");
- }
- else
- {
- link = session.sender("mySender");
- }
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
-
- // Send the necessary responses to open/begin
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 2, transport.writes.size());
-
- // Cause a Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Close);
-
- // Open the link and verify the transport doesn't
- // send any Attach frame, as a Close frame was sent already.
- link.open();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
- }
-
- /**
- * Verify that no Flow frame is emitted by the Transport should a Receiver
- * have credit added after the Close frame was sent.
- */
- @Test
- public void testReceiverFlowAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- String linkName = "myReceiver";
- Receiver receiver = session.receiver(linkName);
- receiver.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Cause the Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Close);
-
- // Grant new credit for the Receiver and verify the transport doesn't
- // send any Flow frame, as a Close frame was sent already.
- receiver.flow(1);
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- }
-
- /**
- * Verify that no Flow frame is emitted by the Transport should a Receiver
- * have pending drain when a detach is sent for that receiver.
- */
- @Test
- public void testNoReceiverFlowAfterDetachSentWhileDraining()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- String linkName = "myReceiver";
- Receiver receiver = session.receiver(linkName);
- receiver.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Start a drain for the Receiver and verify the transport doesn't
- // send any Flow frame, due to the detach being initiated.
- receiver.drain(10);
- pumpMockTransport(transport);
-
- // Cause the Detach frame to be sent
- receiver.detach();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(4) instanceof Detach);
- }
-
- /**
- * Verify that no Flow frame is emitted by the Transport should a Sender
- * have credit drained added after the Close frame was sent.
- */
- @Test
- public void testSenderFlowAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
-
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Collector collector = Collector.Factory.create();
- connection.collect(collector);
-
- Session session = connection.session();
- session.open();
-
- String linkName = "mySender";
- Sender sender = session.sender(linkName);
- sender.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- assertFalse("Should not be in drain yet", sender.getDrain());
-
- // Send the necessary responses to open/begin/attach then give sender credit and drain
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- int credit = 10;
- Flow flow = new Flow();
- flow.setHandle(UnsignedInteger.ZERO);
- flow.setDeliveryCount(UnsignedInteger.ZERO);
- flow.setNextIncomingId(UnsignedInteger.ONE);
- flow.setNextOutgoingId(UnsignedInteger.ZERO);
- flow.setIncomingWindow(UnsignedInteger.valueOf(1024));
- flow.setOutgoingWindow(UnsignedInteger.valueOf(1024));
- flow.setDrain(true);
- flow.setLinkCredit(UnsignedInteger.valueOf(credit));
-
- transport.handleFrame(new TransportFrame(0, flow, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Should not be in drain", sender.getDrain());
- assertEquals("Should have credit", credit, sender.getCredit());
-
- // Cause the Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Close);
-
- // Drain the credit and verify the transport doesn't
- // send any Flow frame, as a Close frame was sent already.
- int drained = sender.drained();
- assertEquals("Should have drained all credit", credit, drained);
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- }
-
- /**
- * Verify that no Disposition frame is emitted by the Transport should a Delivery
- * have disposition applied after the Close frame was sent.
- */
- @Test
- public void testDispositionAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- String linkName = "myReceiver";
- Receiver receiver = session.receiver(linkName);
- receiver.flow(5);
- receiver.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Flow);
-
- Delivery delivery = receiver.current();
- assertNull("Should not yet have a delivery", delivery);
-
- // Send the necessary responses to open/begin/attach as well as a transfer
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- begin.setNextOutgoingId(UnsignedInteger.ONE);
- begin.setIncomingWindow(UnsignedInteger.valueOf(1024));
- begin.setOutgoingWindow(UnsignedInteger.valueOf(1024));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.SENDER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- String deliveryTag = "tag1";
- String messageContent = "content1";
- handleTransfer(transport, 1, deliveryTag, messageContent);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
-
- delivery = verifyDelivery(receiver, deliveryTag, messageContent);
- assertNotNull("Should now have a delivery", delivery);
-
- // Cause the Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(4) instanceof Close);
-
- delivery.disposition(Released.getInstance());
- delivery.settle();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
- }
-
- /**
- * Verify that no Transfer frame is emitted by the Transport should a Delivery
- * be sendable after the Close frame was sent.
- */
- @Test
- public void testTransferAfterCloseSent()
- {
- MockTransportImpl transport = new MockTransportImpl();
-
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- connection.open();
-
- Collector collector = Collector.Factory.create();
- connection.collect(collector);
-
- Session session = connection.session();
- session.open();
-
- String linkName = "mySender";
- Sender sender = session.sender(linkName);
- sender.open();
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach then give sender credit
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- Flow flow = new Flow();
- flow.setHandle(UnsignedInteger.ZERO);
- flow.setDeliveryCount(UnsignedInteger.ZERO);
- flow.setNextIncomingId(UnsignedInteger.ONE);
- flow.setNextOutgoingId(UnsignedInteger.ZERO);
- flow.setIncomingWindow(UnsignedInteger.valueOf(1024));
- flow.setOutgoingWindow(UnsignedInteger.valueOf(1024));
- flow.setLinkCredit(UnsignedInteger.valueOf(10));
-
- transport.handleFrame(new TransportFrame(0, flow, null));
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Cause the Close frame to be sent
- connection.close();
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Close);
-
- // Send a new message and verify the transport doesn't
- // send any Transfer frame, as a Close frame was sent already.
- sendMessage(sender, "tag1", "content1");
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- }
-
- private void assertNoEvents(Collector collector)
- {
- assertEvents(collector);
- }
-
- private void assertEvents(Collector collector, Event.Type... expectedEventTypes)
- {
-
- if(expectedEventTypes.length == 0)
- {
- assertNull("Expected no events, but at least one was present: " + collector.peek(), collector.peek());
- }
- else
- {
- ArrayList<Event.Type> eventTypesList = new ArrayList<Event.Type>();
- Event event = null;
- while ((event = collector.peek()) != null) {
- eventTypesList.add(event.getType());
- collector.pop();
- }
-
- assertArrayEquals("Unexpected event types: " + eventTypesList, expectedEventTypes, eventTypesList.toArray(new Event.Type[0]));
- }
- }
-
- private void pumpMockTransport(MockTransportImpl transport)
- {
- while(transport.pending() > 0)
- {
- transport.pop(transport.head().remaining());
- }
- }
-
- private String getFrameTypesWritten(MockTransportImpl transport)
- {
- String result = "";
- for(FrameBody f : transport.writes) {
- result += f.getClass().getSimpleName();
- result += ",";
- }
-
- if(result.isEmpty()) {
- return "no-frames-written";
- } else {
- return result;
- }
- }
-
- private Delivery sendMessage(Sender sender, String deliveryTag, String messageContent)
- {
- byte[] tag = deliveryTag.getBytes(StandardCharsets.UTF_8);
-
- Message m = Message.Factory.create();
- m.setBody(new AmqpValue(messageContent));
-
- byte[] encoded = new byte[BUFFER_SIZE];
- int len = m.encode(encoded, 0, BUFFER_SIZE);
-
- assertTrue("given array was too small", len < BUFFER_SIZE);
-
- Delivery delivery = sender.delivery(tag);
-
- int sent = sender.send(encoded, 0, len);
-
- assertEquals("sender unable to send all data at once as assumed for simplicity", len, sent);
-
- boolean senderAdvanced = sender.advance();
- assertTrue("sender has not advanced", senderAdvanced);
-
- return delivery;
- }
-
- private void handleTransfer(TransportImpl transport, int deliveryNumber, String deliveryTag, String messageContent)
- {
- byte[] tag = deliveryTag.getBytes(StandardCharsets.UTF_8);
-
- Message m = Message.Factory.create();
- m.setBody(new AmqpValue(messageContent));
-
- byte[] encoded = new byte[BUFFER_SIZE];
- int len = m.encode(encoded, 0, BUFFER_SIZE);
-
- assertTrue("given array was too small", len < BUFFER_SIZE);
-
- Transfer transfer = new Transfer();
- transfer.setDeliveryId(UnsignedInteger.valueOf(deliveryNumber));
- transfer.setHandle(UnsignedInteger.ZERO);
- transfer.setDeliveryTag(new Binary(tag));
- transfer.setMessageFormat(UnsignedInteger.valueOf(DeliveryImpl.DEFAULT_MESSAGE_FORMAT));
-
- transport.handleFrame(new TransportFrame(0, transfer, new Binary(encoded, 0, len)));
- }
-
- private Delivery verifyDelivery(Receiver receiver, String deliveryTag, String messageContent)
- {
- Delivery delivery = receiver.current();
-
- assertTrue(Arrays.equals(deliveryTag.getBytes(StandardCharsets.UTF_8), delivery.getTag()));
-
- assertNull(delivery.getLocalState());
- assertNull(delivery.getRemoteState());
-
- assertFalse(delivery.isPartial());
- assertTrue(delivery.isReadable());
-
- byte[] received = new byte[BUFFER_SIZE];
- int len = receiver.recv(received, 0, BUFFER_SIZE);
-
- assertTrue("given array was too small", len < BUFFER_SIZE);
-
- Message m = Proton.message();
- m.decode(received, 0, len);
-
- Object messageBody = ((AmqpValue)m.getBody()).getValue();
- assertEquals("Unexpected message content", messageContent, messageBody);
-
- boolean receiverAdvanced = receiver.advance();
- assertTrue("receiver has not advanced", receiverAdvanced);
-
- return delivery;
- }
-
- /**
- * Verify that the {@link TransportInternal#addTransportLayer(TransportLayer)} has the desired
- * effect by observing the wrapping effect on related transport input and output methods.
- */
- @Test
- public void testAddAdditionalTransportLayer()
- {
- Integer capacityOverride = 1957;
- Integer pendingOverride = 2846;
-
- MockTransportImpl transport = new MockTransportImpl();
-
- TransportWrapper mockWrapper = Mockito.mock(TransportWrapper.class);
-
- Mockito.when(mockWrapper.capacity()).thenReturn(capacityOverride);
- Mockito.when(mockWrapper.pending()).thenReturn(pendingOverride);
-
- TransportLayer mockLayer = Mockito.mock(TransportLayer.class);
- Mockito.when(mockLayer.wrap(Mockito.any(TransportInput.class), Mockito.any(TransportOutput.class))).thenReturn(mockWrapper);
-
- transport.addTransportLayer(mockLayer);
-
- assertEquals("Unexepcted value, layer override not effective", capacityOverride.intValue(), transport.capacity());
- assertEquals("Unexepcted value, layer override not effective", pendingOverride.intValue(), transport.pending());
- }
-
- @Test
- public void testAddAdditionalTransportLayerThrowsISEIfProcessingStarted()
- {
- MockTransportImpl transport = new MockTransportImpl();
- TransportLayer mockLayer = Mockito.mock(TransportLayer.class);
-
- transport.process();
-
- try
- {
- transport.addTransportLayer(mockLayer);
- fail("Expected exception to be thrown due to processing having started");
- }
- catch (IllegalStateException ise)
- {
- // expected
- }
- }
-
- @Test
- public void testEndpointOpenAndCloseAreIdempotent()
- {
- MockTransportImpl transport = new MockTransportImpl();
-
- Connection connection = Proton.connection();
- transport.bind(connection);
-
- Collector collector = Collector.Factory.create();
- connection.collect(collector);
-
- connection.open();
- connection.open();
-
- Session session = connection.session();
- session.open();
-
- String linkName = "mySender";
- Sender sender = session.sender(linkName);
- sender.open();
-
- pumpMockTransport(transport);
-
- assertEvents(collector, Event.Type.CONNECTION_INIT, Event.Type.CONNECTION_LOCAL_OPEN, Event.Type.TRANSPORT,
- Event.Type.SESSION_INIT, Event.Type.SESSION_LOCAL_OPEN,
- Event.Type.TRANSPORT, Event.Type.LINK_INIT, Event.Type.LINK_LOCAL_OPEN, Event.Type.TRANSPORT);
-
- pumpMockTransport(transport);
-
- connection.open();
- session.open();
- sender.open();
-
- assertNoEvents(collector);
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
- assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
- assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
-
- // Send the necessary responses to open/begin/attach then give sender credit
- transport.handleFrame(new TransportFrame(0, new Open(), null));
-
- Begin begin = new Begin();
- begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
- transport.handleFrame(new TransportFrame(0, begin, null));
-
- Attach attach = new Attach();
- attach.setHandle(UnsignedInteger.ZERO);
- attach.setRole(Role.RECEIVER);
- attach.setName(linkName);
- attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
- transport.handleFrame(new TransportFrame(0, attach, null));
-
- assertEvents(collector, Event.Type.CONNECTION_REMOTE_OPEN, Event.Type.SESSION_REMOTE_OPEN,
- Event.Type.LINK_REMOTE_OPEN);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
-
- // Now close the link and expect one event
- sender.close();
- sender.close();
-
- assertEvents(collector, Event.Type.LINK_LOCAL_CLOSE, Event.Type.TRANSPORT);
-
- pumpMockTransport(transport);
-
- sender.close();
-
- assertNoEvents(collector);
-
- pumpMockTransport(transport);
-
- assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
- assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Detach);
- }
-}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptorTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptorTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptorTest.java
deleted file mode 100644
index 19c2f7b..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptorTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.proton.engine.impl;
-
-import static java.util.Arrays.copyOfRange;
-import static org.apache.qpid.proton.engine.impl.TransportTestHelper.assertByteArrayContentEquals;
-import static org.apache.qpid.proton.engine.impl.TransportTestHelper.assertByteBufferContentEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import org.apache.qpid.proton.engine.TransportException;
-
-import java.nio.ByteBuffer;
-
-import org.junit.Test;
-
-public class TransportOutputAdaptorTest
-{
- private final CannedTransportOutputWriter _transportOutputWriter = new CannedTransportOutputWriter();
- private final TransportOutput _transportOutput = new TransportOutputAdaptor(_transportOutputWriter, 1024);
-
- @Test
- public void testThatOutputBufferIsReadOnly()
- {
- assertTrue(_transportOutput.head().isReadOnly());
- }
-
- @Test
- public void testGetOutputBuffer_containsCorrectBytes()
- {
- byte[] testBytes = "testbytes".getBytes();
- _transportOutputWriter.setNextCannedOutput(testBytes);
-
- assertEquals(testBytes.length, _transportOutput.pending());
- final ByteBuffer outputBuffer = _transportOutput.head();
- assertEquals(testBytes.length, outputBuffer.remaining());
-
- byte[] outputBytes = new byte[testBytes.length];
- outputBuffer.get(outputBytes);
- assertByteArrayContentEquals(testBytes, outputBytes);
-
- _transportOutput.pop(outputBuffer.position());
-
- final ByteBuffer outputBuffer2 = _transportOutput.head();
- assertEquals(0, outputBuffer2.remaining());
- }
-
- @Test
- public void testClientConsumesOutputInMultipleChunks()
- {
- byte[] testBytes = "testbytes".getBytes();
- _transportOutputWriter.setNextCannedOutput(testBytes);
-
- // sip the first two bytes into a small byte array
-
- int chunk1Size = 2;
- int chunk2Size = testBytes.length - chunk1Size;
-
- {
- final ByteBuffer outputBuffer1 = _transportOutput.head();
- byte[] byteArray1 = new byte[chunk1Size];
-
- outputBuffer1.get(byteArray1);
- assertEquals(chunk2Size, outputBuffer1.remaining());
- assertByteArrayContentEquals(copyOfRange(testBytes, 0, chunk1Size), byteArray1);
-
- _transportOutput.pop(outputBuffer1.position());
- }
-
- {
- final ByteBuffer outputBuffer2 = _transportOutput.head();
- int chunk2Offset = chunk1Size;
- assertByteBufferContentEquals(copyOfRange(testBytes, chunk2Offset, testBytes.length), outputBuffer2);
- }
- }
-
- @Test
- public void testClientConsumesOutputInMultipleChunksWithAdditionalTransportWriterOutput()
- {
- byte[] initialBytes = "abcd".getBytes();
- _transportOutputWriter.setNextCannedOutput(initialBytes);
-
- // sip the first two bytes into a small byte array
- int chunk1Size = 2;
- int initialRemaining = initialBytes.length - chunk1Size;
-
- {
- final ByteBuffer outputBuffer1 = _transportOutput.head();
- byte[] byteArray1 = new byte[chunk1Size];
-
- outputBuffer1.get(byteArray1);
- assertEquals(initialRemaining, outputBuffer1.remaining());
- assertByteArrayContentEquals(copyOfRange(initialBytes, 0, chunk1Size), byteArray1);
-
- _transportOutput.pop(outputBuffer1.position());
- }
-
- byte[] additionalBytes = "wxyz".getBytes();
- _transportOutputWriter.setNextCannedOutput(additionalBytes);
-
- {
- final ByteBuffer outputBuffer2 = _transportOutput.head();
-
- byte[] expectedBytes = "cdwxyz".getBytes();
- assertByteBufferContentEquals(expectedBytes, outputBuffer2);
- }
- }
-
- private static final class CannedTransportOutputWriter implements TransportOutputWriter
- {
-
- byte[] _cannedOutput = new byte[0];
-
- @Override
- public boolean writeInto(ByteBuffer outputBuffer)
- {
- int bytesWritten = ByteBufferUtils.pourArrayToBuffer(_cannedOutput, 0, _cannedOutput.length, outputBuffer);
- if(bytesWritten < _cannedOutput.length)
- {
- fail("Unable to write all " + _cannedOutput.length + " bytes of my canned output to the provided output buffer: " + outputBuffer);
- }
- _cannedOutput = new byte[0];
- return false;
- }
-
- void setNextCannedOutput(byte[] cannedOutput)
- {
- _cannedOutput = cannedOutput;
- }
-
- public void closed(TransportException error)
- {
- // do nothing
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportTestHelper.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportTestHelper.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportTestHelper.java
deleted file mode 100644
index 995ed54..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportTestHelper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.proton.engine.impl;
-
-import static org.junit.Assert.assertEquals;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-
-public class TransportTestHelper
-{
- public static void assertByteArrayContentEquals(byte[] expectedBytes, byte[] actualBytes)
- {
- assertEquals(new String(expectedBytes), new String(actualBytes));
- }
-
- public static void assertByteBufferContentEquals(byte[] expectedBytes, ByteBuffer actualByteBuffer)
- {
- ByteBuffer myByteBuffer = actualByteBuffer.duplicate();
- byte[] actualBytes = new byte[myByteBuffer.remaining()];
- myByteBuffer.get(actualBytes);
-
- assertByteArrayContentEquals(expectedBytes, actualBytes);
- }
-
- public static String pourBufferToString(ByteBuffer source)
- {
- return pourBufferToString(source, source.remaining());
- }
-
- public static String pourBufferToString(ByteBuffer source, int sizeRequested)
- {
- byte[] buf = new byte[sizeRequested];
- int numberRead = ByteBufferUtils.pourBufferToArray(source, buf, 0, sizeRequested);
- return new String(buf, 0, numberRead, StandardCharsets.UTF_8);
- }
-
- public static String stringOfLength(String value, int repeat)
- {
- StringBuilder builder = new StringBuilder();
- for(int i = 0 ; i < repeat; i++)
- {
- builder.append(value);
- }
- return builder.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccdcf329/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/CannedTransportOutput.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/CannedTransportOutput.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/CannedTransportOutput.java
deleted file mode 100644
index 8fe8c13..0000000
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/CannedTransportOutput.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.engine.impl.ssl;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.proton.engine.impl.TransportOutput;
-
-public class CannedTransportOutput implements TransportOutput
-{
-
- private ByteBuffer _cannedOutput;
- private ByteBuffer _head;
- private int _popped;
-
- public CannedTransportOutput()
- {
- }
-
- public CannedTransportOutput(String output)
- {
- setOutput(output);
- }
-
- public void setOutput(String output)
- {
- _cannedOutput = ByteBuffer.wrap(output.getBytes());
- _head = _cannedOutput.asReadOnlyBuffer();
- _popped = 0;
- }
-
- @Override
- public int pending()
- {
- return _head.remaining();
- }
-
- @Override
- public ByteBuffer head()
- {
- return _head;
- }
-
- @Override
- public void pop(int bytes)
- {
- _popped += bytes;
- _head.position(_popped);
- }
-
- @Override
- public void close_head()
- {
- // do nothing
- }
-
-
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org