From 5d55fd5c152443f0d4ed90b7da4b0d964d0afc81 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Fri, 11 Nov 2011 17:48:53 +0000 Subject: QPID-3610: set TCP_NODELAY to true by default, add new system property for changing default, add unit tests for system properties + connection url options. Merged from trunk r1200803 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.14@1200994 13f79535-47bb-0310-9956-ffa450edef68 --- .../client/BrokerDetails/BrokerDetailsTest.java | 31 +++++++++----- .../qpid/configuration/ClientProperties.java | 6 +++ .../apache/qpid/transport/ConnectionSettings.java | 5 ++- .../qpid/transport/ConnectionSettingsTest.java | 49 ++++++++++++++++++++++ 4 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionSettingsTest.java diff --git a/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java b/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java index 9095f94960..506185cbaf 100644 --- a/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java +++ b/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java @@ -20,19 +20,35 @@ */ package org.apache.qpid.test.unit.client.BrokerDetails; -import java.util.HashMap; -import java.util.Map; - import junit.framework.TestCase; import org.apache.qpid.client.AMQBrokerDetails; -import org.apache.qpid.client.AMQConnectionURL; -import org.apache.qpid.jms.ConnectionURL; import org.apache.qpid.jms.BrokerDetails; import org.apache.qpid.url.URLSyntaxException; public class BrokerDetailsTest extends TestCase { + public void testDefaultTCP_NODELAY() throws URLSyntaxException + { + String brokerURL = "tcp://localhost:5672"; + AMQBrokerDetails broker = new AMQBrokerDetails(brokerURL); + + assertNull("default value should be null", broker.getProperty(BrokerDetails.OPTIONS_TCP_NO_DELAY)); + } + + public void testOverridingTCP_NODELAY() throws URLSyntaxException + { + String brokerURL = "tcp://localhost:5672?tcp_nodelay='true'"; + AMQBrokerDetails broker = new AMQBrokerDetails(brokerURL); + + assertTrue("value should be true", Boolean.valueOf(broker.getProperty(BrokerDetails.OPTIONS_TCP_NO_DELAY))); + + brokerURL = "tcp://localhost:5672?tcp_nodelay='false''&maxprefetch='1'"; + broker = new AMQBrokerDetails(brokerURL); + + assertFalse("value should be false", Boolean.valueOf(broker.getProperty(BrokerDetails.OPTIONS_TCP_NO_DELAY))); + } + public void testMultiParameters() throws URLSyntaxException { String url = "tcp://localhost:5672?timeout='200',immediatedelivery='true'"; @@ -82,9 +98,4 @@ public class BrokerDetailsTest extends TestCase } } - - public static junit.framework.Test suite() - { - return new junit.framework.TestSuite(BrokerDetailsTest.class); - } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java index 62ded5b2d8..88e2fb0176 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java @@ -102,6 +102,12 @@ public class ClientProperties */ public static final int DEFAULT_SYNC_OPERATION_TIMEOUT = 60000; + /** + * System properties to change the default value used for TCP_NODELAY + */ + public static final String QPID_TCP_NODELAY_PROP_NAME = "qpid.tcp_nodelay"; + public static final String AMQJ_TCP_NODELAY_PROP_NAME = "amqj.tcp_nodelay"; + /* public static final QpidProperty IGNORE_SET_CLIENTID_PROP_NAME = QpidProperty.booleanProperty(false,"qpid.ignore_set_client_id","ignore_setclientID"); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java index 37a8e594c0..2ee507e2ec 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java @@ -22,6 +22,8 @@ package org.apache.qpid.transport; import java.util.Map; +import org.apache.qpid.configuration.ClientProperties; + /** * A ConnectionSettings object can only be associated with * one Connection object. I have added an assertion that will @@ -38,7 +40,8 @@ public class ConnectionSettings String username = "guest"; String password = "guest"; int port = 5672; - boolean tcpNodelay = Boolean.getBoolean("amqj.tcp_nodelay"); + boolean tcpNodelay = Boolean.valueOf(System.getProperty(ClientProperties.QPID_TCP_NODELAY_PROP_NAME, + System.getProperty(ClientProperties.AMQJ_TCP_NODELAY_PROP_NAME, "true"))); int maxChannelCount = 32767; int maxFrameSize = 65535; int heartbeatInterval; diff --git a/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionSettingsTest.java b/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionSettingsTest.java new file mode 100644 index 0000000000..62ca0b70ba --- /dev/null +++ b/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionSettingsTest.java @@ -0,0 +1,49 @@ +package org.apache.qpid.transport; + +import org.apache.qpid.configuration.ClientProperties; +import org.apache.qpid.test.utils.QpidTestCase; + +public class ConnectionSettingsTest extends QpidTestCase +{ + ConnectionSettings _conConnectionSettings; + + protected void setUp() throws Exception + { + super.setUp(); + _conConnectionSettings = new ConnectionSettings(); + } + + public void testDefaultTCP_NODELAY() + { + assertTrue("Default for isTcpNodelay() should be true", _conConnectionSettings.isTcpNodelay()); + } + + public void testSystemPropertyOverrideTrueForTCP_NODELAY() + { + systemPropertyOverrideForTCP_NODELAYImpl(ClientProperties.QPID_TCP_NODELAY_PROP_NAME, true); + } + + public void testSystemPropertyOverrideFalseForTCP_NODELAY() + { + systemPropertyOverrideForTCP_NODELAYImpl(ClientProperties.QPID_TCP_NODELAY_PROP_NAME, false); + } + + public void testLegacySystemPropertyOverrideTrueForTCP_NODELAY() + { + systemPropertyOverrideForTCP_NODELAYImpl(ClientProperties.AMQJ_TCP_NODELAY_PROP_NAME, true); + } + + public void testLegacySystemPropertyOverrideFalseForTCP_NODELAY() + { + systemPropertyOverrideForTCP_NODELAYImpl(ClientProperties.AMQJ_TCP_NODELAY_PROP_NAME, false); + } + + private void systemPropertyOverrideForTCP_NODELAYImpl(String propertyName, boolean value) + { + //set the default via system property + setTestSystemProperty(propertyName, String.valueOf(value)); + + _conConnectionSettings = new ConnectionSettings(); + assertEquals("Value for isTcpNodelay() is incorrect", value, _conConnectionSettings.isTcpNodelay()); + } +} -- cgit v1.2.1