package io.airlift.http.client.jetty;
import com.google.common.collect.ImmutableList;
import io.airlift.http.client.AbstractHttpClientTest;
import io.airlift.http.client.HttpClientConfig;
import io.airlift.http.client.HttpRequestFilter;
import io.airlift.http.client.Request;
import io.airlift.http.client.ResponseHandler;
import io.airlift.http.client.TestingRequestFilter;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.IOException;
import java.net.URI;
import java.util.concurrent.TimeoutException;
import static com.google.common.io.Resources.getResource;
import static io.airlift.http.client.Request.Builder.prepareGet;
import static io.airlift.testing.Closeables.closeQuietly;
public class TestJettyHttpsClient
extends AbstractHttpClientTest
{
private JettyHttpClient httpClient;
private JettyIoPool jettyIoPool;
TestJettyHttpsClient()
{
super("localhost", getResource("localhost.keystore").toString());
}
@BeforeClass
public void setUpHttpClient()
{
jettyIoPool = new JettyIoPool("test-shared", new JettyIoPoolConfig());
httpClient = new JettyHttpClient(createClientConfig(), jettyIoPool, ImmutableList.<HttpRequestFilter>of(new TestingRequestFilter()));
}
@AfterClass(alwaysRun = true)
public void tearDownHttpClient()
throws Exception
{
closeQuietly(httpClient);
closeQuietly(jettyIoPool);
}
@Override
protected HttpClientConfig createClientConfig()
{
return new HttpClientConfig()
.setHttp2Enabled(false)
.setKeyStorePath(getResource("localhost.keystore").getPath())
.setKeyStorePassword("changeit")
.setTrustStorePath(getResource("localhost.truststore").getPath())
.setTrustStorePassword("changeit");
}
@Override
public <T, E extends Exception> T executeRequest(Request request, ResponseHandler<T, E> responseHandler)
throws Exception
{
return httpClient.execute(request, responseHandler);
}
@Override
public <T, E extends Exception> T executeRequest(HttpClientConfig config, Request request, ResponseHandler<T, E> responseHandler)
throws Exception
{
config.setKeyStorePath(getResource("localhost.keystore").getPath())
.setKeyStorePassword("changeit")
.setTrustStorePath(getResource("localhost.truststore").getPath())
.setTrustStorePassword("changeit");
try (
JettyIoPool jettyIoPool = new JettyIoPool("test-private", new JettyIoPoolConfig());
JettyHttpClient client = new JettyHttpClient(config, jettyIoPool, ImmutableList.<HttpRequestFilter>of(new TestingRequestFilter()))
) {
return client.execute(request, responseHandler);
}
}
@Test(expectedExceptions = {IOException.class})
public void testCertHostnameMismatch()
throws Exception
{
URI uri = new URI("https", null, "127.0.0.1", baseURI.getPort(), "/", null, null);
Request request = prepareGet()
.setUri(uri)
.build();
executeRequest(request, new ExceptionResponseHandler());
}
@Override
@Test(expectedExceptions = {IOException.class, IllegalStateException.class})
public void testConnectReadRequestClose()
throws Exception
{
super.testConnectReadRequestClose();
}
@Override
@Test(expectedExceptions = {IOException.class, IllegalStateException.class})
public void testConnectNoReadClose()
throws Exception
{
super.testConnectNoReadClose();
}
@Override
@Test(expectedExceptions = {IOException.class, TimeoutException.class, IllegalStateException.class})
public void testConnectReadIncompleteClose()
throws Exception
{
super.testConnectReadIncompleteClose();
}
}