Search in sources :

Example 51 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 linkEchoFlow.

@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 linkEchoFlow() 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).flowEcho(true).flowHandleFromLinkHandle().flowAvailable(UnsignedInteger.valueOf(10)).flowDeliveryCount(UnsignedInteger.ZERO).flowLinkCredit(UnsignedInteger.ONE).flowOutgoingWindow(UnsignedInteger.ZERO).flowNextOutgoingId(UnsignedInteger.ZERO).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flow().consumeResponse().getLatestResponse(Flow.class);
        assertThat(responseFlow.getEcho(), not(equalTo(Boolean.TRUE)));
        assertThat(responseFlow.getHandle(), is(notNullValue()));
    }
}
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 52 with Flow

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

the class OutcomeTest method modifiedOutcomeWithUndeliverableHere.

@Test
@SpecificationTest(section = "3.4.5", description = "If the undeliverable-here is set, then any messages released" + " MUST NOT be redelivered to the modifying link endpoint.")
public void modifiedOutcomeWithUndeliverableHere() throws Exception {
    String content1 = getTestName() + "_1";
    String content2 = getTestName() + "_2";
    Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content1, content2);
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        final Interaction interaction = transport.newInteraction().negotiateOpen().begin().consumeResponse(Begin.class).attachRole(Role.RECEIVER).attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME).attach().consumeResponse(Attach.class).assertLatestResponse(Attach.class, this::assumeModifiedSupportedBySource).flowIncomingWindow(UnsignedInteger.ONE).flowLinkCredit(UnsignedInteger.ONE).flowHandleFromLinkHandle().flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flow().receiveDelivery().decodeLatestDelivery();
        Object firstDeliveryPayload = interaction.getDecodedLatestDelivery();
        assertThat(firstDeliveryPayload, is(equalTo(content1)));
        Modified modifiedOutcome = new Modified();
        modifiedOutcome.setUndeliverableHere(Boolean.TRUE);
        interaction.dispositionSettled(true).dispositionRole(Role.RECEIVER).dispositionFirstFromLatestDelivery().dispositionState(modifiedOutcome).disposition().flowIncomingWindow(UnsignedInteger.valueOf(2)).flowLinkCredit(UnsignedInteger.valueOf(2)).flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount().flow().receiveDelivery(Flow.class).decodeLatestDelivery();
        Object secondDeliveryPayload = interaction.getDecodedLatestDelivery();
        assertThat(secondDeliveryPayload, is(equalTo(content2)));
        // verify that no unexpected performative is received by closing
        interaction.doCloseConnection();
    }
    assertThat(Utils.receiveMessage(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content1)));
    assertThat(Utils.receiveMessage(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content2)));
}
Also used : FrameTransport(org.apache.qpid.tests.protocol.v1_0.FrameTransport) Modified(org.apache.qpid.server.protocol.v1_0.type.messaging.Modified) Interaction(org.apache.qpid.tests.protocol.v1_0.Interaction) Attach(org.apache.qpid.server.protocol.v1_0.type.transport.Attach) 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 53 with Flow

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

the class Session_1_0 method receiveFlow.

public void receiveFlow(final Flow flow) {
    receivedComplete();
    final SequenceNumber flowNextIncomingId = new SequenceNumber(flow.getNextIncomingId() == null ? _initialOutgoingId.intValue() : flow.getNextIncomingId().intValue());
    if (flowNextIncomingId.compareTo(_nextOutgoingId) > 0) {
        final End end = new End();
        end.setError(new Error(SessionError.WINDOW_VIOLATION, String.format("Next incoming id '%d' exceeds next outgoing id '%d'", flowNextIncomingId.longValue(), _nextOutgoingId.longValue())));
        end(end);
    } else {
        _remoteIncomingWindow = flowNextIncomingId.longValue() + flow.getIncomingWindow().longValue() - _nextOutgoingId.longValue();
        _nextIncomingId = new SequenceNumber(flow.getNextOutgoingId().intValue());
        _remoteOutgoingWindow = flow.getOutgoingWindow();
        UnsignedInteger handle = flow.getHandle();
        if (handle != null) {
            final LinkEndpoint<? extends BaseSource, ? extends BaseTarget> endpoint = _inputHandleToEndpoint.get(handle);
            if (endpoint == null) {
                End end = new End();
                end.setError(new Error(SessionError.UNATTACHED_HANDLE, String.format("Received Flow with unknown handle %d", handle.intValue())));
                end(end);
            } else {
                endpoint.receiveFlow(flow);
            }
        } else {
            final Collection<LinkEndpoint<? extends BaseSource, ? extends BaseTarget>> allLinkEndpoints = _inputHandleToEndpoint.values();
            for (LinkEndpoint<? extends BaseSource, ? extends BaseTarget> le : allLinkEndpoints) {
                le.flowStateChanged();
            }
            if (Boolean.TRUE.equals(flow.getEcho())) {
                sendFlow();
            }
        }
    }
}
Also used : BaseSource(org.apache.qpid.server.protocol.v1_0.type.BaseSource) 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) LinkError(org.apache.qpid.server.protocol.v1_0.type.transport.LinkError) End(org.apache.qpid.server.protocol.v1_0.type.transport.End) UnsignedInteger(org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger) BaseTarget(org.apache.qpid.server.protocol.v1_0.type.BaseTarget)

Example 54 with Flow

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

the class SendingLinkEndpointTest method receiveFlow.

@Test
public void receiveFlow() throws Exception {
    receiveAttach(_sendingLinkEndpoint);
    _sendingLinkEndpoint.setDeliveryCount(new SequenceNumber(-1));
    Flow flow = new Flow();
    flow.setDeliveryCount(new SequenceNumber(-1).unsignedIntegerValue());
    flow.setLinkCredit(UnsignedInteger.ONE);
    _sendingLinkEndpoint.receiveFlow(flow);
    UnsignedInteger linkCredit = _sendingLinkEndpoint.getLinkCredit();
    assertThat(linkCredit, is(equalTo(UnsignedInteger.ONE)));
}
Also used : UnsignedInteger(org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger) Flow(org.apache.qpid.server.protocol.v1_0.type.transport.Flow) Test(org.junit.Test)

Example 55 with Flow

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

the class DecodeErrorTest method illegalMessage.

@Test
@SpecificationTest(section = "3.2", description = "Altogether a message consists of the following sections: Zero or one header," + " Zero or one delivery-annotations, [...]")
public void illegalMessage() throws Exception {
    getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
    try (FrameTransport transport = new FrameTransport(getBrokerAdmin()).connect()) {
        final Interaction interaction = transport.newInteraction();
        interaction.negotiateOpen().begin().consumeResponse(Begin.class).attachRole(Role.SENDER).attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME).attach().consumeResponse(Attach.class).consumeResponse(Flow.class).assertLatestResponse(Flow.class, flow -> assumeThat(flow.getLinkCredit(), is(greaterThan(UnsignedInteger.ZERO))));
        try (final QpidByteBuffer payload = buildInvalidMessage()) {
            interaction.transferMessageFormat(UnsignedInteger.ZERO).transferPayload(payload).transferSettled(true).transferMessageFormat(UnsignedInteger.ZERO).transfer().sync();
        }
        interaction.closeUnconditionally();
    }
    final String validMessage = getTestName() + "_2";
    Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, validMessage);
    assertThat(Utils.receiveMessage(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(validMessage)));
}
Also used : QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) 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)

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