use of com.swiftmq.amqp.v100.client.Session in project qpid-protonj2 by apache.
the class ReceiverTest method doTestCreateReceiverAndCloseOrDetachLinkSync.
private void doTestCreateReceiverAndCloseOrDetachLinkSync(boolean close) throws Exception {
try (ProtonTestServer peer = new ProtonTestServer()) {
peer.expectSASLAnonymousConnect();
peer.expectOpen().respond();
peer.expectBegin().respond();
peer.expectAttach().ofReceiver().respond();
peer.expectFlow().withLinkCredit(10);
peer.expectDetach().withClosed(close).respond();
peer.expectClose().respond();
peer.start();
URI remoteURI = peer.getServerURI();
LOG.info("Test started, peer listening on: {}", remoteURI);
Client container = Client.create();
Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort());
connection.openFuture().get(10, TimeUnit.SECONDS);
Session session = connection.openSession();
session.openFuture().get(10, TimeUnit.SECONDS);
Receiver receiver = session.openReceiver("test-queue");
receiver.openFuture().get(10, TimeUnit.SECONDS);
if (close) {
receiver.close();
} else {
receiver.detach();
}
connection.closeAsync().get(10, TimeUnit.SECONDS);
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
use of com.swiftmq.amqp.v100.client.Session in project qpid-protonj2 by apache.
the class ReceiverTest method testDrainFutureSignalsFailureWhenSessionRemotelyClosed.
@Test
public void testDrainFutureSignalsFailureWhenSessionRemotelyClosed() throws Exception {
try (ProtonTestServer peer = new ProtonTestServer()) {
peer.expectSASLAnonymousConnect();
peer.expectOpen().respond();
peer.expectBegin().respond();
peer.expectAttach().ofReceiver().respond();
peer.expectFlow();
peer.expectFlow().withDrain(true);
peer.remoteEnd().withErrorCondition(AmqpError.RESOURCE_DELETED.toString(), "Session was closed").afterDelay(5).queue();
peer.expectEnd();
peer.expectClose().respond();
peer.start();
URI remoteURI = peer.getServerURI();
LOG.info("Test started, peer listening on: {}", remoteURI);
Client container = Client.create();
Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort());
Session session = connection.openSession();
Receiver receiver = session.openReceiver("test-queue").openFuture().get();
try {
receiver.drain().get(10, TimeUnit.SECONDS);
fail("Drain call should fail when session closed by remote.");
} catch (ExecutionException cliEx) {
LOG.debug("Receiver threw error on drain call", cliEx);
assertTrue(cliEx.getCause() instanceof ClientException);
}
connection.closeAsync().get();
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
use of com.swiftmq.amqp.v100.client.Session in project qpid-protonj2 by apache.
the class ReceiverTest method doTestReceiveCallFailsWhenReceiverDetachedOrClosed.
private void doTestReceiveCallFailsWhenReceiverDetachedOrClosed(boolean close) throws Exception {
try (ProtonTestServer peer = new ProtonTestServer()) {
peer.expectSASLAnonymousConnect();
peer.expectOpen().respond();
peer.expectBegin().respond();
peer.expectAttach().ofReceiver().respond();
peer.expectFlow().withLinkCredit(10);
peer.expectDetach().withClosed(close).respond();
peer.start();
URI remoteURI = peer.getServerURI();
LOG.info("Test started, peer listening on: {}", remoteURI);
Client container = Client.create();
Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort());
Session session = connection.openSession();
Receiver receiver = session.openReceiver("test-queue").openFuture().get();
if (close) {
receiver.closeAsync();
} else {
receiver.detachAsync();
}
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
try {
receiver.receive();
fail("Receive call should fail when link closed or detached.");
} catch (ClientIllegalStateException cliEx) {
LOG.debug("Receiver threw error on receive call", cliEx);
}
peer.expectClose().respond();
connection.closeAsync().get();
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
use of com.swiftmq.amqp.v100.client.Session in project qpid-protonj2 by apache.
the class ReceiverTest method testDeliveryRefusesMessageDecodeOnceRawInputStreamIsRequested.
@Test
public void testDeliveryRefusesMessageDecodeOnceRawInputStreamIsRequested() throws Exception {
final byte[] payload = createEncodedMessage(new AmqpValue<>("Hello World"));
try (ProtonTestServer peer = new ProtonTestServer()) {
peer.expectSASLAnonymousConnect();
peer.expectOpen().respond();
peer.expectBegin().respond();
peer.expectAttach().withRole(Role.RECEIVER.getValue()).respond();
peer.expectFlow().withLinkCredit(10);
peer.remoteTransfer().withHandle(0).withDeliveryId(0).withDeliveryTag(new byte[] { 1 }).withMore(false).withSettled(true).withMessageFormat(0).withPayload(payload).queue();
peer.start();
URI remoteURI = peer.getServerURI();
LOG.info("Test started, peer listening on: {}", remoteURI);
Client container = Client.create();
Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort());
Session session = connection.openSession();
Receiver receiver = session.openReceiver("test-queue");
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
peer.expectDetach().respond();
peer.expectClose().respond();
Delivery delivery = receiver.receive(5, TimeUnit.SECONDS);
assertNotNull(delivery);
InputStream stream = delivery.rawInputStream();
assertNotNull(stream);
assertEquals(payload.length, stream.available());
byte[] bytesRead = new byte[payload.length];
assertEquals(payload.length, stream.read(bytesRead));
assertArrayEquals(payload, bytesRead);
try {
delivery.message();
fail("Should not be able to use the message API once raw stream is requested");
} catch (ClientIllegalStateException cliEx) {
// Expected
}
try {
delivery.annotations();
fail("Should not be able to use the annotations API once raw stream is requested");
} catch (ClientIllegalStateException cliEx) {
// Expected
}
receiver.closeAsync();
connection.closeAsync().get();
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
use of com.swiftmq.amqp.v100.client.Session in project qpid-protonj2 by apache.
the class ReceiverTest method testCreateDynamicReceiverWthNodeProperties.
@Test
public void testCreateDynamicReceiverWthNodeProperties() throws Exception {
final Map<String, Object> nodeProperties = new HashMap<>();
nodeProperties.put("test-property-1", "one");
nodeProperties.put("test-property-2", "two");
nodeProperties.put("test-property-3", "three");
try (ProtonTestServer peer = new ProtonTestServer()) {
peer.expectSASLAnonymousConnect();
peer.expectOpen().respond();
peer.expectBegin().respond();
peer.expectAttach().withRole(Role.RECEIVER.getValue()).withSource().withDynamic(true).withAddress((String) null).withDynamicNodeProperties(nodeProperties).and().respond().withSource().withDynamic(true).withAddress("test-dynamic-node").withDynamicNodeProperties(nodeProperties);
peer.expectFlow();
peer.expectDetach().respond();
peer.expectClose().respond();
peer.start();
URI remoteURI = peer.getServerURI();
LOG.info("Test started, peer listening on: {}", remoteURI);
Client container = Client.create();
Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort());
Session session = connection.openSession();
Receiver receiver = session.openDynamicReceiver(nodeProperties);
assertNotNull(receiver.address(), "Remote should have assigned the address for the dynamic receiver");
assertEquals("test-dynamic-node", receiver.address());
receiver.closeAsync().get(10, TimeUnit.SECONDS);
connection.closeAsync().get(10, TimeUnit.SECONDS);
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
Aggregations