NO-JIRA: initial changes for consolidating sasl connection handling
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/78dabd8d Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/78dabd8d Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/78dabd8d Branch: refs/heads/master Commit: 78dabd8d4607046d8760c05b57936625a9aac286 Parents: 6b36338 Author: Robert Gemmell <rob...@apache.org> Authored: Tue Jun 16 10:57:13 2015 +0100 Committer: Robert Gemmell <rob...@apache.org> Committed: Tue Jun 16 11:03:36 2015 +0100 ---------------------------------------------------------------------- .../jms/integration/IntegrationTestFixture.java | 2 +- .../jms/integration/SaslIntegrationTest.java | 2 +- .../jms/provider/amqp/AmqpProviderTest.java | 2 +- .../qpid/jms/test/testpeer/TestAmqpPeer.java | 141 ++++++++++--------- 4 files changed, 79 insertions(+), 68 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/78dabd8d/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java index fef76fe..8dd148c 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java @@ -56,7 +56,7 @@ public class IntegrationTestFixture { Connection establishConnecton(TestAmqpPeer testPeer, boolean ssl, String optionsString, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties, boolean setClientId) throws JMSException { Symbol[] desiredCapabilities = new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }; - testPeer.expectPlainConnect("guest", "guest", desiredCapabilities, serverCapabilities, serverProperties); + testPeer.expectSaslPlainConnect("guest", "guest", desiredCapabilities, serverCapabilities, serverProperties); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/78dabd8d/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java index fc658c9..b31f986 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java @@ -93,7 +93,7 @@ public class SaslIntegrationTest extends QpidJmsTestCase { String user = "user"; String pass = "qwerty123456"; - testPeer.expectPlainConnect(user, pass, null, null); + testPeer.expectSaslPlainConnect(user, pass, null, null); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/78dabd8d/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java index 0105948..b339ad9 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java @@ -156,7 +156,7 @@ public class AmqpProviderTest extends QpidJmsTestCase { final long REQUEST_TIMEOUT = TimeUnit.SECONDS.toMillis(7); provider = new AmqpProvider(peerURI); - testPeer.expectPlainConnect(TEST_USERNAME, TEST_PASSWORD, null, null); + testPeer.expectSaslPlainConnect(TEST_USERNAME, TEST_PASSWORD, null, null); testPeer.expectBegin(true); provider.connect(); testPeer.expectClose(); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/78dabd8d/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java index efc657b..f29f973 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java @@ -96,6 +96,7 @@ import org.slf4j.LoggerFactory; // TODO should expectXXXYYYZZZ methods just be expect(matcher)? public class TestAmqpPeer implements AutoCloseable { + private static final Symbol PLAIN = Symbol.valueOf("PLAIN"); private static final Logger LOGGER = LoggerFactory.getLogger(TestAmqpPeer.class.getName()); private static final int CONNECTION_CHANNEL = 0; @@ -364,6 +365,81 @@ public class TestAmqpPeer implements AutoCloseable return openFrame; } + public void expectSaslConnect(Symbol mechanism, Matcher<Binary> initialResponseMatcher, Symbol[] desiredCapabilities, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) + { + SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(mechanism); + addHandler(new HeaderHandlerImpl(AmqpHeader.SASL_HEADER, AmqpHeader.SASL_HEADER, + new FrameSender( + this, FrameType.SASL, 0, + saslMechanismsFrame, null))); + + addHandler(new SaslInitMatcher() + .withMechanism(equalTo(mechanism)) + .withInitialResponse(initialResponseMatcher) + .onSuccess(new AmqpPeerRunnable() + { + @Override + public void run() + { + TestAmqpPeer.this.sendFrame( + FrameType.SASL, 0, + new SaslOutcomeFrame().setCode(UnsignedByte.valueOf((byte)0)), + null, + false); + _driverRunnable.expectHeader(); + } + })); + + addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, AmqpHeader.HEADER)); + + OpenFrame open = createOpenFrame(); + if(serverCapabilities != null) + { + open.setOfferedCapabilities(serverCapabilities); + } + + if(serverProperties != null) + { + open.setProperties(serverProperties); + } + + OpenMatcher openMatcher = new OpenMatcher() + .withContainerId(notNullValue(String.class)) + .onSuccess(new FrameSender( + this, FrameType.AMQP, 0, + open, + null)); + + if (desiredCapabilities != null) + { + openMatcher.withDesiredCapabilities(arrayContaining(desiredCapabilities)); + } + else + { + openMatcher.withDesiredCapabilities(nullValue()); + } + + addHandler(openMatcher); + } + + public void expectSaslPlainConnect(String username, String password, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) + { + expectSaslPlainConnect(username, password, new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, serverCapabilities, serverProperties); + } + + public void expectSaslPlainConnect(String username, String password, Symbol[] desiredCapabilities, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) + { + byte[] usernameBytes = username.getBytes(); + byte[] passwordBytes = password.getBytes(); + byte[] data = new byte[usernameBytes.length+passwordBytes.length+2]; + System.arraycopy(usernameBytes, 0, data, 1, usernameBytes.length); + System.arraycopy(passwordBytes, 0, data, 2 + usernameBytes.length, passwordBytes.length); + + Matcher<Binary> initialResponseMatcher = equalTo(new Binary(data)); + + expectSaslConnect(PLAIN, initialResponseMatcher, desiredCapabilities, serverCapabilities, serverProperties); + } + public void expectFailingSaslConnect(Symbol[] serverMechs, Symbol clientSelectedMech) { SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(serverMechs); @@ -512,71 +588,6 @@ public class TestAmqpPeer implements AutoCloseable null))); } - public void expectPlainConnect(String username, String password, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) - { - expectPlainConnect(username, password, new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, serverCapabilities, serverProperties); - } - - public void expectPlainConnect(String username, String password, Symbol[] desiredCapabilities, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) - { - SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(Symbol.valueOf("PLAIN")); - addHandler(new HeaderHandlerImpl(AmqpHeader.SASL_HEADER, AmqpHeader.SASL_HEADER, - new FrameSender( - this, FrameType.SASL, 0, - saslMechanismsFrame, null))); - - byte[] usernameBytes = username.getBytes(); - byte[] passwordBytes = password.getBytes(); - byte[] data = new byte[usernameBytes.length+passwordBytes.length+2]; - System.arraycopy(usernameBytes, 0, data, 1, usernameBytes.length); - System.arraycopy(passwordBytes, 0, data, 2 + usernameBytes.length, passwordBytes.length); - - addHandler(new SaslInitMatcher() - .withMechanism(equalTo(Symbol.valueOf("PLAIN"))) - .withInitialResponse(equalTo(new Binary(data))) - .onSuccess(new AmqpPeerRunnable() - { - @Override - public void run() - { - TestAmqpPeer.this.sendFrame( - FrameType.SASL, 0, - new SaslOutcomeFrame().setCode(UnsignedByte.valueOf((byte)0)), - null, - false); - _driverRunnable.expectHeader(); - } - })); - - addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, AmqpHeader.HEADER)); - - OpenFrame open = createOpenFrame(); - if(serverCapabilities != null) - { - open.setOfferedCapabilities(serverCapabilities); - } - - if(serverProperties != null) - { - open.setProperties(serverProperties); - } - - OpenMatcher openMatcher = new OpenMatcher() - .withContainerId(notNullValue(String.class)) - .onSuccess(new FrameSender( - this, FrameType.AMQP, 0, - open, - null)); - - if (desiredCapabilities != null) { - openMatcher.withDesiredCapabilities(arrayContaining(desiredCapabilities)); - } else { - openMatcher.withDesiredCapabilities(nullValue()); - } - - addHandler(openMatcher); - } - // TODO - Reject any incoming connection using the supplied information public void rejectConnect(Symbol errorType, String errorMessage, Map<Symbol, Object> errorInfo) { SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(Symbol.valueOf("ANONYMOUS")); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org