Search in sources :

Example 46 with Flow

use of org.apache.qpid.server.protocol.v1_0.type.transport.Flow in project qpid-broker-j by apache.

the class FlowTest method asynchronousNotification.

@Test
@SpecificationTest(section = "2.6.9", description = "Asynchronous notification can be accomplished as follows." + " The receiver maintains a target amount of link-credit for that link." + " As transfer arrive on the link, the sender’s link-credit decreases" + " as the delivery-count increases. When the sender’s link-credit falls below a threshold," + " the flow state MAY be sent to increase the sender’s link-credit back" + " to the desired target amount.")
public void asynchronousNotification() throws Exception {
    BrokerAdmin brokerAdmin = getBrokerAdmin();
    brokerAdmin.createQueue(BrokerAdmin.TEST_QUEUE_NAME);
    final String[] contents = Utils.createTestMessageContents(3, getTestName());
    Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, contents);
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        Interaction interaction = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).attachRole(Role.RECEIVER).attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME).attach().consumeResponse(Attach.class);
        UnsignedInteger delta = UnsignedInteger.ONE;
        UnsignedInteger incomingWindow = UnsignedInteger.valueOf(3);
        Object receivedMessageContent1 = interaction.flowIncomingWindow(incomingWindow).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flowLinkCredit(delta).flowHandleFromLinkHandle().flowDeliveryCount().flowOutgoingWindow(UnsignedInteger.ZERO).flowNextOutgoingId(UnsignedInteger.ZERO).flow().receiveDelivery().decodeLatestDelivery().getDecodedLatestDelivery();
        assertThat(receivedMessageContent1, is(equalTo(contents[0])));
        UnsignedInteger firstDeliveryId = interaction.getLatestDeliveryId();
        Object receivedMessageContent2 = interaction.flowIncomingWindow(incomingWindow).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flowLinkCredit(delta).flowHandleFromLinkHandle().flowOutgoingWindow(UnsignedInteger.ZERO).flowNextOutgoingId(UnsignedInteger.ZERO).flowDeliveryCount().flow().receiveDelivery().decodeLatestDelivery().getDecodedLatestDelivery();
        assertThat(receivedMessageContent2, is(equalTo(contents[1])));
        UnsignedInteger secondDeliveryId = interaction.getLatestDeliveryId();
        interaction.dispositionSettled(true).dispositionRole(Role.RECEIVER).dispositionFirst(firstDeliveryId).dispositionLast(secondDeliveryId).dispositionState(new Accepted()).disposition();
        // detach link and consume detach to verify that no transfer was delivered
        interaction.detachClose(true).detach().consume(Detach.class, Flow.class);
    }
    assertThat(Utils.receiveMessage(brokerAdmin, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(contents[2])));
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) BrokerAdmin(org.apache.qpid.tests.utils.BrokerAdmin) Interaction(org.apache.qpid.tests.protocol.v1_0.Interaction) UnsignedInteger(org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger) Accepted(org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Example 47 with Flow

use of org.apache.qpid.server.protocol.v1_0.type.transport.Flow in project qpid-broker-j by apache.

the class FlowTest method drainEmptyQueue.

@Test
@SpecificationTest(section = "2.6.7", description = "If the sender's drain flag is set and there are no available messages," + " the sender MUST advance its delivery-count until link-credit is zero," + " and send its updated flow state to the receiver.")
public void drainEmptyQueue() throws Exception {
    getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        Flow responseFlow = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).attachRole(Role.RECEIVER).attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME).attach().consumeResponse(Attach.class).flowIncomingWindow(UnsignedInteger.valueOf(2047)).flowNextIncomingId(UnsignedInteger.ZERO).flowOutgoingWindow(UnsignedInteger.valueOf(2147483647)).flowNextOutgoingId(UnsignedInteger.ONE).flowDeliveryCount(UnsignedInteger.ZERO).flowLinkCredit(UnsignedInteger.ONE).flowDrain(Boolean.TRUE).flowHandleFromLinkHandle().flow().consumeResponse().getLatestResponse(Flow.class);
        assertThat(responseFlow.getHandle(), is(notNullValue()));
        assertThat(responseFlow.getDrain(), is(equalTo(Boolean.TRUE)));
    }
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) Attach(org.apache.qpid.server.protocol.v1_0.type.transport.Attach) Begin(org.apache.qpid.server.protocol.v1_0.type.transport.Begin) Flow(org.apache.qpid.server.protocol.v1_0.type.transport.Flow) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Example 48 with Flow

use of org.apache.qpid.server.protocol.v1_0.type.transport.Flow in project qpid-broker-j by apache.

the class FlowTest method emptyFlow.

