/* * Copyright 2015-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.http; import com.amazonaws.*; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.net.InetAddress; import java.net.URI; import java.net.UnknownHostException; import java.util.Set; import java.util.UUID; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.*; public class DelegatingDnsResolverTest { private AmazonHttpClient testedClient; private AtomicInteger dnsResolutionCounter; private Set<String> requestedHosts; @Before public void resetClientConfiguration() { dnsResolutionCounter = new AtomicInteger(0); requestedHosts = new CopyOnWriteArraySet<String>(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.withMaxErrorRetry(0); clientConfiguration.withDnsResolver(new DnsResolver() { DnsResolver system = new SystemDefaultDnsResolver(); @Override public InetAddress[] resolve(String host) throws UnknownHostException { dnsResolutionCounter.incrementAndGet(); requestedHosts.add(host); return system.resolve(host); } }); testedClient = new AmazonHttpClient(clientConfiguration); } @After public void tearDown() { try { testedClient.shutdown(); } catch (Exception e) {} } @Test public void testDelegateIsCalledWhenRequestIsMade() { // The ExecutionContext should collect the expected RequestCount ExecutionContext context = new ExecutionContext(true); String randomHost = UUID.randomUUID().toString(); final Request<String> request = new DefaultRequest<String>("bob") {}; request.setEndpoint(URI.create("http://" + randomHost+"/")); request.setHttpMethod(HttpMethodName.GET); try { testedClient.requestExecutionBuilder().request(request).executionContext(context).execute(); Assert.fail("AmazonClientException is expected."); } catch (AmazonClientException ace) { } assertTrue("dnsResolver should have been called at least once", dnsResolutionCounter.get() > 0); assertTrue("An attempt to resolve host " + randomHost + " should have been made", requestedHosts.contains(randomHost)); } @Test public void testDelegatingDnsResolverCallsResolveOnDelegate() throws Exception { final AtomicInteger timesCalled = new AtomicInteger(); DnsResolver delegate = new DnsResolver() { @Override public InetAddress[] resolve(String host) throws UnknownHostException { timesCalled.incrementAndGet(); return new InetAddress[0]; } }; org.apache.http.conn.DnsResolver resolver = new DelegatingDnsResolver(delegate); resolver.resolve("localhost"); assertEquals("Delegate Resolver should have been executed", 1, timesCalled.get()); } }