Skip to content

Commit

Permalink
Added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Bilal Al committed Aug 29, 2024
1 parent acee253 commit 87f5586
Show file tree
Hide file tree
Showing 11 changed files with 195 additions and 129 deletions.
3 changes: 1 addition & 2 deletions client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>io.split.client</groupId>
<artifactId>java-client-parent</artifactId>
<version>4.13.0-rc2</version>
<version>4.13.0</version>
</parent>
<artifactId>java-client</artifactId>
<packaging>jar</packaging>
Expand Down Expand Up @@ -188,7 +188,6 @@
<version>4.12.0</version>
</dependency>


<!-- Test deps -->
<dependency>
<groupId>org.apache.commons</groupId>
Expand Down
11 changes: 10 additions & 1 deletion client/src/main/java/io/split/client/SplitClientConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -1103,7 +1103,16 @@ public SplitClientConfig build() {
_storageMode = StorageMode.PLUGGABLE;
}

return new SplitClientConfig(
if (_authScheme == HttpAuthScheme.KERBEROS) {
if (proxy() == null) {
throw new IllegalStateException("Kerberos mode require Proxy parameters.");
}
if (_kerberosPrincipalName == null) {
throw new IllegalStateException("Kerberos mode require Kerberos Principal Name.");
}
}

return new SplitClientConfig(
_endpoint,
_eventsEndpoint,
_featuresRefreshRate,
Expand Down
6 changes: 5 additions & 1 deletion client/src/main/java/io/split/client/SplitFactoryImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import static io.split.client.utils.SplitExecutorFactory.buildExecutorService;

Expand Down Expand Up @@ -538,7 +539,9 @@ private static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClient
httpClientbuilder = setupProxy(httpClientbuilder, config);
}

// setup Kerberos client
if (config.authScheme() == HttpAuthScheme.KERBEROS) {
_log.info("Using Kerberos-Proxy Authentication Scheme.");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.proxy().getHostName(), config.proxy().getPort()));
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.HEADERS);
Expand All @@ -552,7 +555,8 @@ private static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClient
Authenticator proxyAuthenticator = new HTTPKerberosAuthInterceptor(config.kerberosPrincipalName(), kerberosOptions);
OkHttpClient client = new Builder()
.proxy(proxy)
// .readTimeoutMillis(config.readTimeout())
.readTimeout(config.readTimeout(), TimeUnit.MILLISECONDS)
.connectTimeout(config.connectionTimeout(), TimeUnit.MILLISECONDS)
.addInterceptor(logging)
.proxyAuthenticator(proxyAuthenticator)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public SplitHttpResponse get(URI uri, FetchOptions options, Map<String, List<Str
public SplitHttpResponse post(URI url, HttpEntity entity,
Map<String, List<String>> additionalHeaders) {
try {
Builder requestBuilder = new Builder();
Builder requestBuilder = getRequestBuilder();
requestBuilder.url(url.toString());
setBasicHeaders(requestBuilder);
setAdditionalAndDecoratedHeaders(requestBuilder, additionalHeaders);
Expand All @@ -113,7 +113,7 @@ public SplitHttpResponse post(URI url, HttpEntity entity,
RequestBody postBody = RequestBody.create(post.getBytes());
requestBuilder.post(postBody);

Request request = requestBuilder.build();
Request request = getRequest(requestBuilder);
_log.debug(String.format("Request Headers: %s", request.headers()));

Response response = _client.newCall(request).execute();
Expand All @@ -140,7 +140,14 @@ public SplitHttpResponse post(URI url, HttpEntity entity,
}
}

private void setBasicHeaders(Builder requestBuilder) {
protected Builder getRequestBuilder() {
return new Builder();
}

protected Request getRequest(Builder requestBuilder) {
return requestBuilder.build();
}
protected void setBasicHeaders(Builder requestBuilder) {
requestBuilder.addHeader(HEADER_API_KEY, "Bearer " + _apikey);
requestBuilder.addHeader(HEADER_CLIENT_VERSION, _metadata.getSdkVersion());
requestBuilder.addHeader(HEADER_CLIENT_MACHINE_IP, _metadata.getMachineIp());
Expand All @@ -150,7 +157,7 @@ private void setBasicHeaders(Builder requestBuilder) {
: _apikey);
}

private void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map<String, List<String>> additionalHeaders) {
protected void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map<String, List<String>> additionalHeaders) {
if (additionalHeaders != null) {
for (Map.Entry<String, List<String>> entry : additionalHeaders.entrySet()) {
for (String value : entry.getValue()) {
Expand All @@ -165,7 +172,7 @@ private void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map<String
}
}

private Header[] getResponseHeaders(Response response) {
protected Header[] getResponseHeaders(Response response) {
List<BasicHeader> responseHeaders = new ArrayList<>();
Map<String, List<String>> map = response.headers().toMultimap();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
Expand Down
20 changes: 20 additions & 0 deletions client/src/test/java/io/split/client/SplitClientConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,31 @@ public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
public void checkExpectedAuthScheme() {
SplitClientConfig cfg = SplitClientConfig.builder()
.authScheme(HttpAuthScheme.KERBEROS)
.kerberosPrincipalName("bilal@bilal")
.proxyHost("local")
.proxyPort(8080)
.build();
Assert.assertEquals(HttpAuthScheme.KERBEROS, cfg.authScheme());

cfg = SplitClientConfig.builder()
.build();
Assert.assertEquals(null, cfg.authScheme());
}

@Test(expected = IllegalStateException.class)
public void testAuthSchemeWithoutProxy() {
SplitClientConfig.builder()
.authScheme(HttpAuthScheme.KERBEROS)
.kerberosPrincipalName("bilal")
.build();
}

@Test(expected = IllegalStateException.class)
public void testAuthSchemeWithoutPrincipalName() {
SplitClientConfig.builder()
.authScheme(HttpAuthScheme.KERBEROS)
.proxyHost("local")
.proxyPort(8080)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -352,15 +352,20 @@ public void testLocalhosJsonInputStreamNullAndFileTypeNull() throws URISyntaxExc
}

@Test
public void testFactoryKerberosInstance() throws URISyntaxException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException {
public void testFactoryKerberosInstance() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
SplitFactoryImpl splitFactory = null;
SplitClientConfig splitClientConfig = SplitClientConfig.builder()
.setBlockUntilReadyTimeout(10000)
.authScheme(HttpAuthScheme.KERBEROS)
.kerberosPrincipalName("bilal@bilal")
.proxyPort(6060)
.proxyHost(ENDPOINT)
.build();
SplitFactoryImpl splitFactory = new SplitFactoryImpl("asdf", splitClientConfig);
try {
splitFactory = new SplitFactoryImpl("asdf", splitClientConfig);
} catch(Exception e) {

}

Method method = SplitFactoryImpl.class.getDeclaredMethod("buildSplitHttpClient", String.class,
SplitClientConfig.class, SDKMetadata.class, RequestDecorator.class);
Expand Down
Loading

0 comments on commit 87f5586

Please sign in to comment.