@Test
@SpecificationTest(section = "1.3.4", description = "mandatory [...] a non null value for the field is always encoded.")
public void emptyFlow() throws Exception {
    getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        final Response<?> response = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).flowIncomingWindow(null).flowNextIncomingId(null).flowOutgoingWindow(null).flowNextOutgoingId(null).flow().consumeResponse().getLatestResponse();
        assertThat(response, is(notNullValue()));
        assertThat(response.getBody(), is(instanceOf(ErrorCarryingFrameBody.class)));
        final Error error = ((ErrorCarryingFrameBody) response.getBody()).getError();
        if (error != null) {
            assertThat(error.getCondition(), anyOf(equalTo(AmqpError.DECODE_ERROR), equalTo(AmqpError.INVALID_FIELD)));
        }
    }
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) Begin(org.apache.qpid.server.protocol.v1_0.type.transport.Begin) ErrorCarryingFrameBody(org.apache.qpid.server.protocol.v1_0.type.ErrorCarryingFrameBody) Error(org.apache.qpid.server.protocol.v1_0.type.transport.Error) AmqpError(org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError) SessionError(org.apache.qpid.server.protocol.v1_0.type.transport.SessionError) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Example 49 with Flow

use of org.apache.qpid.server.protocol.v1_0.type.transport.Flow in project qpid-broker-j by apache.

the class FlowTest method sessionEchoFlow.

@Test
@SpecificationTest(section = "2.7.4", description = "If set to true then the receiver SHOULD send its state at the earliest convenient opportunity.")
public void sessionEchoFlow() throws Exception {
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        Flow responseFlow = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).flowEcho(true).flowOutgoingWindow(UnsignedInteger.ZERO).flowNextOutgoingId(UnsignedInteger.ZERO).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flowIncomingWindow(UnsignedInteger.ONE).flowHandle(null).flow().consumeResponse().getLatestResponse(Flow.class);
        assertThat(responseFlow.getEcho(), not(equalTo(Boolean.TRUE)));
        assertThat(responseFlow.getHandle(), is(nullValue()));
    }
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) Begin(org.apache.qpid.server.protocol.v1_0.type.transport.Begin) Flow(org.apache.qpid.server.protocol.v1_0.type.transport.Flow) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Example 50 with Flow

use of org.apache.qpid.server.protocol.v1_0.type.transport.Flow in project qpid-broker-j by apache.

the class FlowTest method flowWithUnknownHandle.

@Test
@SpecificationTest(section = "2.7.4", description = "If set to a handle that is not currently associated with an attached link, the recipient" + " MUST respond by ending the session with an unattached-handle session error.")
public void flowWithUnknownHandle() throws Exception {
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        End responseEnd = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).flowEcho(true).flowIncomingWindow(UnsignedInteger.ONE).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flowLinkCredit(UnsignedInteger.ONE).flowHandle(UnsignedInteger.valueOf(Integer.MAX_VALUE)).flowOutgoingWindow(UnsignedInteger.ZERO).flowNextOutgoingId(UnsignedInteger.ZERO).flow().consumeResponse().getLatestResponse(End.class);
        assertThat(responseEnd.getError(), is(notNullValue()));
        assertThat(responseEnd.getError().getCondition(), is(equalTo(SessionError.UNATTACHED_HANDLE)));
    }
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) End(org.apache.qpid.server.protocol.v1_0.type.transport.End) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Aggregations

Test (org.junit.Test)49 FrameTransport (org.apache.qpid.tests.protocol.v1_0.FrameTransport)47 SpecificationTest (org.apache.qpid.tests.protocol.SpecificationTest)44 Interaction (org.apache.qpid.tests.protocol.v1_0.Interaction)42 Attach (org.apache.qpid.server.protocol.v1_0.type.transport.Attach)37 Flow (org.apache.qpid.server.protocol.v1_0.type.transport.Flow)31 Accepted (org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted)24 Begin (org.apache.qpid.server.protocol.v1_0.type.transport.Begin)22 UnsignedInteger (org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger)17 Disposition (org.apache.qpid.server.protocol.v1_0.type.transport.Disposition)11 Transfer (org.apache.qpid.server.protocol.v1_0.type.transport.Transfer)11 Binary (org.apache.qpid.server.protocol.v1_0.type.Binary)10 Detach (org.apache.qpid.server.protocol.v1_0.type.transport.Detach)10 Ignore (org.junit.Ignore)8 Error (org.apache.qpid.server.protocol.v1_0.type.transport.Error)7 QpidByteBuffer (org.apache.qpid.server.bytebuffer.QpidByteBuffer)5 DeliveryState (org.apache.qpid.server.protocol.v1_0.type.DeliveryState)5 AmqpError (org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError)5 End (org.apache.qpid.server.protocol.v1_0.type.transport.End)5 BrokerAdmin (org.apache.qpid.tests.utils.BrokerAdmin)5