This is an automated email from the ASF dual-hosted git repository.
tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-jms.git
The following commit(s) were added to refs/heads/main by this push:
new f0788de QPIDJMS-536 Remove InetAddress.getByName lookup for compare
new 50e4f8f This closes #40
f0788de is described below
commit f0788dee4c8129a1f7414ed7fd6884b7631e536a
Author: Stephen Nimmo <[email protected]>
AuthorDate: Wed May 5 16:31:48 2021 -0400
QPIDJMS-536 Remove InetAddress.getByName lookup for compare
URIs should be able to resolve to the same IP address, as the brokers may
be running behind a proxy and
the remote will select the appropraite ultimate destination based on
service name lookups etc. Updated
tests to remove constraints around resolving the URI back to an IP Address.
---
.../jms/provider/failover/FailoverUriPool.java | 29 +----
.../jms/provider/failover/FailoverUriPoolTest.java | 125 +++++++++++----------
2 files changed, 73 insertions(+), 81 deletions(-)
diff --git
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverUriPool.java
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverUriPool.java
index f690da2..68b0b5a 100644
---
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverUriPool.java
+++
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverUriPool.java
@@ -16,8 +16,6 @@
*/
package org.apache.qpid.jms.provider.failover;
-import java.io.IOException;
-import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
@@ -307,30 +305,15 @@ public class FailoverUriPool {
private boolean compareURIs(final URI first, final URI second) {
boolean result = false;
+
if (first == null || second == null) {
return result;
- }
-
- if (first.getPort() == second.getPort()) {
- InetAddress firstAddr = null;
- InetAddress secondAddr = null;
- try {
- firstAddr = InetAddress.getByName(first.getHost());
- secondAddr = InetAddress.getByName(second.getHost());
-
- if (firstAddr.equals(secondAddr)) {
- result = true;
- }
- } catch (IOException e) {
- if (firstAddr == null) {
- LOG.error("Failed to Lookup INetAddress for URI[ " + first
+ " ] : " + e);
- } else {
- LOG.error("Failed to Lookup INetAddress for URI[ " +
second + " ] : " + e);
- }
+ } else if (first.getPort() == second.getPort()) {
+ final String firstHost = first.getHost();
+ final String secondHost = second.getHost();
- if (first.getHost().equalsIgnoreCase(second.getHost())) {
- result = true;
- }
+ if (firstHost.equalsIgnoreCase(secondHost)) {
+ result = true;
}
}
diff --git
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
index 0ff0942..173a0b0 100644
---
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
+++
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import java.net.InetAddress;
import java.net.URI;
@@ -152,78 +152,81 @@ public class FailoverUriPoolTest extends QpidJmsTestCase {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
- pool.add(new URI("tcp://127.0.0.1:5672?transport.tcpNoDelay=true"));
+ pool.add(new URI("tcp://localhost:5671?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
assertEquals(1, pool.size());
pool.add(new URI("tcp://localhost:5672?transport.tcpNoDelay=true"));
- assertEquals(1, pool.size());
+ assertEquals(2, pool.size());
- assertEquals(1, pool.size());
+ assertEquals(2, pool.size());
pool.add(new URI("tcp://localhost:5672?transport.tcpNoDelay=false"));
- assertEquals(1, pool.size());
+ assertEquals(2, pool.size());
}
@Test
- public void testDuplicatesNotAddedWithHostResolution() throws
URISyntaxException {
+ public void testNoHostResolutionPerformedFilterDuplicatesOnly() throws
URISyntaxException {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
pool.add(new URI("tcp://127.0.0.1:5672"));
assertFalse(pool.isEmpty());
-
- assertEquals(1, pool.size());
- pool.add(new URI("tcp://localhost:5672"));
assertEquals(1, pool.size());
+ assertFalse(pool.isEmpty());
+ pool.add(new URI("tcp://127.0.0.1:5672")); // Not added as it
duplicates previous
+ assertFalse(pool.isEmpty());
assertEquals(1, pool.size());
- pool.add(new URI("tcp://localhost:5673"));
+
+ pool.add(new URI("tcp://localhost:5672")); // Added since there is no
host resolution
assertEquals(2, pool.size());
+
+ pool.add(new URI("tcp://localhost:5673")); // Added since the port is
different
+ assertEquals(3, pool.size());
+
+ pool.add(new URI("tcp://localhost:5672")); // Not added as it
duplicates previous
+ assertEquals(3, pool.size());
}
@Test
- public void testDuplicatesNotAddedUnresolvable() throws Exception {
- assumeFalse("Host resolution works when not expected",
checkIfResolutionWorks());
-
+ public void testDuplicatesNotAddedWhenCaseIsDifferent() throws Exception {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
- pool.add(new URI("tcp://shouldbeunresolvable:5672"));
+ pool.add(new URI("tcp://somerandomhostname:5672"));
assertFalse(pool.isEmpty());
assertEquals(1, pool.size());
- pool.add(new URI("tcp://shouldbeunresolvable:5672"));
+ pool.add(new URI("tcp://SomerandomHostname:5672"));
assertEquals(1, pool.size());
assertEquals(1, pool.size());
- pool.add(new URI("tcp://SHOULDBEUNRESOLVABLE:5672"));
+ pool.add(new URI("tcp://SOMERANDOMHOSTNAME:5672"));
assertEquals(1, pool.size());
assertEquals(1, pool.size());
- pool.add(new URI("tcp://SHOULDBEUNRESOLVABLE2:5672"));
+ pool.add(new URI("tcp://SOMERANDOMHOSTNAME2:5672"));
assertEquals(2, pool.size());
}
@Test
- public void testDuplicatesNotAddedWhenQueryPresentAndUnresolveable()
throws URISyntaxException {
- assumeFalse("Host resolution works when not expected",
checkIfResolutionWorks());
-
+ public void
testDuplicatesNotAddedWhenCaseIsDifferentAndQueryStringPresent() throws
URISyntaxException {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
- pool.add(new
URI("tcp://shouldbeunresolvable:5672?transport.tcpNoDelay=true"));
+ pool.add(new
URI("tcp://somerandomhostname:5672?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
assertEquals(1, pool.size());
- pool.add(new
URI("tcp://shouldbeunresolvable:5672?transport.tcpNoDelay=false"));
+ pool.add(new
URI("tcp://SomerandomHostname:5672?transport.tcpNoDelay=false"));
assertEquals(1, pool.size());
assertEquals(1, pool.size());
- pool.add(new
URI("tcp://SHOULDBEUNRESOLVABLE:5672?transport.tcpNoDelay=true"));
+ pool.add(new
URI("tcp://SOMERANDOMHOSTNAME:5672?transport.tcpNoDelay=true"));
assertEquals(1, pool.size());
assertEquals(1, pool.size());
- pool.add(new
URI("tcp://SHOULDBEUNRESOLVABLE2:5672?transport.tcpNoDelay=true"));
+ pool.add(new
URI("tcp://SOMERANDOMHOSTNAME2:5672?transport.tcpNoDelay=true"));
assertEquals(2, pool.size());
}
@@ -353,60 +356,54 @@ public class FailoverUriPoolTest extends QpidJmsTestCase {
assertTrue(pool.isEmpty());
pool.add(new URI("tcp://127.0.0.1:5672?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
- pool.remove(new URI("tcp://localhost:5672?transport.tcpNoDelay=true"));
- assertTrue(pool.isEmpty());
- pool.add(new URI("tcp://127.0.0.1:5672?transport.tcpNoDelay=true"));
- assertFalse(pool.isEmpty());
- pool.remove(new
URI("tcp://localhost:5672?transport.tcpNoDelay=false"));
+ pool.remove(new URI("tcp://127.0.0.1:5672?transport.tcpNoDelay=true"));
assertTrue(pool.isEmpty());
}
@Test
- public void testRemoveWithHostResolution() throws URISyntaxException {
+ public void testRemove() throws URISyntaxException {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
pool.add(new URI("tcp://127.0.0.1:5672"));
assertFalse(pool.isEmpty());
- pool.remove(new URI("tcp://localhost:5672"));
+ pool.remove(new URI("tcp://127.0.0.1:5672"));
assertTrue(pool.isEmpty());
pool.add(new URI("tcp://127.0.0.1:5672"));
assertFalse(pool.isEmpty());
+ pool.add(new URI("tcp://127.0.0.1:5673"));
+ assertFalse(pool.isEmpty());
pool.remove(new URI("tcp://localhost:5673"));
assertFalse(pool.isEmpty());
}
@Test
- public void testRemoveWhenUnresolvable() throws URISyntaxException {
- assumeFalse("Host resolution works when not expected",
checkIfResolutionWorks());
-
+ public void testRemoveHostIgnoresCaseInHostname() throws
URISyntaxException {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
- pool.add(new URI("tcp://shouldbeunresolvable:5672"));
+ pool.add(new URI("tcp://somerandomhostname:5672"));
assertFalse(pool.isEmpty());
- pool.remove(new URI("tcp://SHOULDBEUNRESOLVABLE:5672"));
+ pool.remove(new URI("tcp://SOMERANDOMHOSTNAME:5672"));
assertTrue(pool.isEmpty());
- pool.add(new URI("tcp://shouldbeunresolvable:5672"));
+ pool.add(new URI("tcp://somerandomhostname:5672"));
assertFalse(pool.isEmpty());
- pool.remove(new URI("tcp://shouldbeunresolvable:5673"));
+ pool.remove(new URI("tcp://somerandomhostname:5673"));
assertFalse(pool.isEmpty());
}
@Test
- public void testRemoveWhenQueryPresentAndUnresolveable() throws
URISyntaxException {
- assumeFalse("Host resolution works when not expected",
checkIfResolutionWorks());
-
+ public void testRemoveWhenQueryPresentIgnoresCaseInHostname() throws
URISyntaxException {
FailoverUriPool pool = new FailoverUriPool();
assertTrue(pool.isEmpty());
- pool.add(new
URI("tcp://shouldbeunresolvable:5672?transport.tcpNoDelay=true"));
+ pool.add(new
URI("tcp://somerandomhostname:5672?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
- pool.remove(new
URI("tcp://SHOULDBEUNRESOLVABLE:5672?transport.tcpNoDelay=true"));
+ pool.remove(new
URI("tcp://SOMERANDOMHOSTNAME:5672?transport.tcpNoDelay=true"));
assertTrue(pool.isEmpty());
- pool.add(new
URI("tcp://shouldbeunresolvable:5672?transport.tcpNoDelay=true"));
+ pool.add(new
URI("tcp://somerandomhostname:5672?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
- pool.remove(new
URI("tcp://shouldbeunresolvable:5673?transport.tcpNoDelay=true"));
+ pool.remove(new
URI("tcp://somerandomhostname:5673?transport.tcpNoDelay=true"));
assertFalse(pool.isEmpty());
}
@@ -421,7 +418,6 @@ public class FailoverUriPoolTest extends QpidJmsTestCase {
}
private void assertConnectedEffectOnPool(boolean randomize, boolean
shouldShuffle) {
-
FailoverUriPool pool = new FailoverUriPool(uris, null);
pool.setRandomize(randomize);
@@ -547,18 +543,6 @@ public class FailoverUriPoolTest extends QpidJmsTestCase {
assertEquals(uris.get(0).getHost(), pool.getNext().getHost());
}
- private boolean checkIfResolutionWorks() {
- boolean resolutionWorks = false;
- try {
- resolutionWorks = InetAddress.getByName("shouldbeunresolvable") !=
null;
- resolutionWorks = InetAddress.getByName("SHOULDBEUNRESOLVABLE") !=
null;
- resolutionWorks = InetAddress.getByName("SHOULDBEUNRESOLVABLE2")
!= null;
- } catch (Exception e) {
- }
-
- return resolutionWorks;
- }
-
@Test
public void testRemoveAll() throws URISyntaxException {
FailoverUriPool pool = new FailoverUriPool(uris, null);
@@ -570,4 +554,29 @@ public class FailoverUriPoolTest extends QpidJmsTestCase {
pool.removeAll();
}
+
+ @Test
+ public void testLoopBackAndLocalHostAllowedInSamePool() throws
URISyntaxException {
+ assumeTrue(checkLocalHostResolvesToLoopbackIP());
+
+ FailoverUriPool pool = new FailoverUriPool();
+
+ assertTrue(pool.isEmpty());
+ pool.add(new URI("tcp://127.0.0.1:5672"));
+ assertFalse(pool.isEmpty());
+ assertEquals(1, pool.size());
+ pool.add(new URI("tcp://localhost:5672"));
+ assertEquals(2, pool.size());
+ }
+
+ private boolean checkLocalHostResolvesToLoopbackIP() {
+ try {
+ InetAddress localhost = InetAddress.getByName("localhost");
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+
+ return localhost.equals(loopback);
+ } catch (Exception failsOnError) {
+ return false;
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]