From e66fac2f42fa23867aa77e56c1851e75e341477e Mon Sep 17 00:00:00 2001 From: Stanislav Knot Date: Fri, 5 Jan 2018 14:18:20 +0100 Subject: [PATCH] ARTEMIS-1581 fix handshake-timeout property configurability --- .../impl/netty/TransportConstants.java | 1 + .../server/config/JMSConfigurationTest.java | 56 +++++++++++++++++++ .../resources/server-start-stop-config1.xml | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java index efc5eb07481..1f06a964754 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java @@ -315,6 +315,7 @@ public class TransportConstants { allowableAcceptorKeys.add(ActiveMQDefaultConfiguration.getPropPasswordCodec()); allowableAcceptorKeys.add(TransportConstants.BACKLOG_PROP_NAME); allowableAcceptorKeys.add(TransportConstants.CRL_PATH_PROP_NAME); + allowableAcceptorKeys.add(TransportConstants.HANDSHAKE_TIMEOUT); ALLOWABLE_ACCEPTOR_KEYS = Collections.unmodifiableSet(allowableAcceptorKeys); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/config/JMSConfigurationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/config/JMSConfigurationTest.java index 165e6bfed26..a15d383348a 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/config/JMSConfigurationTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/config/JMSConfigurationTest.java @@ -21,13 +21,19 @@ import javax.jms.Queue; import javax.jms.Topic; import javax.naming.Context; +import java.net.URI; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; +import io.netty.buffer.ByteBuf; import org.apache.activemq.artemis.api.core.TransportConfiguration; +import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration; import org.apache.activemq.artemis.core.registry.JndiBindingRegistry; import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory; +import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.ActiveMQServers; import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl; import org.apache.activemq.artemis.jms.server.JMSServerManager; import org.apache.activemq.artemis.jms.server.config.ConnectionFactoryConfiguration; @@ -38,9 +44,15 @@ import org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl; import org.apache.activemq.artemis.jms.server.config.impl.TopicConfigurationImpl; import org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl; +import org.apache.activemq.artemis.junit.Wait; +import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; +import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule; import org.apache.activemq.artemis.tests.unit.util.InVMNamingContext; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; import org.apache.activemq.artemis.utils.RandomUtil; +import org.apache.activemq.transport.netty.NettyTransport; +import org.apache.activemq.transport.netty.NettyTransportFactory; +import org.apache.activemq.transport.netty.NettyTransportListener; import org.junit.Assert; import org.junit.Test; @@ -97,4 +109,48 @@ public void testSetupJMSConfiguration() throws Exception { server.stop(); } + + @Test + public void testHandshakeTimeoutWithValueSet() throws Exception { + SecurityConfiguration securityConfig = new SecurityConfiguration(); + securityConfig.addUser("guest", "guest"); + securityConfig.addRole("guest", "guest"); + securityConfig.setDefaultUser("guest"); + ActiveMQJAASSecurityManager securityManager = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(), securityConfig); + + ActiveMQServer server = ActiveMQServers.newActiveMQServer("server-start-stop-config1.xml", null, securityManager); + server.start(); + + TransportConfiguration tc = server.getConfiguration().getAcceptorConfigurations().iterator().next(); + String host = (String) tc.getParams().get(TransportConstants.HOST_PROP_NAME); + String port = (String) tc.getParams().get(TransportConstants.PORT_PROP_NAME); + int handshakeTimeout = Integer.parseInt(tc.getParams().get(TransportConstants.HANDSHAKE_TIMEOUT).toString()); + + assertEquals(5, handshakeTimeout); + + NettyTransport transport = NettyTransportFactory.createTransport(new URI("tcp://" + host + ":" + port)); + transport.setTransportListener(new NettyTransportListener() { + @Override + public void onData(ByteBuf incoming) { + + } + + @Override + public void onTransportClosed() { + } + + @Override + public void onTransportError(Throwable cause) { + } + + }); + + try { + transport.connect(); + assertTrue("Connection should be closed now", Wait.waitFor(() -> !transport.isConnected(), TimeUnit.SECONDS.toMillis(handshakeTimeout + 1))); + } finally { + transport.close(); + server.stop(); + } + } } diff --git a/tests/integration-tests/src/test/resources/server-start-stop-config1.xml b/tests/integration-tests/src/test/resources/server-start-stop-config1.xml index b85e5815c8b..5e02cc35d0b 100644 --- a/tests/integration-tests/src/test/resources/server-start-stop-config1.xml +++ b/tests/integration-tests/src/test/resources/server-start-stop-config1.xml @@ -29,7 +29,7 @@ ./target/tmp/activemq-unit-test/start-stop-data - tcp://localhost:61616 + tcp://localhost:61616?handshake-timeout=5 false