399324 - HttpClient does not handle correctly UnresolvedAddressException.

This commit is contained in:
Simone Bordet 2013-01-28 23:29:27 +01:00
parent 40621f0300
commit ec254cd165
2 changed files with 26 additions and 4 deletions

View File

@ -500,7 +500,9 @@ public class HttpClient extends ContainerLifeCycle
Future<Connection> result = new ConnectionCallback(destination, promise);
selectorManager.connect(channel, result);
}
catch (IOException x)
// Must catch all exceptions, since some like
// UnresolvedAddressException are not IOExceptions.
catch (Exception x)
{
if (channel != null)
close(channel);

View File

@ -18,14 +18,13 @@
package org.eclipse.jetty.client;
import static java.nio.file.StandardOpenOption.CREATE;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpCookie;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.nio.channels.UnresolvedAddressException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -38,7 +37,6 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
@ -61,6 +59,8 @@ import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.junit.Assert;
import org.junit.Test;
import static java.nio.file.StandardOpenOption.CREATE;
public class HttpClientTest extends AbstractHttpClientServerTest
{
public HttpClientTest(SslContextFactory sslContextFactory)
@ -715,4 +715,24 @@ public class HttpClientTest extends AbstractHttpClientServerTest
Assert.assertEquals(200, response.getStatus());
Assert.assertEquals(length, response.getContent().length);
}
@Test
public void testConnectThrowsUnresolvedAddressException() throws Exception
{
start(new EmptyServerHandler());
final CountDownLatch latch = new CountDownLatch(1);
client.newRequest("idontexist", 80)
.send(new Response.CompleteListener()
{
@Override
public void onComplete(Result result)
{
Assert.assertTrue(result.isFailed());
Assert.assertTrue(result.getFailure() instanceof UnresolvedAddressException);
latch.countDown();
}
});
Assert.assertTrue(latch.await(10, TimeUnit.SECONDS));
}
}