Skip to content

Commit 674cade

Browse files
Add support for custom CloseableHttpClient for Proxy Support (#441)
## Summary - Adding additional newDefaultInstance method to support custom CloseableHttpClient object - Allows for customs object to support Proxy Settings Customer support ## Test plan - FSC and TestCase added ## Issues - "OASIS-7899"
1 parent 6107eb9 commit 674cade

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

core-httpclient-impl/src/main/java/com/optimizely/ab/OptimizelyFactory.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.optimizely.ab.event.EventHandler;
2424
import com.optimizely.ab.internal.PropertyUtils;
2525
import com.optimizely.ab.notification.NotificationCenter;
26+
import org.apache.http.impl.client.CloseableHttpClient;
2627
import org.slf4j.Logger;
2728
import org.slf4j.LoggerFactory;
2829

@@ -247,11 +248,26 @@ public static Optimizely newDefaultInstance(String sdkKey, String fallback) {
247248
* @return A new Optimizely instance
248249
*/
249250
public static Optimizely newDefaultInstance(String sdkKey, String fallback, String datafileAccessToken) {
251+
return newDefaultInstance(sdkKey, fallback, datafileAccessToken, null);
252+
}
253+
254+
/**
255+
* Returns a new Optimizely instance with authenticated datafile support.
256+
*
257+
* @param sdkKey SDK key used to build the ProjectConfigManager.
258+
* @param fallback Fallback datafile string used by the ProjectConfigManager to be immediately available.
259+
* @param datafileAccessToken Token for authenticated datafile access.
260+
* @param customHttpClient Customizable CloseableHttpClient to build OptimizelyHttpClient.
261+
* @return A new Optimizely instance
262+
*/
263+
public static Optimizely newDefaultInstance(String sdkKey, String fallback, String datafileAccessToken, CloseableHttpClient customHttpClient) {
250264
NotificationCenter notificationCenter = new NotificationCenter();
251-
252-
HttpProjectConfigManager.Builder builder = HttpProjectConfigManager.builder()
265+
OptimizelyHttpClient optimizelyHttpClient = new OptimizelyHttpClient(customHttpClient);
266+
HttpProjectConfigManager.Builder builder;
267+
builder = HttpProjectConfigManager.builder()
253268
.withDatafile(fallback)
254269
.withNotificationCenter(notificationCenter)
270+
.withOptimizelyHttpClient(customHttpClient == null ? null : optimizelyHttpClient)
255271
.withSdkKey(sdkKey);
256272

257273
if (datafileAccessToken != null) {

core-httpclient-impl/src/test/java/com/optimizely/ab/OptimizelyFactoryTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
import com.optimizely.ab.event.BatchEventProcessor;
2424
import com.optimizely.ab.internal.PropertyUtils;
2525
import com.optimizely.ab.notification.NotificationCenter;
26+
import org.apache.http.HttpHost;
27+
import org.apache.http.conn.routing.HttpRoutePlanner;
28+
import org.apache.http.impl.client.CloseableHttpClient;
29+
import org.apache.http.impl.client.HttpClientBuilder;
30+
import org.apache.http.impl.client.HttpClients;
31+
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
2632
import org.junit.After;
2733
import org.junit.Before;
2834
import org.junit.Test;
@@ -237,6 +243,24 @@ public void newDefaultInstanceWithDatafileAccessToken() throws Exception {
237243
assertTrue(optimizely.isValid());
238244
}
239245

246+
@Test
247+
public void newDefaultInstanceWithDatafileAccessTokenAndCustomHttpClient() throws Exception {
248+
// Add custom Proxy and Port here
249+
int port = 443;
250+
String proxyHostName = "someProxy.com";
251+
HttpHost proxyHost = new HttpHost(proxyHostName, port);
252+
253+
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost);
254+
255+
HttpClientBuilder clientBuilder = HttpClients.custom();
256+
clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
257+
258+
CloseableHttpClient httpClient = clientBuilder.build();
259+
String datafileString = Resources.toString(Resources.getResource("valid-project-config-v4.json"), Charsets.UTF_8);
260+
optimizely = OptimizelyFactory.newDefaultInstance("sdk-key", datafileString, "auth-token", httpClient);
261+
assertTrue(optimizely.isValid());
262+
}
263+
240264
@Test
241265
public void newDefaultInstanceWithProjectConfig() throws Exception {
242266
optimizely = OptimizelyFactory.newDefaultInstance(() -> null);

0 commit comments

Comments
 (0)