From ca20347b8d1b3b3c3e7a1587e1f026ecc1433107 Mon Sep 17 00:00:00 2001 From: Mouaad Aallam Date: Fri, 18 Mar 2022 09:38:44 +0100 Subject: [PATCH] fix: java http client requester with `HttpClient.Builder` (#776) --- .circleci/config.yml | 26 ++++++++++++++++ .../algolia/search/JavaNetHttpRequester.java | 17 +++++++++-- .../java/com/algolia/search/SSLUtils.java | 30 +++++++++++++++++++ .../search/analytics/AnalyticsTest.java | 7 ++++- .../algolia/search/insights/InsightsTest.java | 12 ++++---- 5 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 algoliasearch-java-net/src/test/java/com/algolia/search/SSLUtils.java diff --git a/.circleci/config.yml b/.circleci/config.yml index 129b70582..747b5b46a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,6 +61,25 @@ jobs: paths: - "~/.m2" + test-java-17: + docker: + - image: cimg/openjdk:17.0 + steps: + - checkout + - restore_cache: + key: mvn-cache-11 + - credentials + - run: + name: "Compile project" + command: mvn clean compile + - run: + name: "Run the tests" + command: mvn clean test + - save_cache: + key: mvn-cache-11 + paths: + - "~/.m2" + release: docker: - image: cimg/openjdk:11.0 @@ -104,11 +123,18 @@ workflows: filters: tags: only: /.*/ + - test-java-17: + requires: + - test-java-11 + filters: + tags: + only: /.*/ - release: requires: - format - test-java-8 - test-java-11 + - test-java-17 filters: tags: only: /^[1-9]+.[0-9]+.[0-9]+.*/ diff --git a/algoliasearch-java-net/src/main/java/com/algolia/search/JavaNetHttpRequester.java b/algoliasearch-java-net/src/main/java/com/algolia/search/JavaNetHttpRequester.java index d2e826c31..529799d24 100644 --- a/algoliasearch-java-net/src/main/java/com/algolia/search/JavaNetHttpRequester.java +++ b/algoliasearch-java-net/src/main/java/com/algolia/search/JavaNetHttpRequester.java @@ -36,12 +36,25 @@ public final class JavaNetHttpRequester implements HttpRequester { * @param config HTTPClient agnostic Algolia's configuration. */ public JavaNetHttpRequester(@Nonnull ConfigBase config) { + this( + config, + config.getUseSystemProxy() + ? HttpClient.newBuilder().proxy(ProxySelector.getDefault()) + : HttpClient.newBuilder()); + } + + /** + * Build the reusable instance of httpClient with the given configuration. + * + * @param config HTTPClient agnostic Algolia's configuration + * @param builder Builder for {@linkplain HttpClient HTTP Clients} + */ + public JavaNetHttpRequester(@Nonnull ConfigBase config, HttpClient.Builder builder) { client = - HttpClient.newBuilder() + builder .executor(config.getExecutor()) .version(HttpClient.Version.HTTP_2) .followRedirects(HttpClient.Redirect.NEVER) - .proxy(ProxySelector.getDefault()) .connectTimeout(Duration.ofMillis(config.getConnectTimeOut())) .build(); } diff --git a/algoliasearch-java-net/src/test/java/com/algolia/search/SSLUtils.java b/algoliasearch-java-net/src/test/java/com/algolia/search/SSLUtils.java new file mode 100644 index 000000000..1be3eddbe --- /dev/null +++ b/algoliasearch-java-net/src/test/java/com/algolia/search/SSLUtils.java @@ -0,0 +1,30 @@ +package com.algolia.search; + +import com.algolia.search.exceptions.AlgoliaRuntimeException; +import java.security.NoSuchAlgorithmException; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLParameters; + +public class SSLUtils { + + // Suppress default constructor for noninstantiability + private SSLUtils() { + throw new AssertionError(); + } + + /** Default SSL parameters without specifying protocols */ + public static SSLParameters getDefaultSSLParameters() { + SSLParameters sslParameters = getDefaultSSLContext().getSupportedSSLParameters(); + sslParameters.setProtocols(null); + return sslParameters; + } + + /** Get default SSL Context */ + private static SSLContext getDefaultSSLContext() { + try { + return SSLContext.getDefault(); + } catch (NoSuchAlgorithmException ex) { + throw new AlgoliaRuntimeException(ex); + } + } +} diff --git a/algoliasearch-java-net/src/test/java/com/algolia/search/analytics/AnalyticsTest.java b/algoliasearch-java-net/src/test/java/com/algolia/search/analytics/AnalyticsTest.java index 3fa6c33c7..3bc698edc 100644 --- a/algoliasearch-java-net/src/test/java/com/algolia/search/analytics/AnalyticsTest.java +++ b/algoliasearch-java-net/src/test/java/com/algolia/search/analytics/AnalyticsTest.java @@ -5,6 +5,7 @@ import com.algolia.search.*; import java.io.IOException; +import java.net.http.HttpClient; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,7 +15,11 @@ class AnalyticsTest extends com.algolia.search.integration.analytics.AnalyticsTe private static AnalyticsConfig analyticsConfig = new AnalyticsConfig.Builder(ALGOLIA_APPLICATION_ID_1, ALGOLIA_ADMIN_KEY_1).build(); private static AnalyticsClient analyticsClient = - new AnalyticsClient(analyticsConfig, new JavaNetHttpRequester(analyticsConfig)); + new AnalyticsClient( + analyticsConfig, + new JavaNetHttpRequester( + analyticsConfig, + HttpClient.newBuilder().sslParameters(SSLUtils.getDefaultSSLParameters()))); AnalyticsTest() { super(IntegrationTestExtension.searchClient, analyticsClient); diff --git a/algoliasearch-java-net/src/test/java/com/algolia/search/insights/InsightsTest.java b/algoliasearch-java-net/src/test/java/com/algolia/search/insights/InsightsTest.java index e65eb7507..c64d0c906 100644 --- a/algoliasearch-java-net/src/test/java/com/algolia/search/insights/InsightsTest.java +++ b/algoliasearch-java-net/src/test/java/com/algolia/search/insights/InsightsTest.java @@ -3,10 +3,8 @@ import static com.algolia.search.integration.TestHelpers.ALGOLIA_ADMIN_KEY_1; import static com.algolia.search.integration.TestHelpers.ALGOLIA_APPLICATION_ID_1; -import com.algolia.search.InsightsClient; -import com.algolia.search.InsightsConfig; -import com.algolia.search.IntegrationTestExtension; -import com.algolia.search.JavaNetHttpRequester; +import com.algolia.search.*; +import java.net.http.HttpClient; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith({IntegrationTestExtension.class}) @@ -18,6 +16,10 @@ class InsightsTest extends com.algolia.search.integration.insights.InsightsTest InsightsTest() { super( IntegrationTestExtension.searchClient, - new InsightsClient(config, new JavaNetHttpRequester(config))); + new InsightsClient( + config, + new JavaNetHttpRequester( + config, + HttpClient.newBuilder().sslParameters(SSLUtils.getDefaultSSLParameters())))); } }