You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2017/01/11 19:20:49 UTC
[1/2] activemq-artemis git commit: ARTEMIS-562 Use 'to' field if
sender target is null
Repository: activemq-artemis
Updated Branches:
refs/heads/master 9b0447be8 -> e4821be03
ARTEMIS-562 Use 'to' field if sender target is null
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/4e309d84
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/4e309d84
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/4e309d84
Branch: refs/heads/master
Commit: 4e309d842e1523f3b5c3f16415f6d18ac1828322
Parents: 9b0447b
Author: Howard Gao <ho...@gmail.com>
Authored: Wed Jan 11 08:53:40 2017 +0800
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed Jan 11 14:20:39 2017 -0500
----------------------------------------------------------------------
.../amqp/broker/AMQPSessionCallback.java | 28 +++-
.../proton/ProtonServerReceiverContext.java | 27 ++--
.../amqp/proton/handler/ExtCapability.java | 5 +-
.../transport/amqp/client/AmqpSession.java | 10 ++
.../integration/amqp/AmqpSecurityTest.java | 38 +++++
.../tests/integration/amqp/ProtonTest.java | 144 ++++++++++++++++++-
6 files changed, 227 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
index 3dce5dc..025c499 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
@@ -45,6 +45,7 @@ import org.apache.activemq.artemis.protocol.amqp.converter.message.EncodedMessag
import org.apache.activemq.artemis.protocol.amqp.exceptions.ActiveMQAMQPException;
import org.apache.activemq.artemis.protocol.amqp.exceptions.ActiveMQAMQPInternalErrorException;
import org.apache.activemq.artemis.protocol.amqp.exceptions.ActiveMQAMQPResourceLimitExceededException;
+import org.apache.activemq.artemis.protocol.amqp.logger.ActiveMQAMQPProtocolMessageBundle;
import org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext;
import org.apache.activemq.artemis.protocol.amqp.proton.AMQPSessionContext;
import org.apache.activemq.artemis.protocol.amqp.proton.AmqpSupport;
@@ -59,6 +60,7 @@ import org.apache.activemq.artemis.utils.SelectorTranslator;
import org.apache.activemq.artemis.utils.SimpleIDGenerator;
import org.apache.activemq.artemis.utils.UUIDGenerator;
import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.Symbol;
import org.apache.qpid.proton.amqp.messaging.Accepted;
import org.apache.qpid.proton.amqp.messaging.Rejected;
import org.apache.qpid.proton.amqp.transport.AmqpError;
@@ -356,6 +358,16 @@ public class AMQPSessionCallback implements SessionCallback {
//use the address on the receiver if not null, if null let's hope it was set correctly on the message
if (address != null) {
message.setAddress(new SimpleString(address));
+ } else {
+ // Anonymous relay must set a To value
+ if (message.getAddress() == null) {
+ rejectMessage(delivery, Symbol.valueOf("failed"), "Missing 'to' field for message sent to an anonymous producer");
+ return;
+ }
+
+ if (!bindingQuery(message.getAddress().toString())) {
+ throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist();
+ }
}
recoverContext();
@@ -370,18 +382,19 @@ public class AMQPSessionCallback implements SessionCallback {
transaction.markAsRollbackOnly(e);
}
} else {
- rejectMessage(delivery);
+ rejectMessage(delivery, AmqpError.RESOURCE_LIMIT_EXCEEDED, "Address is full: " + address);
}
} else {
serverSend(transaction, message, delivery, receiver);
}
}
- private void rejectMessage(Delivery delivery) {
- String address = delivery.getLink().getTarget().getAddress();
- ErrorCondition ec = new ErrorCondition(AmqpError.RESOURCE_LIMIT_EXCEEDED, "Address is full: " + address);
+ private void rejectMessage(Delivery delivery, Symbol errorCondition, String errorMessage) {
+ ErrorCondition condition = new ErrorCondition();
+ condition.setCondition(errorCondition);
+ condition.setDescription(errorMessage);
Rejected rejected = new Rejected();
- rejected.setError(ec);
+ rejected.setError(condition);
delivery.disposition(rejected);
delivery.settle();
connection.flush();
@@ -429,6 +442,11 @@ public class AMQPSessionCallback implements SessionCallback {
final int threshold,
final Receiver receiver) {
try {
+ if (address == null) {
+ receiver.flow(credits);
+ connection.flush();
+ return;
+ }
final PagingStore store = manager.getServer().getPagingManager().getPageStore(new SimpleString(address));
store.checkMemory(new Runnable() {
@Override
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
index 7d50503..b5093bc 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
@@ -84,7 +84,7 @@ public class ProtonServerReceiverContext extends ProtonInitializable implements
if (target != null) {
if (target.getDynamic()) {
- //if dynamic we have to create the node (queue) and set the address on the target, the node is temporary and
+ // if dynamic we have to create the node (queue) and set the address on the target, the node is temporary and
// will be deleted on closing of the session
address = sessionSPI.tempQueueName();
@@ -96,23 +96,24 @@ public class ProtonServerReceiverContext extends ProtonInitializable implements
expiryPolicy = target.getExpiryPolicy() != null ? target.getExpiryPolicy() : TerminusExpiryPolicy.LINK_DETACH;
target.setAddress(address);
} else {
- //if not dynamic then we use the targets address as the address to forward the messages to, however there has to
- //be a queue bound to it so we nee to check this.
+ // the target will have an address unless the remote is requesting an anonymous
+ // relay in which case the address in the incoming message's to field will be
+ // matched on receive of the message.
address = target.getAddress();
- if (address == null) {
- throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.targetAddressNotSet();
- }
- try {
- if (!sessionSPI.bindingQuery(address)) {
- throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist();
+ if (address != null && !address.isEmpty()) {
+ try {
+ if (!sessionSPI.bindingQuery(address)) {
+ throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist();
+ }
+ } catch (ActiveMQAMQPNotFoundException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ActiveMQAMQPInternalErrorException(e.getMessage(), e);
}
- } catch (ActiveMQAMQPNotFoundException e) {
- throw e;
- } catch (Exception e) {
- throw new ActiveMQAMQPInternalErrorException(e.getMessage(), e);
}
}
+
Symbol[] remoteDesiredCapabilities = receiver.getRemoteDesiredCapabilities();
if (remoteDesiredCapabilities != null) {
List<Symbol> list = Arrays.asList(remoteDesiredCapabilities);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ExtCapability.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ExtCapability.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ExtCapability.java
index 931efa7..35fcda7 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ExtCapability.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ExtCapability.java
@@ -22,7 +22,10 @@ import org.apache.qpid.proton.engine.Connection;
public class ExtCapability {
- public static final Symbol[] capabilities = new Symbol[]{AmqpSupport.SOLE_CONNECTION_CAPABILITY, AmqpSupport.DELAYED_DELIVERY, AmqpSupport.SHARED_SUBS};
+ public static final Symbol[] capabilities = new Symbol[]{AmqpSupport.SOLE_CONNECTION_CAPABILITY,
+ AmqpSupport.DELAYED_DELIVERY,
+ AmqpSupport.SHARED_SUBS,
+ AmqpSupport.ANONYMOUS_RELAY};
public static Symbol[] getCapabilities() {
return capabilities;
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/tests/artemis-test-support/src/main/java/org/apache/activemq/transport/amqp/client/AmqpSession.java
----------------------------------------------------------------------
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/transport/amqp/client/AmqpSession.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/transport/amqp/client/AmqpSession.java
index e9a90c1..f4e4d8a 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/transport/amqp/client/AmqpSession.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/transport/amqp/client/AmqpSession.java
@@ -91,6 +91,16 @@ public class AmqpSession extends AmqpAbstractResource<Session> {
}
/**
+ * Create an anonymous sender instance using the anonymous relay support of the broker.
+ *
+ * @return a newly created sender that is ready for use.
+ * @throws Exception if an error occurs while creating the sender.
+ */
+ public AmqpSender createAnonymousSender() throws Exception {
+ return createSender(null, false);
+ }
+
+ /**
* Create a sender instance using the given address
*
* @param address the address to which the sender will produce its messages.
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpSecurityTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpSecurityTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpSecurityTest.java
index 07b2ddc..7ecbb41 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpSecurityTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpSecurityTest.java
@@ -26,6 +26,8 @@ import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.RoutingType;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.settings.HierarchicalRepository;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl;
@@ -41,12 +43,17 @@ import org.junit.Test;
public class AmqpSecurityTest extends AmqpClientTestSupport {
+ private String user1 = "user1";
+ private String password1 = "password1";
+
@Override
protected ActiveMQServer createServer() throws Exception {
ActiveMQServer server = createServer(true, true);
ActiveMQJAASSecurityManager securityManager = (ActiveMQJAASSecurityManager) server.getSecurityManager();
securityManager.getConfiguration().addUser("foo", "bar");
securityManager.getConfiguration().addRole("foo", "none");
+ securityManager.getConfiguration().addUser(user1, password1);
+ securityManager.getConfiguration().addRole(user1, "none");
HierarchicalRepository<Set<Role>> securityRepository = server.getSecurityRepository();
HashSet<Role> value = new HashSet<>();
value.add(new Role("none", false, true, true, true, true, true, true, true));
@@ -144,4 +151,35 @@ public class AmqpSecurityTest extends AmqpClientTestSupport {
connection.getStateInspector().assertValid();
connection.close();
}
+
+ @Test(timeout = 60000)
+ public void testSendMessageFailsOnAnonymousRelayWhenNotAuthorizedToSendToAddress() throws Exception {
+ server.createAddressInfo(new AddressInfo(SimpleString.toSimpleString(getTestName()), RoutingType.ANYCAST));
+ server.createQueue(new SimpleString(getTestName()), RoutingType.ANYCAST, new SimpleString(getTestName()), null, true, false);
+
+ AmqpClient client = createAmqpClient(user1, password1);
+ AmqpConnection connection = client.connect();
+ try {
+ AmqpSession session = connection.createSession();
+
+ AmqpSender sender = session.createAnonymousSender();
+ AmqpMessage message = new AmqpMessage();
+
+ message.setAddress(getTestName());
+ message.setMessageId("msg" + 1);
+ message.setText("Test-Message");
+
+ try {
+ sender.send(message);
+ fail("Should not be able to send, message should be rejected");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ } finally {
+ sender.close();
+ }
+ } finally {
+ connection.close();
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/4e309d84/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java
index 5e9b368..2a03f96 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java
@@ -64,6 +64,7 @@ import javax.jms.TopicSubscriber;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.management.ResourceNames;
+import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.postoffice.Bindings;
import org.apache.activemq.artemis.core.remoting.CloseListener;
import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector;
@@ -83,6 +84,7 @@ import org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerReceiverCont
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
import org.apache.activemq.artemis.tests.integration.mqtt.imported.util.Wait;
import org.apache.activemq.artemis.utils.ByteUtil;
+import org.apache.activemq.artemis.utils.TimeUtils;
import org.apache.activemq.artemis.utils.VersionLoader;
import org.apache.activemq.transport.amqp.client.AmqpClient;
import org.apache.activemq.transport.amqp.client.AmqpConnection;
@@ -110,10 +112,6 @@ public class ProtonTest extends ProtonTestBase {
private static final String tcpAmqpConnectionUri = "tcp://localhost:5672";
- private static final String userName = "guest";
-
- private static final String password = "guest";
-
private static final String brokerName = "my-broker";
private static final long maxSizeBytes = 1 * 1024 * 1024;
@@ -153,6 +151,17 @@ public class ProtonTest extends ProtonTestBase {
@Before
public void setUp() throws Exception {
super.setUp();
+
+ Configuration serverConfig = server.getConfiguration();
+ Map<String, AddressSettings> settings = serverConfig.getAddressesSettings();
+ assertNotNull(settings);
+ AddressSettings addressSetting = settings.get("#");
+ if (addressSetting == null) {
+ addressSetting = new AddressSettings();
+ settings.put("#", addressSetting);
+ }
+ addressSetting.setAutoCreateQueues(false);
+
server.createAddressInfo(new AddressInfo(SimpleString.toSimpleString(coreAddress), RoutingType.ANYCAST));
server.createAddressInfo(new AddressInfo(SimpleString.toSimpleString(coreAddress + "1"), RoutingType.ANYCAST));
server.createAddressInfo(new AddressInfo(SimpleString.toSimpleString(coreAddress + "2"), RoutingType.ANYCAST));
@@ -463,7 +472,8 @@ public class ProtonTest extends ProtonTestBase {
session.commit();
session.close();
Queue q = (Queue) server.getPostOffice().getBinding(new SimpleString(coreAddress)).getBindable();
- Assert.assertEquals(q.getMessageCount(), 10);
+ //because tx commit is executed async on broker, we use a timed wait.
+ assertTrue(TimeUtils.waitOnBoolean(true, 10000, ()-> q.getMessageCount() == 10));
}
@Test
@@ -538,7 +548,9 @@ public class ProtonTest extends ProtonTestBase {
}
session.rollback();
Queue q = (Queue) server.getPostOffice().getBinding(new SimpleString(coreAddress)).getBindable();
- Assert.assertEquals(q.getMessageCount(), 10);
+ //because tx rollback is executed async on broker, we use a timed wait.
+ assertTrue(TimeUtils.waitOnBoolean(true, 10000, ()-> q.getMessageCount() == 10));
+
}
@Test
@@ -1648,6 +1660,126 @@ public class ProtonTest extends ProtonTestBase {
connection.close();
}
+ @Test
+ public void testProducerWithoutUsingDefaultDestination() throws Exception {
+
+ try {
+ javax.jms.Queue queue = createQueue(coreAddress);
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer p = session.createProducer(null);
+
+ for (int i = 1; i <= 10; i++) {
+ String targetName = coreAddress + i;
+ javax.jms.Queue target = createQueue(targetName);
+ TextMessage message = session.createTextMessage("message for " + targetName);
+ p.send(target, message);
+ }
+ connection.start();
+ MessageConsumer messageConsumer = session.createConsumer(queue);
+ Message m = messageConsumer.receive(200);
+ Assert.assertNull(m);
+
+ for (int i = 1; i <= 10; i++) {
+ String targetName = coreAddress + i;
+ javax.jms.Queue target = createQueue(targetName);
+ MessageConsumer consumer = session.createConsumer(target);
+ TextMessage tm = (TextMessage) consumer.receive(2000);
+ assertNotNull(tm);
+ assertEquals("message for " + targetName, tm.getText());
+ consumer.close();
+ }
+ } finally {
+ connection.close();
+ }
+ }
+
+ @Test(timeout = 60000)
+ public void testSendMessageOnAnonymousRelayLinkUsingMessageTo() throws Exception {
+
+ AmqpClient client = new AmqpClient(new URI(tcpAmqpConnectionUri), userName, password);
+ AmqpConnection connection = client.connect();
+
+ try {
+ AmqpSession session = connection.createSession();
+
+ AmqpSender sender = session.createAnonymousSender();
+ AmqpMessage message = new AmqpMessage();
+
+ message.setAddress(address);
+ message.setMessageId("msg" + 1);
+ message.setText("Test-Message");
+
+ sender.send(message);
+ sender.close();
+
+ AmqpReceiver receiver = session.createReceiver(address);
+ receiver.flow(1);
+ AmqpMessage received = receiver.receive(10, TimeUnit.SECONDS);
+ assertNotNull("Should have read message", received);
+ assertEquals("msg1", received.getMessageId());
+ received.accept();
+
+ receiver.close();
+ } finally {
+ connection.close();
+ }
+ }
+
+ @Test(timeout = 60000)
+ public void testSendMessageFailsOnAnonymousRelayLinkWhenNoToValueSet() throws Exception {
+
+ AmqpClient client = new AmqpClient(new URI(tcpAmqpConnectionUri), userName, password);
+ AmqpConnection connection = client.connect();
+ try {
+ AmqpSession session = connection.createSession();
+
+ AmqpSender sender = session.createAnonymousSender();
+ AmqpMessage message = new AmqpMessage();
+
+ message.setMessageId("msg" + 1);
+ message.setText("Test-Message");
+
+ try {
+ sender.send(message);
+ fail("Should not be able to send, message should be rejected");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ } finally {
+ sender.close();
+ }
+ } finally {
+ connection.close();
+ }
+ }
+
+ @Test(timeout = 60000)
+ public void testSendMessageFailsOnAnonymousRelayWhenToFieldHasNonExistingAddress() throws Exception {
+
+ AmqpClient client = new AmqpClient(new URI(tcpAmqpConnectionUri), userName, password);
+ AmqpConnection connection = client.connect();
+ try {
+ AmqpSession session = connection.createSession();
+
+ AmqpSender sender = session.createAnonymousSender();
+ AmqpMessage message = new AmqpMessage();
+
+ message.setAddress(address + "-not-in-service");
+ message.setMessageId("msg" + 1);
+ message.setText("Test-Message");
+
+ try {
+ sender.send(message);
+ fail("Should not be able to send, message should be rejected");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ } finally {
+ sender.close();
+ }
+ } finally {
+ connection.close();
+ }
+ }
+
private javax.jms.Queue createQueue(String address) throws Exception {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
try {
[2/2] activemq-artemis git commit: This closes #955
Posted by cl...@apache.org.
This closes #955
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/e4821be0
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/e4821be0
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/e4821be0
Branch: refs/heads/master
Commit: e4821be0385c2e0d472c208ab61d9db789190377
Parents: 9b0447b 4e309d8
Author: Clebert Suconic <cl...@apache.org>
Authored: Wed Jan 11 14:20:40 2017 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed Jan 11 14:20:40 2017 -0500
----------------------------------------------------------------------
.../amqp/broker/AMQPSessionCallback.java | 28 +++-
.../proton/ProtonServerReceiverContext.java | 27 ++--
.../amqp/proton/handler/ExtCapability.java | 5 +-
.../transport/amqp/client/AmqpSession.java | 10 ++
.../integration/amqp/AmqpSecurityTest.java | 38 +++++
.../tests/integration/amqp/ProtonTest.java | 144 ++++++++++++++++++-
6 files changed, 227 insertions(+), 25 deletions(-)
----------------------------------------------------------------------