Skip to content

Commit feadd1a

Browse files
authored
Merge pull request #485 from splitio/custom-auth-sse
Custom auth sse
2 parents dd5004b + 6baef40 commit feadd1a

File tree

4 files changed

+37
-40
lines changed

4 files changed

+37
-40
lines changed

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
255255
// SyncManager
256256
SplitTasks splitTasks = SplitTasks.build(_splitSynchronizationTask, _segmentSynchronizationTaskImp,
257257
_impressionsManager, _eventsTask, _telemetrySyncTask, _uniqueKeysTracker);
258-
SplitAPI splitAPI = SplitAPI.build(_httpclient, buildSSEdHttpClient(apiToken, config, _sdkMetadata));
258+
SplitAPI splitAPI = SplitAPI.build(_splitHttpClient, buildSSEdHttpClient(apiToken, config, _sdkMetadata));
259259

260260
_syncManager = SyncManagerImp.build(splitTasks, _splitFetcher, splitCache, splitAPI,
261261
segmentCache, _gates, _telemetryStorageProducer, _telemetrySynchronizer, config, splitParser, flagSetsFilter);

client/src/main/java/io/split/engine/common/SplitAPI.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
package io.split.engine.common;
22

3+
import io.split.client.dtos.Split;
4+
import io.split.service.SplitHttpClient;
35
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
46
import org.slf4j.Logger;
57
import org.slf4j.LoggerFactory;
68

