diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpIntegrationTests.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpIntegrationTests.java new file mode 100644 index 0000000000..639b0c063a --- /dev/null +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpIntegrationTests.java @@ -0,0 +1,115 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License 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. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.hc.client5.testing.sync; + +import org.apache.hc.core5.http.URIScheme; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; + +public class HttpIntegrationTests { + + @Nested + @DisplayName("Request execution (HTTP/1.1)") + public class RequestExecution extends TestClientRequestExecution { + + public RequestExecution() throws Exception { + super(URIScheme.HTTP); + } + + } + + @Nested + @DisplayName("Request execution (HTTP/1.1, TLS)") + public class RequestExecutionTls extends TestClientRequestExecution { + + public RequestExecutionTls() throws Exception { + super(URIScheme.HTTPS); + } + + } + + @Nested + @DisplayName("Authentication (HTTP/1.1)") + public class Authentication extends TestClientAuthentication { + + public Authentication() throws Exception { + super(URIScheme.HTTP); + } + + } + + @Nested + @DisplayName("Authentication (HTTP/1.1, TLS)") + public class AuthenticationTls extends TestClientAuthentication { + + public AuthenticationTls() throws Exception { + super(URIScheme.HTTPS); + } + + } + + @Nested + @DisplayName("Content coding (HTTP/1.1)") + public class ContentCoding extends TestContentCodings { + + public ContentCoding() throws Exception { + super(URIScheme.HTTP); + } + + } + + @Nested + @DisplayName("Content coding (HTTP/1.1, TLS)") + public class ContentCodingTls extends TestContentCodings { + + public ContentCodingTls() throws Exception { + super(URIScheme.HTTPS); + } + + } + + @Nested + @DisplayName("Redirects (HTTP/1.1)") + public class Redirects extends TestRedirects { + + public Redirects() throws Exception { + super(URIScheme.HTTP); + } + + } + + @Nested + @DisplayName("Redirects (HTTP/1.1, TLS)") + public class RedirectsTls extends TestRedirects { + + public RedirectsTls() throws Exception { + super(URIScheme.HTTPS); + } + + } + +} \ No newline at end of file diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpMinimalIntegrationTests.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpMinimalIntegrationTests.java new file mode 100644 index 0000000000..6ba2fdac64 --- /dev/null +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/HttpMinimalIntegrationTests.java @@ -0,0 +1,55 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License 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. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.hc.client5.testing.sync; + +import org.apache.hc.core5.http.URIScheme; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; + +public class HttpMinimalIntegrationTests { + + @Nested + @DisplayName("Request execution (HTTP/1.1)") + public class RequestExecution extends TestMinimalClientRequestExecution { + + public RequestExecution() throws Exception { + super(URIScheme.HTTP); + } + + } + + @Nested + @DisplayName("Request execution (HTTP/1.1, TLS)") + public class RequestExecutionTls extends TestMinimalClientRequestExecution { + + public RequestExecutionTls() throws Exception { + super(URIScheme.HTTPS); + } + + } + +} \ No newline at end of file diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java index 27f2a3f035..97596a7f1f 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java @@ -99,12 +99,20 @@ /** * Unit tests for automatic client authentication. */ -public class TestClientAuthentication { +public abstract class TestClientAuthentication { public static final Timeout TIMEOUT = Timeout.ofMinutes(1); @RegisterExtension - private TestClientResources testResources = new TestClientResources(URIScheme.HTTP, TIMEOUT); + private TestClientResources testResources; + + protected TestClientAuthentication(final URIScheme scheme) { + this.testResources = new TestClientResources(scheme, TIMEOUT); + } + + public URIScheme scheme() { + return testResources.scheme(); + } public ClassicTestServer startServer(final Authenticator authenticator) throws IOException { return testResources.startServer( @@ -117,11 +125,11 @@ public ClassicTestServer startServer() throws IOException { return startServer(new BasicTestAuthenticator("test:test", "test realm")); } - public CloseableHttpClient startClient(final Consumer clientCustomizer) { + public CloseableHttpClient startClient(final Consumer clientCustomizer) throws Exception { return testResources.startClient(clientCustomizer); } - public CloseableHttpClient startClient() { + public CloseableHttpClient startClient() throws Exception { return testResources.startClient(builder -> {}); } diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientRequestExecution.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientRequestExecution.java index 5f1fdeb2d1..dce158a99d 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientRequestExecution.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientRequestExecution.java @@ -74,22 +74,30 @@ /** * Client protocol handling tests. */ -public class TestClientRequestExecution { +public abstract class TestClientRequestExecution { public static final Timeout TIMEOUT = Timeout.ofMinutes(1); @RegisterExtension - private TestClientResources testResources = new TestClientResources(URIScheme.HTTP, TIMEOUT); + private TestClientResources testResources; + + protected TestClientRequestExecution(final URIScheme scheme) { + this.testResources = new TestClientResources(scheme, TIMEOUT); + } + + public URIScheme scheme() { + return testResources.scheme(); + } public ClassicTestServer startServer() throws IOException { return testResources.startServer(null, null, null); } - public CloseableHttpClient startClient(final Consumer clientCustomizer) { + public CloseableHttpClient startClient(final Consumer clientCustomizer) throws Exception { return testResources.startClient(clientCustomizer); } - public CloseableHttpClient startClient() { + public CloseableHttpClient startClient() throws Exception { return testResources.startClient(builder -> {}); } diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestConnectionManagement.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestConnectionManagement.java index 37f8c46d26..ff1f8d0a24 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestConnectionManagement.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestConnectionManagement.java @@ -76,7 +76,7 @@ public ClassicTestServer startServer() throws IOException { return testResources.startServer(null, null, null); } - public CloseableHttpClient startClient() { + public CloseableHttpClient startClient() throws Exception { return testResources.startClient(b -> {}, b -> {}); } diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestContentCodings.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestContentCodings.java index 633670f70c..6d99a84f94 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestContentCodings.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestContentCodings.java @@ -72,22 +72,30 @@ * require no intervention from the user of HttpClient, but we still want to let clients do their * own thing if they so wish. */ -public class TestContentCodings { +public abstract class TestContentCodings { public static final Timeout TIMEOUT = Timeout.ofMinutes(1); @RegisterExtension - private TestClientResources testResources = new TestClientResources(URIScheme.HTTP, TIMEOUT); + private TestClientResources testResources; + + protected TestContentCodings(final URIScheme scheme) { + this.testResources = new TestClientResources(scheme, TIMEOUT); + } + + public URIScheme scheme() { + return testResources.scheme(); + } public ClassicTestServer startServer() throws IOException { return testResources.startServer(null, null, null); } - public CloseableHttpClient startClient(final Consumer clientCustomizer) { + public CloseableHttpClient startClient(final Consumer clientCustomizer) throws Exception { return testResources.startClient(clientCustomizer); } - public CloseableHttpClient startClient() { + public CloseableHttpClient startClient() throws Exception { return testResources.startClient(builder -> {}); } diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java index 47bbfb1f45..1681a4bdc4 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java @@ -56,13 +56,20 @@ /** * Client protocol handling tests. */ -public class TestMinimalClientRequestExecution { +public abstract class TestMinimalClientRequestExecution { public static final Timeout TIMEOUT = Timeout.ofMinutes(1); @RegisterExtension - private TestClientResources testResources = new TestClientResources(URIScheme.HTTP, TIMEOUT); + private TestClientResources testResources; + protected TestMinimalClientRequestExecution(final URIScheme scheme) { + this.testResources = new TestClientResources(scheme, TIMEOUT); + } + + public URIScheme scheme() { + return testResources.scheme(); + } private static class SimpleService implements HttpRequestHandler { public SimpleService() { diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestRedirects.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestRedirects.java index 2499f47989..a881d1750d 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestRedirects.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestRedirects.java @@ -81,23 +81,31 @@ /** * Redirection test cases. */ -public class TestRedirects { +public abstract class TestRedirects { public static final Timeout TIMEOUT = Timeout.ofMinutes(1); @RegisterExtension - private TestClientResources testResources = new TestClientResources(URIScheme.HTTP, TIMEOUT); + private TestClientResources testResources; + + protected TestRedirects(final URIScheme scheme) { + this.testResources = new TestClientResources(scheme, TIMEOUT); + } + + public URIScheme scheme() { + return testResources.scheme(); + } public ClassicTestServer startServer(final HttpProcessor httpProcessor, final Decorator handlerDecorator) throws IOException { return testResources.startServer(null, httpProcessor, handlerDecorator); } - public CloseableHttpClient startClient(final Consumer clientCustomizer) { + public CloseableHttpClient startClient(final Consumer clientCustomizer) throws Exception { return testResources.startClient(clientCustomizer); } - public CloseableHttpClient startClient() { + public CloseableHttpClient startClient() throws Exception { return testResources.startClient(builder -> {}); } diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/extension/TestClientResources.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/extension/TestClientResources.java index 083a5f25d4..fd79bed3ed 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/extension/TestClientResources.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/extension/TestClientResources.java @@ -37,6 +37,7 @@ import org.apache.hc.client5.http.impl.classic.MinimalHttpClient; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.testing.SSLTestContexts; import org.apache.hc.core5.function.Decorator; import org.apache.hc.core5.http.HttpHost; @@ -98,6 +99,10 @@ public void afterEach(final ExtensionContext extensionContext) throws Exception } } + public URIScheme scheme() { + return this.scheme; + } + public ClassicTestServer startServer( final Http1Config http1Config, final HttpProcessor httpProcessor, @@ -114,11 +119,12 @@ public HttpHost targetHost() { public CloseableHttpClient startClient( final Consumer connManagerCustomizer, - final Consumer clientCustomizer) { + final Consumer clientCustomizer) throws Exception { Assertions.assertNull(connManager); Assertions.assertNull(client); final PoolingHttpClientConnectionManagerBuilder connManagerBuilder = PoolingHttpClientConnectionManagerBuilder.create(); + connManagerBuilder.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLTestContexts.createClientSSLContext())); connManagerBuilder.setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(timeout) .build()); @@ -136,11 +142,12 @@ public CloseableHttpClient startClient( return client; } - public MinimalHttpClient startMinimalClient() { + public MinimalHttpClient startMinimalClient() throws Exception { Assertions.assertNull(connManager); Assertions.assertNull(client); final PoolingHttpClientConnectionManagerBuilder connManagerBuilder = PoolingHttpClientConnectionManagerBuilder.create(); + connManagerBuilder.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLTestContexts.createClientSSLContext())); connManagerBuilder.setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(timeout) .build()); @@ -155,7 +162,7 @@ public MinimalHttpClient startMinimalClient() { } public CloseableHttpClient startClient( - final Consumer clientCustomizer) { + final Consumer clientCustomizer) throws Exception { return startClient(b -> {}, clientCustomizer); }