NO-JIRA: consolidate the ANONYMOUS 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/848b1000 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/848b1000 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/848b1000 Branch: refs/heads/master Commit: 848b100046ab2f8517b0111d5684f909e3d18e7f Parents: 680fe88 Author: Robert Gemmell <rob...@apache.org> Authored: Tue Jun 16 11:34:55 2015 +0100 Committer: Robert Gemmell <rob...@apache.org> Committed: Tue Jun 16 11:34:55 2015 +0100 ---------------------------------------------------------------------- .../integration/ConnectionIntegrationTest.java | 2 +- .../integration/IdleTimeoutIntegrationTest.java | 12 +-- .../jms/integration/SaslIntegrationTest.java | 2 +- .../provider/failover/FailoverRedirectTest.java | 6 +- .../qpid/jms/test/testpeer/TestAmqpPeer.java | 107 +++++++------------ 5 files changed, 50 insertions(+), 79 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/848b1000/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java index afc7f72..b2166ac 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java @@ -142,7 +142,7 @@ public class ConnectionIntegrationTest extends QpidJmsTestCase { private void doAmqpHostnameTestImpl(String amqpHostname, boolean setHostnameOption, Matcher<?> hostnameMatcher) throws JMSException, InterruptedException, Exception, IOException { try (TestAmqpPeer testPeer = new TestAmqpPeer();) { - testPeer.expectAnonymousConnect(null, hostnameMatcher); + testPeer.expectSaslAnonymousConnect(null, hostnameMatcher); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/848b1000/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java index 67b326a..b796226 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java @@ -52,7 +52,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { @Test(timeout = 5000) public void testIdleTimeoutIsAdvertisedByDefault() throws Exception { try (TestAmqpPeer testPeer = new TestAmqpPeer();) { - testPeer.expectAnonymousConnect(greaterThan(UnsignedInteger.valueOf(0)), null); + testPeer.expectSaslAnonymousConnect(greaterThan(UnsignedInteger.valueOf(0)), null); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); @@ -75,7 +75,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { int configuredTimeout = 54320; int advertisedValue = configuredTimeout / 2; - testPeer.expectAnonymousConnect(equalTo(UnsignedInteger.valueOf(advertisedValue)), null); + testPeer.expectSaslAnonymousConnect(equalTo(UnsignedInteger.valueOf(advertisedValue)), null); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); @@ -101,7 +101,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { testPeer.setAdvertisedIdleTimeout(advertisedTimeout); - testPeer.expectAnonymousConnect(); + testPeer.expectSaslAnonymousConnect(); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); @@ -139,7 +139,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { testPeer.setAdvertisedIdleTimeout(advertisedTimeout); - testPeer.expectAnonymousConnect(); + testPeer.expectSaslAnonymousConnect(); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); @@ -168,7 +168,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { try (TestAmqpPeer testPeer = new TestAmqpPeer();) { int configuredTimeout = 200; - testPeer.expectAnonymousConnect(); + testPeer.expectSaslAnonymousConnect(); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); @@ -203,7 +203,7 @@ public class IdleTimeoutIntegrationTest extends QpidJmsTestCase { final CountDownLatch latch = new CountDownLatch(cycles); - testPeer.expectAnonymousConnect(); + testPeer.expectSaslAnonymousConnect(); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/848b1000/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 9696a26..a18f2d2 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 @@ -114,7 +114,7 @@ public class SaslIntegrationTest extends QpidJmsTestCase { public void testSaslAnonymousConnection() throws Exception { try (TestAmqpPeer testPeer = new TestAmqpPeer();) { // Expect an ANOYMOUS connection - testPeer.expectAnonymousConnect(); + testPeer.expectSaslAnonymousConnect(); // Each connection creates a session for managing temporary destinations etc testPeer.expectBegin(true); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/848b1000/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java index ba74564..8b3baeb 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java @@ -60,7 +60,7 @@ public class FailoverRedirectTest extends QpidJmsTestCase { final String redirectURI = createPeerURI(redirectedPeer); LOG.info("Backup peer is at: {}", redirectURI); - redirectedPeer.expectAnonymousConnect(); + redirectedPeer.expectSaslAnonymousConnect(); redirectedPeer.expectBegin(true); Map<Symbol, Object> redirectInfo = new HashMap<Symbol, Object>(); @@ -103,7 +103,7 @@ public class FailoverRedirectTest extends QpidJmsTestCase { final String redirectURI = createPeerURI(redirectedPeer); LOG.info("Primary is at {}: Backup peer is at: {}", rejectingURI, redirectURI); - redirectedPeer.expectAnonymousConnect(); + redirectedPeer.expectSaslAnonymousConnect(); redirectedPeer.expectBegin(true); Map<Symbol, Object> redirectInfo = new HashMap<Symbol, Object>(); @@ -111,7 +111,7 @@ public class FailoverRedirectTest extends QpidJmsTestCase { redirectInfo.put(NETWORK_HOST, "localhost"); redirectInfo.put(PORT, redirectedPeer.getServerPort()); - rejectingPeer.expectAnonymousConnect(); + rejectingPeer.expectSaslAnonymousConnect(); rejectingPeer.expectBegin(true); rejectingPeer.remotelyCloseConnection(true, ConnectionError.REDIRECT, "Server is full, go away", redirectInfo); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/848b1000/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 d6afef0..29a0634 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 ANONYMOUS = Symbol.valueOf("ANONYMOUS"); private static final Symbol EXTERNAL = Symbol.valueOf("EXTERNAL"); private static final Symbol PLAIN = Symbol.valueOf("PLAIN"); private static final Logger LOGGER = LoggerFactory.getLogger(TestAmqpPeer.class.getName()); @@ -366,7 +367,8 @@ public class TestAmqpPeer implements AutoCloseable return openFrame; } - public void expectSaslConnect(Symbol mechanism, Matcher<Binary> initialResponseMatcher, Symbol[] desiredCapabilities, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) + public void expectSaslConnect(Symbol mechanism, Matcher<Binary> initialResponseMatcher, Symbol[] desiredCapabilities, Symbol[] serverCapabilities, + Map<Symbol, Object> serverProperties, Matcher<?> idleTimeoutMatcher, Matcher<?> hostnameMatcher) { SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(mechanism); addHandler(new HeaderHandlerImpl(AmqpHeader.SASL_HEADER, AmqpHeader.SASL_HEADER, @@ -374,7 +376,7 @@ public class TestAmqpPeer implements AutoCloseable this, FrameType.SASL, 0, saslMechanismsFrame, null))); - addHandler(new SaslInitMatcher() + SaslInitMatcher saslInitMatcher = new SaslInitMatcher() .withMechanism(equalTo(mechanism)) .withInitialResponse(initialResponseMatcher) .onSuccess(new AmqpPeerRunnable() @@ -387,9 +389,19 @@ public class TestAmqpPeer implements AutoCloseable new SaslOutcomeFrame().setCode(UnsignedByte.valueOf((byte)0)), null, false); + + // Now that we processed the SASL layer AMQP header, reset the + // peer to expect the non-SASL AMQP header. _driverRunnable.expectHeader(); } - })); + }); + + if(hostnameMatcher != null) + { + saslInitMatcher.withHostname(hostnameMatcher); + } + + addHandler(saslInitMatcher); addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, AmqpHeader.HEADER)); @@ -420,6 +432,16 @@ public class TestAmqpPeer implements AutoCloseable openMatcher.withDesiredCapabilities(nullValue()); } + if(idleTimeoutMatcher !=null) + { + openMatcher.withIdleTimeOut(idleTimeoutMatcher); + } + + if(hostnameMatcher != null) + { + openMatcher.withHostname(hostnameMatcher); + } + addHandler(openMatcher); } @@ -438,7 +460,7 @@ public class TestAmqpPeer implements AutoCloseable Matcher<Binary> initialResponseMatcher = equalTo(new Binary(data)); - expectSaslConnect(PLAIN, initialResponseMatcher, desiredCapabilities, serverCapabilities, serverProperties); + expectSaslConnect(PLAIN, initialResponseMatcher, desiredCapabilities, serverCapabilities, serverProperties, null, null); } public void expectSaslExternalConnect() @@ -448,7 +470,17 @@ public class TestAmqpPeer implements AutoCloseable throw new IllegalStateException("need-client-cert must be enabled on the test peer"); } - expectSaslConnect(EXTERNAL, equalTo(new Binary(new byte[0])), new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, null, null); + expectSaslConnect(EXTERNAL, equalTo(new Binary(new byte[0])), new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, null, null, null, null); + } + + public void expectSaslAnonymousConnect() + { + expectSaslAnonymousConnect(null, null); + } + + public void expectSaslAnonymousConnect(Matcher<?> idleTimeoutMatcher, Matcher<?> hostnameMatcher) + { + expectSaslConnect(ANONYMOUS, equalTo(new Binary(new byte[0])), new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, null, null, idleTimeoutMatcher, hostnameMatcher); } public void expectFailingSaslConnect(Symbol[] serverMechs, Symbol clientSelectedMech) @@ -497,77 +529,16 @@ public class TestAmqpPeer implements AutoCloseable addHandler(openMatcher); } - public void expectAnonymousConnect() - { - expectAnonymousConnect(null, null); - } - - public void expectAnonymousConnect(Matcher<?> idleTimeoutMatcher, Matcher<?> hostnameMatcher) - { - SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(Symbol.valueOf("ANONYMOUS")); - addHandler(new HeaderHandlerImpl(AmqpHeader.SASL_HEADER, AmqpHeader.SASL_HEADER, - new FrameSender( - this, FrameType.SASL, 0, - saslMechanismsFrame, null))); - - SaslInitMatcher saslInitMatcher = new SaslInitMatcher() - .withMechanism(equalTo(Symbol.valueOf("ANONYMOUS"))) - .withInitialResponse(equalTo(new Binary(new byte[0]))) - .onSuccess(new AmqpPeerRunnable() - { - @Override - public void run() - { - TestAmqpPeer.this.sendFrame( - FrameType.SASL, 0, - new SaslOutcomeFrame().setCode(UnsignedByte.valueOf((byte)0)), - null, - false); - _driverRunnable.expectHeader(); - } - }); - - if(hostnameMatcher != null) - { - saslInitMatcher.withHostname(hostnameMatcher); - } - - addHandler(saslInitMatcher); - - addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, AmqpHeader.HEADER)); - - OpenFrame openFrame = createOpenFrame(); - - OpenMatcher openMatcher = new OpenMatcher() - .withContainerId(notNullValue(String.class)) - .onSuccess(new FrameSender( - this, FrameType.AMQP, 0, - openFrame, - null)); - - if(idleTimeoutMatcher !=null) - { - openMatcher.withIdleTimeOut(idleTimeoutMatcher); - } - - if(hostnameMatcher != null) - { - openMatcher.withHostname(hostnameMatcher); - } - - 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")); + SaslMechanismsFrame saslMechanismsFrame = new SaslMechanismsFrame().setSaslServerMechanisms(ANONYMOUS); addHandler(new HeaderHandlerImpl(AmqpHeader.SASL_HEADER, AmqpHeader.SASL_HEADER, new FrameSender( this, FrameType.SASL, 0, saslMechanismsFrame, null))); addHandler(new SaslInitMatcher() - .withMechanism(equalTo(Symbol.valueOf("ANONYMOUS"))) + .withMechanism(equalTo(ANONYMOUS)) .withInitialResponse(equalTo(new Binary(new byte[0]))) .onSuccess(new AmqpPeerRunnable() { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org