Skip to content

Commit

Permalink
fix: java http client requester with HttpClient.Builder (#776)
Browse files Browse the repository at this point in the history
  • Loading branch information
aallam authored Mar 18, 2022
1 parent 0af7adf commit ca20347
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 8 deletions.
26 changes: 26 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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]+.*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand All @@ -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()))));
}
}

0 comments on commit ca20347

Please sign in to comment.