From 92ef52ca2031a33498b424fb204e27dfc78999d3 Mon Sep 17 00:00:00 2001 From: Felix Schumacher Date: Fri, 16 Jan 2015 22:15:40 +0100 Subject: [PATCH] Use only configured DNS Servers --- .../protocol/http/control/DNSCacheManager.java | 16 +++++++++------ .../protocol/http/control/TestDNSCacheManager.java | 24 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 test/src/org/apache/jmeter/protocol/http/control/TestDNSCacheManager.java diff --git a/src/protocol/http/org/apache/jmeter/protocol/http/control/DNSCacheManager.java b/src/protocol/http/org/apache/jmeter/protocol/http/control/DNSCacheManager.java index c3862b2..3cd31e9 100644 --- a/src/protocol/http/org/apache/jmeter/protocol/http/control/DNSCacheManager.java +++ b/src/protocol/http/org/apache/jmeter/protocol/http/control/DNSCacheManager.java @@ -42,7 +42,6 @@ import org.xbill.DNS.ExtendedResolver; import org.xbill.DNS.Lookup; import org.xbill.DNS.Record; import org.xbill.DNS.Resolver; -import org.xbill.DNS.SimpleResolver; import org.xbill.DNS.TextParseException; import org.xbill.DNS.Type; @@ -104,12 +103,17 @@ public class DNSCacheManager extends ConfigTestElement implements TestIterationL clone.cache = new LinkedHashMap(); CollectionProperty dnsServers = getServers(); try { - clone.resolver = new ExtendedResolver(); + String[] serverNames = new String[dnsServers.size()]; PropertyIterator dnsServIt = dnsServers.iterator(); + int index=0; while (dnsServIt.hasNext()) { - String dnsServer = dnsServIt.next().getStringValue(); - ((ExtendedResolver) clone.resolver).addResolver(new SimpleResolver(dnsServer)); + serverNames[index] = dnsServIt.next().getStringValue(); + index++; } + clone.resolver = new ExtendedResolver(serverNames); + log.debug("Using DNS Resolvers: " + + Arrays.asList(((ExtendedResolver) clone.resolver) + .getResolvers())); // resolvers will be chosen via round-robin ((ExtendedResolver) clone.resolver).setLoadBalance(true); } catch (UnknownHostException uhe) { @@ -146,13 +150,13 @@ public class DNSCacheManager extends ConfigTestElement implements TestIterationL */ private InetAddress[] requestLookup(String host) throws UnknownHostException { InetAddress[] addresses = null; - if (isCustomResolver() && ((ExtendedResolver) resolver).getResolvers().length > 1) { + if (isCustomResolver() && ((ExtendedResolver) resolver).getResolvers().length > 0) { try { Lookup lookup = new Lookup(host, Type.A); lookup.setCache(lookupCache); lookup.setResolver(resolver); Record[] records = lookup.run(); - if (records.length == 0) { + if (records == null || records.length == 0) { throw new UnknownHostException("Failed to resolve host name: " + host); } addresses = new InetAddress[records.length]; diff --git a/test/src/org/apache/jmeter/protocol/http/control/TestDNSCacheManager.java b/test/src/org/apache/jmeter/protocol/http/control/TestDNSCacheManager.java new file mode 100644 index 0000000..67a0c9f --- /dev/null +++ b/test/src/org/apache/jmeter/protocol/http/control/TestDNSCacheManager.java @@ -0,0 +1,24 @@ +package org.apache.jmeter.protocol.http.control; + +import java.net.UnknownHostException; + +import org.apache.jmeter.junit.JMeterTestCase; +import org.junit.Test; + +public class TestDNSCacheManager extends JMeterTestCase { + + @Test + public void testCloneWithCustomResolverAndInvalidNameserver() throws UnknownHostException { + DNSCacheManager original = new DNSCacheManager(); + original.setCustomResolver(true); + original.addServer("127.0.0.99"); + DNSCacheManager clone = (DNSCacheManager) original.clone(); + try { + clone.resolve("jmeter.apache.org"); + fail(); + } catch (UnknownHostException e) { + // OK + } + } + +} -- 1.9.1