View | Details | Raw Unified | Return to bug 57447
Collapse All | Expand All

(-)src/protocol/http/org/apache/jmeter/protocol/http/control/DNSCacheManager.java (-6 / +10 lines)
Lines 42-48 Link Here
42
import org.xbill.DNS.Lookup;
42
import org.xbill.DNS.Lookup;
43
import org.xbill.DNS.Record;
43
import org.xbill.DNS.Record;
44
import org.xbill.DNS.Resolver;
44
import org.xbill.DNS.Resolver;
45
import org.xbill.DNS.SimpleResolver;
46
import org.xbill.DNS.TextParseException;
45
import org.xbill.DNS.TextParseException;
47
import org.xbill.DNS.Type;
46
import org.xbill.DNS.Type;
48
47
Lines 104-114 Link Here
104
        clone.cache = new LinkedHashMap<String, InetAddress[]>();
103
        clone.cache = new LinkedHashMap<String, InetAddress[]>();
105
        CollectionProperty dnsServers = getServers();
104
        CollectionProperty dnsServers = getServers();
106
        try {
105
        try {
107
            clone.resolver = new ExtendedResolver();
106
            String[] serverNames = new String[dnsServers.size()];
108
            PropertyIterator dnsServIt = dnsServers.iterator();
107
            PropertyIterator dnsServIt = dnsServers.iterator();
108
            int index = 0;
109
            while (dnsServIt.hasNext()) {
109
            while (dnsServIt.hasNext()) {
110
                String dnsServer = dnsServIt.next().getStringValue();
110
                serverNames[index] = dnsServIt.next().getStringValue();
111
                ((ExtendedResolver) clone.resolver).addResolver(new SimpleResolver(dnsServer));
111
                index++;
112
            }
113
            clone.resolver = new ExtendedResolver(serverNames);
114
            if (log.isDebugEnabled()) {
115
                log.debug("Using DNS Resolvers: " + Arrays.asList(((ExtendedResolver) clone.resolver).getResolvers()));
112
            }
116
            }
113
            // resolvers will be chosen via round-robin
117
            // resolvers will be chosen via round-robin
114
            ((ExtendedResolver) clone.resolver).setLoadBalance(true);
118
            ((ExtendedResolver) clone.resolver).setLoadBalance(true);
Lines 146-158 Link Here
146
     */
150
     */
147
    private InetAddress[] requestLookup(String host) throws UnknownHostException {
151
    private InetAddress[] requestLookup(String host) throws UnknownHostException {
148
        InetAddress[] addresses = null;
152
        InetAddress[] addresses = null;
149
        if (isCustomResolver() && ((ExtendedResolver) resolver).getResolvers().length > 1) {
153
        if (isCustomResolver() && ((ExtendedResolver) resolver).getResolvers().length > 0) {
150
            try {
154
            try {
151
                Lookup lookup = new Lookup(host, Type.A);
155
                Lookup lookup = new Lookup(host, Type.A);
152
                lookup.setCache(lookupCache);
156
                lookup.setCache(lookupCache);
153
                lookup.setResolver(resolver);
157
                lookup.setResolver(resolver);
154
                Record[] records = lookup.run();
158
                Record[] records = lookup.run();
155
                if (records.length == 0) {
159
                if (records == null || records.length == 0) {
156
                    throw new UnknownHostException("Failed to resolve host name: " + host);
160
                    throw new UnknownHostException("Failed to resolve host name: " + host);
157
                }
161
                }
158
                addresses = new InetAddress[records.length];
162
                addresses = new InetAddress[records.length];
(-)test/src/org/apache/jmeter/protocol/http/control/TestDNSCacheManager.java (+40 lines)
Line 0 Link Here
1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one or more
3
 * contributor license agreements. See the NOTICE file distributed with this
4
 * work for additional information regarding copyright ownership. The ASF
5
 * licenses this file to You under the Apache License, Version 2.0 (the
6
 * "License"); you may not use this file except in compliance with the License.
7
 * You may obtain a copy of the License at
8
 * 
9
 * http://www.apache.org/licenses/LICENSE-2.0
10
 * 
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * 
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
package org.apache.jmeter.protocol.http.control;
20
21
import java.net.UnknownHostException;
22
import org.apache.jmeter.junit.JMeterTestCase;
23
import org.junit.Test;
24
25
public class TestDNSCacheManager extends JMeterTestCase {
26
27
    @Test
28
    public void testCloneWithCustomResolverAndInvalidNameserver() throws UnknownHostException {
29
        DNSCacheManager original = new DNSCacheManager();
30
        original.setCustomResolver(true);
31
        original.addServer("127.0.0.99");
32
        DNSCacheManager clone = (DNSCacheManager) original.clone();
33
        try {
34
            clone.resolve("jmeter.apache.org");
35
            fail();
36
        } catch (UnknownHostException e) {
37
            // OK
38
        }
39
    }
40
}

Return to bug 57447