QPID-8038: [Broker-J] Add authentication timeout protocol tests
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/cc8b3c0b Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/cc8b3c0b Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/cc8b3c0b Branch: refs/heads/master Commit: cc8b3c0bffdcc45086a35ef5e4a129969a791ae7 Parents: fa2b1ff Author: Keith Wall <kw...@apache.org> Authored: Fri Feb 9 17:08:06 2018 +0000 Committer: Keith Wall <kw...@apache.org> Committed: Mon Feb 12 13:55:30 2018 +0000 ---------------------------------------------------------------------- .../authtimeout/AuthenticationTimeoutTest.java | 55 ++++++ .../TransactionTimeoutTest.java | 171 ------------------- .../authtimeout/AuthenticationTimeoutTest.java | 68 ++++++++ .../qpid/SaslAuthenticationTimeoutTest.java | 78 +++++++++ 4 files changed, 201 insertions(+), 171 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/cc8b3c0b/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extensions/authtimeout/AuthenticationTimeoutTest.java ---------------------------------------------------------------------- diff --git a/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extensions/authtimeout/AuthenticationTimeoutTest.java b/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extensions/authtimeout/AuthenticationTimeoutTest.java new file mode 100644 index 0000000..cc9d8d6 --- /dev/null +++ b/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extensions/authtimeout/AuthenticationTimeoutTest.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.tests.protocol.v0_10.extensions.authtimeout; + +import static org.junit.Assert.assertThat; + +import java.net.InetSocketAddress; + +import org.hamcrest.CoreMatchers; +import org.junit.Test; + +import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.protocol.v0_10.transport.ConnectionStart; +import org.apache.qpid.tests.protocol.v0_10.FrameTransport; +import org.apache.qpid.tests.protocol.v0_10.Interaction; +import org.apache.qpid.tests.utils.BrokerAdmin; +import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase; +import org.apache.qpid.tests.utils.ConfigItem; + +@ConfigItem(name = Port.CONNECTION_MAXIMUM_AUTHENTICATION_DELAY, value = "500") +public class AuthenticationTimeoutTest extends BrokerAdminUsingTestBase +{ + @Test + public void authenticationTimeout() throws Exception + { + InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP); + try(FrameTransport transport = new FrameTransport(brokerAddress).connect()) + { + final Interaction interaction = transport.newInteraction(); + final ConnectionStart start = interaction.negotiateProtocol() + .consumeResponse() + .consumeResponse() + .getLatestResponse(ConnectionStart.class); + assertThat(start.getMechanisms(), CoreMatchers.hasItem("PLAIN")); + transport.assertNoMoreResponsesAndChannelClosed(); + } + } +} http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/cc8b3c0b/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extentions/transactiontimeout/TransactionTimeoutTest.java ---------------------------------------------------------------------- diff --git a/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extentions/transactiontimeout/TransactionTimeoutTest.java b/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extentions/transactiontimeout/TransactionTimeoutTest.java deleted file mode 100644 index ce2c320..0000000 --- a/systests/protocol-tests-amqp-0-10/src/test/java/org/apache/qpid/tests/protocol/v0_10/extentions/transactiontimeout/TransactionTimeoutTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -package org.apache.qpid.tests.protocol.v0_10.extentions.transactiontimeout; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.apache.qpid.tests.utils.BrokerAdmin.KIND_BROKER_J; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.net.InetSocketAddress; - -import org.junit.Before; -import org.junit.Test; - -import org.apache.qpid.server.protocol.v0_10.transport.ConnectionClose; -import org.apache.qpid.server.protocol.v0_10.transport.ConnectionCloseCode; -import org.apache.qpid.server.protocol.v0_10.transport.MessageAcceptMode; -import org.apache.qpid.server.protocol.v0_10.transport.MessageAcquireMode; -import org.apache.qpid.server.protocol.v0_10.transport.MessageCreditUnit; -import org.apache.qpid.server.protocol.v0_10.transport.MessageTransfer; -import org.apache.qpid.server.protocol.v0_10.transport.Range; -import org.apache.qpid.server.protocol.v0_10.transport.RangeSet; -import org.apache.qpid.server.protocol.v0_10.transport.SessionCompleted; -import org.apache.qpid.tests.protocol.Response; -import org.apache.qpid.tests.protocol.v0_10.FrameTransport; -import org.apache.qpid.tests.protocol.v0_10.Interaction; -import org.apache.qpid.tests.utils.BrokerAdmin; -import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase; -import org.apache.qpid.tests.utils.BrokerSpecific; -import org.apache.qpid.tests.utils.ConfigItem; - -@BrokerSpecific(kind = KIND_BROKER_J) -@ConfigItem(name = "virtualhost.storeTransactionOpenTimeoutClose", value = "1000") -public class TransactionTimeoutTest extends BrokerAdminUsingTestBase -{ - private InetSocketAddress _brokerAddress; - - @Before - public void setUp() - { - _brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP); - getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME); - } - - @Test - public void publishTransactionTimeout() throws Exception - { - try (FrameTransport transport = new FrameTransport(_brokerAddress).connect()) - { - final Interaction interaction = transport.newInteraction(); - byte[] sessionName = "test".getBytes(UTF_8); - interaction.openAnonymousConnection() - .channelId(1) - .attachSession(sessionName) - .tx().selectId(0).select() - .message() - .transferDestination(BrokerAdmin.TEST_QUEUE_NAME) - .transferId(1) - .transfer() - .session() - .flushCompleted() - .flush(); - - SessionCompleted completed; - do - { - completed = interaction.consumeResponse().getLatestResponse(SessionCompleted.class); - } - while (!completed.getCommands().includes(1)); - - int queueDepthMessages = getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME); - assertThat(queueDepthMessages, is(equalTo(0))); - - ConnectionClose close = receiveResponse(interaction, ConnectionClose.class); - assertThat(close.getReplyCode(), is(equalTo(ConnectionCloseCode.CONNECTION_FORCED))); - assertThat(close.getReplyText(), containsString("transaction timed out")); - - assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0))); - } - } - - @Test - public void consumeTransactionTimeout() throws Exception - { - String testMessageBody = "testMessage"; - getBrokerAdmin().putMessageOnQueue(BrokerAdmin.TEST_QUEUE_NAME, testMessageBody); - try (FrameTransport transport = new FrameTransport(_brokerAddress).connect()) - { - final Interaction interaction = transport.newInteraction(); - byte[] sessionName = "testSession".getBytes(UTF_8); - final String subscriberName = "testSubscriber"; - interaction.openAnonymousConnection() - .channelId(1) - .attachSession(sessionName) - .tx().selectId(0).select() - .message() - .subscribeAcceptMode(MessageAcceptMode.EXPLICIT) - .subscribeAcquireMode(MessageAcquireMode.PRE_ACQUIRED) - .subscribeDestination(subscriberName) - .subscribeQueue(BrokerAdmin.TEST_QUEUE_NAME) - .subscribeId(0) - .subscribe() - .message() - .flowId(1) - .flowDestination(subscriberName) - .flowUnit(MessageCreditUnit.MESSAGE) - .flowValue(1) - .flow() - .message() - .flowId(2) - .flowDestination(subscriberName) - .flowUnit(MessageCreditUnit.BYTE) - .flowValue(-1) - .flow(); - - MessageTransfer transfer = receiveResponse(interaction, MessageTransfer.class); - - assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(1))); - - RangeSet transfers = Range.newInstance(transfer.getId()); - interaction.message().acceptId(3).acceptTransfers(transfers).accept() - .session() - .flushCompleted() - .flush(); - - SessionCompleted completed = receiveResponse(interaction, SessionCompleted.class); - - assertThat(completed.getCommands(), is(notNullValue())); - assertThat(completed.getCommands().includes(3), is(equalTo(true))); - - ConnectionClose close = receiveResponse(interaction, ConnectionClose.class); - assertThat(close.getReplyCode(), is(equalTo(ConnectionCloseCode.CONNECTION_FORCED))); - assertThat(close.getReplyText(), containsString("transaction timed out")); - } - } - - private <T> T receiveResponse(final Interaction interaction, Class<T> clazz) throws Exception - { - T result = null; - do - { - Response<?> response = interaction.consumeResponse().getLatestResponse(); - if (clazz.isInstance(response.getBody())) - { - result = (T) response.getBody(); - } - } - while (result == null); - return result; - } -} http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/cc8b3c0b/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/extension/authtimeout/AuthenticationTimeoutTest.java ---------------------------------------------------------------------- diff --git a/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/extension/authtimeout/AuthenticationTimeoutTest.java b/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/extension/authtimeout/AuthenticationTimeoutTest.java new file mode 100644 index 0000000..3e16ded --- /dev/null +++ b/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/extension/authtimeout/AuthenticationTimeoutTest.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.tests.protocol.v0_8.extension.authtimeout; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.junit.Assume.assumeThat; + +import java.net.InetSocketAddress; +import java.util.Arrays; + +import org.junit.Test; + +import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.protocol.v0_8.transport.ConnectionSecureBody; +import org.apache.qpid.server.protocol.v0_8.transport.ConnectionStartBody; +import org.apache.qpid.tests.protocol.v0_8.FrameTransport; +import org.apache.qpid.tests.protocol.v0_8.Interaction; +import org.apache.qpid.tests.utils.BrokerAdmin; +import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase; +import org.apache.qpid.tests.utils.ConfigItem; + +@ConfigItem(name = Port.CONNECTION_MAXIMUM_AUTHENTICATION_DELAY, value = "500") +public class AuthenticationTimeoutTest extends BrokerAdminUsingTestBase +{ + @Test + public void authenticationTimeout() throws Exception + { + assumeThat(getBrokerAdmin().isSASLMechanismSupported("PLAIN"), is(true)); + + final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP); + + try (FrameTransport transport = new FrameTransport(addr).connect()) + { + final Interaction interaction = transport.newInteraction(); + final ConnectionStartBody start = interaction.negotiateProtocol() + .consumeResponse() + .getLatestResponse(ConnectionStartBody.class); + + assertThat(Arrays.asList(new String(start.getMechanisms()).split(" ")), hasItem("PLAIN")); + + interaction.connection() + .startOkMechanism("PLAIN") + .startOk() + .consumeResponse(ConnectionSecureBody.class); + + transport.assertNoMoreResponsesAndChannelClosed(); + } + } +} http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/cc8b3c0b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/extensions/qpid/SaslAuthenticationTimeoutTest.java ---------------------------------------------------------------------- diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/extensions/qpid/SaslAuthenticationTimeoutTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/extensions/qpid/SaslAuthenticationTimeoutTest.java new file mode 100644 index 0000000..2867699 --- /dev/null +++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/extensions/qpid/SaslAuthenticationTimeoutTest.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.tests.protocol.v1_0.transport.security.sasl.extensions.qpid; + +import static org.apache.qpid.tests.utils.BrokerAdmin.KIND_BROKER_J; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.junit.Assume.assumeThat; + +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +import org.junit.Before; +import org.junit.Test; + +import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.protocol.v1_0.type.Symbol; +import org.apache.qpid.server.protocol.v1_0.type.security.SaslMechanisms; +import org.apache.qpid.tests.protocol.v1_0.FrameTransport; +import org.apache.qpid.tests.protocol.v1_0.Interaction; +import org.apache.qpid.tests.utils.BrokerAdmin; +import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase; +import org.apache.qpid.tests.utils.BrokerSpecific; +import org.apache.qpid.tests.utils.ConfigItem; + +@BrokerSpecific(kind = KIND_BROKER_J) +@ConfigItem(name = Port.CONNECTION_MAXIMUM_AUTHENTICATION_DELAY, value = "500") +public class SaslAuthenticationTimeoutTest extends BrokerAdminUsingTestBase +{ + private static final Symbol PLAIN = Symbol.getSymbol("PLAIN"); + private static final byte[] SASL_AMQP_HEADER_BYTES = "AMQP\3\1\0\0".getBytes(StandardCharsets.UTF_8); + + @Before + public void setUp() + { + assumeThat(getBrokerAdmin().isSASLSupported(), is(true)); + assumeThat(getBrokerAdmin().isSASLMechanismSupported(PLAIN.toString()), is(true)); + } + + @Test + public void authenticationTimeout() throws Exception + { + final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP); + try (FrameTransport transport = new FrameTransport(addr, true).connect()) + { + final Interaction interaction = transport.newInteraction(); + final byte[] saslHeaderResponse = interaction.protocolHeader(SASL_AMQP_HEADER_BYTES) + .negotiateProtocol().consumeResponse() + .getLatestResponse(byte[].class); + assertThat(saslHeaderResponse, is(equalTo(SASL_AMQP_HEADER_BYTES))); + + SaslMechanisms mechanismsResponse = interaction.consumeResponse().getLatestResponse(SaslMechanisms.class); + assertThat(Arrays.asList(mechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN)); + + transport.assertNoMoreResponsesAndChannelClosed(); + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org