79
public class SplitAPI {
810

9-
private final CloseableHttpClient _httpClient;
11+
private final SplitHttpClient _httpClient;
1012
private final CloseableHttpClient _sseHttpClient;
1113
private static final Logger _log = LoggerFactory.getLogger(SplitAPI.class);
1214

13-
private SplitAPI(CloseableHttpClient httpClient, CloseableHttpClient sseHttpClient) {
15+
private SplitAPI(SplitHttpClient httpClient, CloseableHttpClient sseHttpClient) {
1416
_httpClient = httpClient;
1517
_sseHttpClient = sseHttpClient;
1618
}
1719

18-
public static SplitAPI build(CloseableHttpClient httpClient, CloseableHttpClient sseHttpClient){
20+
public static SplitAPI build(SplitHttpClient httpClient, CloseableHttpClient sseHttpClient){
1921
return new SplitAPI(httpClient,sseHttpClient);
2022
}
2123

22-
public CloseableHttpClient getHttpClient() {
24+
public SplitHttpClient getHttpClient() {
2325
return _httpClient;
2426
}
2527

@@ -28,11 +30,6 @@ public CloseableHttpClient getSseHttpClient() {
2830
}
2931

3032
public void close(){
31-
try {
32-
_httpClient.close();
33-
} catch (Exception e){
34-
_log.error("Error trying to close httpcClient", e);
35-
}
3633
try {
3734
_sseHttpClient.close();
3835
} catch (Exception e){

client/src/main/java/io/split/engine/sse/AuthApiClientImp.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
11
package io.split.engine.sse;
22

33
import com.google.gson.JsonObject;
4+
import io.split.client.dtos.SplitHttpResponse;
45
import io.split.client.utils.Json;
6+
import io.split.engine.common.FetchOptions;
57
import io.split.engine.sse.dtos.AuthenticationResponse;
68
import io.split.engine.sse.dtos.RawAuthResponse;
9+
import io.split.service.SplitHttpClient;
710
import io.split.telemetry.domain.enums.HTTPLatenciesEnum;
811
import io.split.telemetry.domain.enums.LastSynchronizationRecordsEnum;
912
import io.split.telemetry.storage.TelemetryRuntimeProducer;
10-
import org.apache.hc.client5.http.classic.methods.HttpGet;
11-
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
12-
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
1313
import org.apache.hc.core5.http.HttpStatus;
14-
import org.apache.hc.core5.http.io.entity.EntityUtils;
1514
import org.apache.hc.core5.net.URIBuilder;
1615
import org.slf4j.Logger;
1716
import org.slf4j.LoggerFactory;
1817

1918
import java.net.URI;
20-
import java.nio.charset.StandardCharsets;
2119

2220
import static com.google.common.base.Preconditions.checkNotNull;
2321

2422
public class AuthApiClientImp implements AuthApiClient {
2523
private static final Logger _log = LoggerFactory.getLogger(AuthApiClientImp.class);
2624

27-
private final CloseableHttpClient _httpClient;
25+
private final SplitHttpClient _httpClient;
2826
private final String _target;
2927
private final TelemetryRuntimeProducer _telemetryRuntimeProducer;
3028

31-
public AuthApiClientImp(String url, CloseableHttpClient httpClient, TelemetryRuntimeProducer telemetryRuntimeProducer) {
29+
public AuthApiClientImp(String url, SplitHttpClient httpClient, TelemetryRuntimeProducer telemetryRuntimeProducer) {
3230
_httpClient = checkNotNull(httpClient);
3331
_target = checkNotNull(url);
3432
_telemetryRuntimeProducer = checkNotNull(telemetryRuntimeProducer);
@@ -39,23 +37,16 @@ public AuthenticationResponse Authenticate() {
3937
try {
4038
long initTime = System.currentTimeMillis();
4139
URI uri = new URIBuilder(_target).build();
42-
HttpGet request = new HttpGet(uri);
43-
44-
CloseableHttpResponse response = _httpClient.execute(request);
45-
Integer statusCode = response.getCode();
46-
47-
if (_log.isDebugEnabled()) {
48-
_log.debug(String.format("[%s] %s. Status code: %s", request.getMethod(), uri.toURL(), statusCode));
49-
}
40+
SplitHttpResponse response = _httpClient.get(uri, new FetchOptions.Builder().cacheControlHeaders(false).build());
41+
Integer statusCode = response.statusCode;
5042

5143
if (statusCode == HttpStatus.SC_OK) {
5244
_log.debug(String.format("Success connection to: %s", _target));
5345

54-
String jsonContent = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
5546
_telemetryRuntimeProducer.recordTokenRefreshes();
5647
_telemetryRuntimeProducer.recordSuccessfulSync(LastSynchronizationRecordsEnum.TOKEN, System.currentTimeMillis());
5748
_telemetryRuntimeProducer.recordSyncLatency(HTTPLatenciesEnum.TOKEN, System.currentTimeMillis()-initTime);
58-
return getSuccessResponse(jsonContent);
49+
return getSuccessResponse(response.body);
5950
}
6051

6152
_log.error(String.format("Problem to connect to : %s. Response status: %s", _target, statusCode));

client/src/test/java/io/split/engine/sse/AuthApiClientTest.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package io.split.engine.sse;
22

33
import io.split.TestHelper;
4+
import io.split.client.RequestDecorator;
45
import io.split.engine.sse.dtos.AuthenticationResponse;
6+
import io.split.service.SplitHttpClient;
7+
import io.split.service.SplitHttpClientImpl;
58
import io.split.telemetry.storage.InMemoryTelemetryStorage;
69
import io.split.telemetry.storage.TelemetryStorage;
710
import org.apache.commons.lang3.StringUtils;
@@ -14,6 +17,7 @@
1417

1518
import java.io.IOException;
1619
import java.lang.reflect.InvocationTargetException;
20+
import java.net.URISyntaxException;
1721

1822
public class AuthApiClientTest {
1923
private static TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
@@ -23,10 +27,10 @@ public void setUp() {
2327
TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
2428
}
2529
@Test
26-
public void authenticateWithPushEnabledShouldReturnSuccess() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
30+
public void authenticateWithPushEnabledShouldReturnSuccess() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
2731
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("streaming-auth-push-enabled.json", HttpStatus.SC_OK);
28-
29-
AuthApiClient authApiClient = new AuthApiClientImp( "www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
32+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
33+
AuthApiClient authApiClient = new AuthApiClientImp( "www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
3034
AuthenticationResponse result = authApiClient.Authenticate();
3135

3236
Assert.assertTrue(result.isPushEnabled());
@@ -41,10 +45,11 @@ public void authenticateWithPushEnabledShouldReturnSuccess() throws IOException,
4145
}
4246

4347
@Test
44-
public void authenticateWithPushEnabledWithWrongTokenShouldReturnError() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
48+
public void authenticateWithPushEnabledWithWrongTokenShouldReturnError() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
4549
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("streaming-auth-push-enabled-wrong-token.json", HttpStatus.SC_OK);
50+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
4651

47-
AuthApiClient authApiClient = new AuthApiClientImp( "www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
52+
AuthApiClient authApiClient = new AuthApiClientImp( "www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
4853
AuthenticationResponse result = authApiClient.Authenticate();
4954

5055
Assert.assertFalse(result.isPushEnabled());
@@ -55,10 +60,11 @@ public void authenticateWithPushEnabledWithWrongTokenShouldReturnError() throws
5560
}
5661

5762
@Test
58-
public void authenticateWithPushDisabledShouldReturnSuccess() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
63+
public void authenticateWithPushDisabledShouldReturnSuccess() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
5964
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("streaming-auth-push-disabled.json", HttpStatus.SC_OK);
65+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
6066

61-
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
67+
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
6268
AuthenticationResponse result = authApiClient.Authenticate();
6369

6470
Assert.assertFalse(result.isPushEnabled());
@@ -68,10 +74,11 @@ public void authenticateWithPushDisabledShouldReturnSuccess() throws IOException
6874
}
6975

7076
@Test
71-
public void authenticateServerErrorShouldReturnErrorWithRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
77+
public void authenticateServerErrorShouldReturnErrorWithRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
7278
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("", HttpStatus.SC_INTERNAL_SERVER_ERROR);
79+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
7380

74-
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
81+
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
7582
AuthenticationResponse result = authApiClient.Authenticate();
7683

7784
Assert.assertFalse(result.isPushEnabled());
@@ -81,10 +88,11 @@ public void authenticateServerErrorShouldReturnErrorWithRetry() throws IOExcepti
8188
}
8289

8390
@Test
84-
public void authenticateServerBadRequestShouldReturnErrorWithoutRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
91+
public void authenticateServerBadRequestShouldReturnErrorWithoutRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
8592
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("", HttpStatus.SC_BAD_REQUEST);
93+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
8694

87-
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
95+
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
8896
AuthenticationResponse result = authApiClient.Authenticate();
8997

9098
Assert.assertFalse(result.isPushEnabled());
@@ -94,10 +102,11 @@ public void authenticateServerBadRequestShouldReturnErrorWithoutRetry() throws I
94102
}
95103

96104
@Test
97-
public void authenticateServerUnauthorizedShouldReturnErrorWithoutRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
105+
public void authenticateServerUnauthorizedShouldReturnErrorWithoutRetry() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, URISyntaxException {
98106
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("", HttpStatus.SC_UNAUTHORIZED);
107+
SplitHttpClient splitHttpClient = SplitHttpClientImpl.create(httpClientMock, new RequestDecorator(null));
99108

100-
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", httpClientMock, TELEMETRY_STORAGE);
109+
AuthApiClient authApiClient = new AuthApiClientImp("www.split-test.io", splitHttpClient, TELEMETRY_STORAGE);
101110
AuthenticationResponse result = authApiClient.Authenticate();
102111

103112
Assert.assertFalse(result.isPushEnabled());

0 commit comments

Comments
 (0)