diff --git a/client/pom.xml b/client/pom.xml
index 8e457ffe..8afe0ad3 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -5,7 +5,7 @@
io.split.client
java-client-parent
- 4.13.0-rc2
+ 4.13.0
java-client
jar
@@ -188,7 +188,6 @@
4.12.0
-
org.apache.commons
diff --git a/client/src/main/java/io/split/client/SplitClientConfig.java b/client/src/main/java/io/split/client/SplitClientConfig.java
index 48723862..6cb9632a 100644
--- a/client/src/main/java/io/split/client/SplitClientConfig.java
+++ b/client/src/main/java/io/split/client/SplitClientConfig.java
@@ -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,
diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java
index 6b99f355..f0b0c575 100644
--- a/client/src/main/java/io/split/client/SplitFactoryImpl.java
+++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java
@@ -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;
@@ -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);
@@ -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();
diff --git a/client/src/main/java/io/split/service/SplitHttpClientKerberosImpl.java b/client/src/main/java/io/split/service/SplitHttpClientKerberosImpl.java
index 4f0a8be0..b335e233 100644
--- a/client/src/main/java/io/split/service/SplitHttpClientKerberosImpl.java
+++ b/client/src/main/java/io/split/service/SplitHttpClientKerberosImpl.java
@@ -103,7 +103,7 @@ public SplitHttpResponse get(URI uri, FetchOptions options, Map> additionalHeaders) {
try {
- Builder requestBuilder = new Builder();
+ Builder requestBuilder = getRequestBuilder();
requestBuilder.url(url.toString());
setBasicHeaders(requestBuilder);
setAdditionalAndDecoratedHeaders(requestBuilder, additionalHeaders);
@@ -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();
@@ -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());
@@ -150,7 +157,7 @@ private void setBasicHeaders(Builder requestBuilder) {
: _apikey);
}
- private void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map> additionalHeaders) {
+ protected void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map> additionalHeaders) {
if (additionalHeaders != null) {
for (Map.Entry> entry : additionalHeaders.entrySet()) {
for (String value : entry.getValue()) {
@@ -165,7 +172,7 @@ private void setAdditionalAndDecoratedHeaders(Builder requestBuilder, Map responseHeaders = new ArrayList<>();
Map> map = response.headers().toMultimap();
for (Map.Entry> entry : map.entrySet()) {
diff --git a/client/src/test/java/io/split/client/SplitClientConfigTest.java b/client/src/test/java/io/split/client/SplitClientConfigTest.java
index 86b18541..760479d8 100644
--- a/client/src/test/java/io/split/client/SplitClientConfigTest.java
+++ b/client/src/test/java/io/split/client/SplitClientConfigTest.java
@@ -260,6 +260,9 @@ public Map> 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());
@@ -267,4 +270,21 @@ public void checkExpectedAuthScheme() {
.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();
+ }
}
\ No newline at end of file
diff --git a/client/src/test/java/io/split/client/SplitFactoryImplTest.java b/client/src/test/java/io/split/client/SplitFactoryImplTest.java
index be1526a9..aec9e3b6 100644
--- a/client/src/test/java/io/split/client/SplitFactoryImplTest.java
+++ b/client/src/test/java/io/split/client/SplitFactoryImplTest.java
@@ -352,7 +352,8 @@ 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)
@@ -360,7 +361,11 @@ public void testFactoryKerberosInstance() throws URISyntaxException, NoSuchMetho
.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);
diff --git a/client/src/test/java/io/split/service/HttpSplitClientKerberosTest.java b/client/src/test/java/io/split/service/HttpSplitClientKerberosTest.java
index ac8c15f7..bf017996 100644
--- a/client/src/test/java/io/split/service/HttpSplitClientKerberosTest.java
+++ b/client/src/test/java/io/split/service/HttpSplitClientKerberosTest.java
@@ -3,6 +3,7 @@
import com.google.common.base.Charsets;
import com.google.common.io.Files;
+import io.split.client.CustomHeaderDecorator;
import io.split.client.RequestDecorator;
import io.split.client.dtos.*;
import io.split.client.impressions.Impression;
@@ -12,66 +13,90 @@
import io.split.engine.common.FetchOptions;
import okhttp3.OkHttpClient;
-import okhttp3.OkHttpClient.Builder;
+import okhttp3.OkHttpClient.*;
+import okhttp3.HttpUrl;
+import okhttp3.Headers;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
import org.apache.hc.core5.http.*;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.junit.Assert;
import org.junit.Test;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
-import java.net.*;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.HttpURLConnection;
+import java.net.Proxy;
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.verify;
public class HttpSplitClientKerberosTest {
@Test
- public void testGetWithSpecialCharacters() throws URISyntaxException, IOException {
- Map> responseHeaders = new HashMap>();
- responseHeaders.put((HttpHeaders.VIA), Arrays.asList("HTTP/1.1 s_proxy_rio1"));
- URI rootTarget = URI.create("https://api.split.io/splitChanges?since=1234567");
-
- HttpURLConnection mockHttpURLConnection = Mockito.mock(HttpURLConnection.class);
- when(mockHttpURLConnection.getHeaderFields()).thenReturn(responseHeaders);
+ public void testGetWithSpecialCharacters() throws IOException, InterruptedException {
+ MockWebServer server = new MockWebServer();
+ BufferedReader br = new BufferedReader(new FileReader("src/test/resources/split-change-special-characters.json"));
+ String body;
+ try {
+ StringBuilder sb = new StringBuilder();
+ String line = br.readLine();
+
+ while (line != null) {
+ sb.append(line);
+ sb.append(System.lineSeparator());
+ line = br.readLine();
+ }
+ body = sb.toString();
+ } finally {
+ br.close();
+ }
+ server.enqueue(new MockResponse().setBody(body).addHeader(HttpHeaders.VIA, "HTTP/1.1 s_proxy_rio1"));
+ server.start();
+ HttpUrl baseUrl = server.url("/v1/");
+ URI rootTarget = baseUrl.uri();
RequestDecorator decorator = new RequestDecorator(null);
+ OkHttpClient client = new Builder().build();
- Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
- ByteArrayInputStream stubInputStream = new ByteArrayInputStream(Files.asCharSource(
- new File("src/test/resources/split-change-special-characters.json"), Charsets.UTF_8).read().getBytes(Charsets.UTF_8));
- when(mockHttpURLConnection.getInputStream()).thenReturn(stubInputStream);
-
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
- .proxy(proxy)
- .build();
-
- SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
+ SplitHttpClientKerberosImpl splitHttpClientKerberosImpl = new SplitHttpClientKerberosImpl(client, decorator, "qwerty", metadata());
Map> additionalHeaders = Collections.singletonMap("AdditionalHeader",
Collections.singletonList("add"));
- try {
- SplitHttpResponse splitHttpResponse = splitHtpClientKerberos.get(rootTarget,
+ SplitHttpResponse splitHttpResponse = splitHttpClientKerberosImpl.get(rootTarget,
new FetchOptions.Builder().cacheControlHeaders(true).build(), additionalHeaders);
- } catch (Exception e) {
- }
-/*
- SplitChange change = Json.fromJson(splitHttpResponse.body(), SplitChange.class);
+
+ RecordedRequest request = server.takeRequest();
+ server.shutdown();
+ Headers requestHeaders = request.getHeaders();
+
+ assertThat(splitHttpResponse.statusCode(), is(equalTo(HttpURLConnection.HTTP_OK)));
+ Assert.assertEquals("/v1/", request.getPath());
+ assertThat(requestHeaders.get("Authorization"), is(equalTo("Bearer qwerty"))) ;
+ assertThat(requestHeaders.get("SplitSDKClientKey"), is(equalTo("erty")));
+ assertThat(requestHeaders.get("SplitSDKVersion"), is(equalTo("java-1.2.3")));
+ assertThat(requestHeaders.get("SplitSDKMachineIP"), is(equalTo("1.2.3.4")));
+ assertThat(requestHeaders.get("SplitSDKMachineName"), is(equalTo("someIP")));
+ assertThat(requestHeaders.get("AdditionalHeader"), is(equalTo("add")));
+
+ SplitChange change = Json.fromJson(splitHttpResponse.body(), SplitChange.class);
Header[] headers = splitHttpResponse.responseHeaders();
- assertThat(headers[0].getName(), is(equalTo("Via")));
- assertThat(headers[0].getValue(), is(equalTo("[HTTP/1.1 s_proxy_rio1]")));
+ assertThat(headers[1].getName(), is(equalTo("via")));
+ assertThat(headers[1].getValue(), is(equalTo("[HTTP/1.1 s_proxy_rio1]")));
+ assertThat(splitHttpResponse.statusCode(), is(equalTo(200)));
Assert.assertNotNull(change);
Assert.assertEquals(1, change.splits.size());
Assert.assertNotNull(change.splits.get(0));
@@ -82,30 +107,61 @@ public void testGetWithSpecialCharacters() throws URISyntaxException, IOExceptio
Assert.assertEquals("{\"test\": \"blue\",\"grüne Straße\": 13}", configs.get("on"));
Assert.assertEquals("{\"test\": \"blue\",\"size\": 15}", configs.get("off"));
Assert.assertEquals(2, split.sets.size());
-
- */
}
@Test
- public void testGetParameters() throws URISyntaxException, MalformedURLException {
- URI uri = new URI("https://api.split.io/splitChanges?since=1234567");
- FetchOptions options = new FetchOptions.Builder().cacheControlHeaders(true).build();
- SplitHttpClientKerberosImpl splitHtpClientKerberos = Mockito.mock(SplitHttpClientKerberosImpl.class);
- when(splitHtpClientKerberos.get(uri, options, null)).thenCallRealMethod();
+ public void testGetParameters() throws URISyntaxException, IOException, InterruptedException {
+ class MyCustomHeaders implements CustomHeaderDecorator {
+ public MyCustomHeaders() {}
+ @Override
+ public Map> getHeaderOverrides(RequestContext context) {
+ Map> additionalHeaders = context.headers();
+ additionalHeaders.put("first", Arrays.asList("1"));
+ additionalHeaders.put("second", Arrays.asList("2.1", "2.2"));
+ additionalHeaders.put("third", Arrays.asList("3"));
+ return additionalHeaders;
+ }
+ }
+ MockWebServer server = new MockWebServer();
+ BufferedReader br = new BufferedReader(new FileReader("src/test/resources/split-change-special-characters.json"));
+ String body;
try {
- SplitHttpResponse splitHttpResponse = splitHtpClientKerberos.get(uri, options, null);
- } catch (Exception e) {
+ StringBuilder sb = new StringBuilder();
+ String line = br.readLine();
+
+ while (line != null) {
+ sb.append(line);
+ sb.append(System.lineSeparator());
+ line = br.readLine();
+ }
+ body = sb.toString();
+ } finally {
+ br.close();
}
-// ArgumentCaptor optionsCaptor = ArgumentCaptor.forClass(FetchOptions.class);
-// ArgumentCaptor headersCaptor = ArgumentCaptor.forClass(HashMap.class);
-// verify(splitHtpClientKerberos).get(connectionCaptor.capture(), optionsCaptor.capture(), headersCaptor.capture());
+ server.enqueue(new MockResponse().setBody(body).addHeader(HttpHeaders.VIA, "HTTP/1.1 s_proxy_rio1"));
+ server.start();
+ HttpUrl baseUrl = server.url("/splitChanges?since=1234567");
+ URI rootTarget = baseUrl.uri();
+ RequestDecorator decorator = new RequestDecorator(new MyCustomHeaders());
+ OkHttpClient client = new Builder().build();
- // assertThat(connectionCaptor.getValue().getRequestMethod(), is(equalTo("GET")));
-// assertThat(connectionCaptor.getValue().getURL().toString(), is(equalTo(new URL("https://api.split.io/splitChanges?since=1234567").toString())));
+ SplitHttpClientKerberosImpl splitHttpClientKerberosImpl = new SplitHttpClientKerberosImpl(client, decorator, "qwerty", metadata());
- // assertThat(optionsCaptor.getValue().cacheControlHeadersEnabled(), is(equalTo(true)));
+ FetchOptions options = new FetchOptions.Builder().cacheControlHeaders(true).build();
+ SplitHttpResponse splitHttpResponse = splitHttpClientKerberosImpl.get(rootTarget, options, null);
+
+ RecordedRequest request = server.takeRequest();
+ server.shutdown();
+ Headers requestHeaders = request.getHeaders();
+
+ assertThat(requestHeaders.get("Cache-Control"), is(equalTo("no-cache")));
+ assertThat(requestHeaders.get("first"), is(equalTo("1")));
+ assertThat(requestHeaders.values("second"), is(equalTo(Arrays.asList("2.1","2.2"))));
+ assertThat(requestHeaders.get("third"), is(equalTo("3")));
+ Assert.assertEquals("/splitChanges?since=1234567", request.getPath());
+ assertThat(request.getMethod(), is(equalTo("GET")));
}
@Test
@@ -113,13 +169,8 @@ public void testGetError() throws URISyntaxException, IOException {
URI uri = new URI("https://api.split.io/splitChanges?since=1234567");
RequestDecorator decorator = new RequestDecorator(null);
-// Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_INTERNAL_ERROR);
- ByteArrayInputStream stubInputStream = new ByteArrayInputStream(Files.asCharSource(
- new File("src/test/resources/split-change-special-characters.json"), Charsets.UTF_8).read().getBytes(Charsets.UTF_8));
-// when(mockHttpURLConnection.getInputStream()).thenReturn(stubInputStream);
-
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
+ OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
try {
@@ -128,7 +179,6 @@ public void testGetError() throws URISyntaxException, IOException {
new FetchOptions.Builder().cacheControlHeaders(true).build(), null);
} catch (Exception e) {
}
- // Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, (long) splitHttpResponse.statusCode());
}
@Test(expected = IllegalStateException.class)
@@ -137,34 +187,33 @@ public void testException() throws URISyntaxException, InvocationTargetException
URI uri = new URI("https://api.split.io/splitChanges?since=1234567");
RequestDecorator decorator = null;
-// Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_INTERNAL_ERROR);
ByteArrayInputStream stubInputStream = new ByteArrayInputStream(Files.asCharSource(
new File("src/test/resources/split-change-special-characters.json"), Charsets.UTF_8).read().getBytes(Charsets.UTF_8));
-// when(mockHttpURLConnection.getInputStream()).thenReturn(stubInputStream);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
+ OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
SplitHttpResponse splitHttpResponse = splitHtpClientKerberos.get(uri,
new FetchOptions.Builder().cacheControlHeaders(true).build(), null);
-
}
@Test
- public void testPost() throws URISyntaxException, IOException, ParseException {
- URI uri = new URI("https://api.split.io/splitChanges?since=1234567");
+ public void testPost() throws URISyntaxException, IOException, ParseException, InterruptedException {
+ MockWebServer server = new MockWebServer();
+
+ server.enqueue(new MockResponse().addHeader(HttpHeaders.VIA, "HTTP/1.1 s_proxy_rio1"));
+ server.start();
+ HttpUrl baseUrl = server.url("/impressions");
+ URI rootTarget = baseUrl.uri();
RequestDecorator decorator = new RequestDecorator(null);
-// Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
+ OkHttpClient client = new Builder().build();
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
- .proxy(proxy)
- .build();
- SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
+ SplitHttpClientKerberosImpl splitHttpClientKerberosImpl = new SplitHttpClientKerberosImpl(client, decorator, "qwerty", metadata());
+ FetchOptions options = new FetchOptions.Builder().cacheControlHeaders(true).build();
// Send impressions
List toSend = Arrays.asList(new TestImpressions("t1", Arrays.asList(
KeyImpression.fromImpression(new Impression("k1", null, "t1", "on", 123L, "r1", 456L, null)),
@@ -177,52 +226,28 @@ public void testPost() throws URISyntaxException, IOException, ParseException {
Map> additionalHeaders = Collections.singletonMap("SplitSDKImpressionsMode",
Collections.singletonList("OPTIMIZED"));
-// when(mockHttpURLConnection.getHeaderFields()).thenReturn(additionalHeaders);
-
- ByteArrayOutputStream mockOs = Mockito.mock( ByteArrayOutputStream.class);
- // when(mockHttpURLConnection.getOutputStream()).thenReturn(mockOs);
-
- try {
- SplitHttpResponse splitHttpResponse = splitHtpClientKerberos.post(uri, Utils.toJsonEntity(toSend),
- additionalHeaders);
-
- // Capture outgoing request and validate it
- ArgumentCaptor captor = ArgumentCaptor.forClass(byte[].class);
- verify(mockOs).write(captor.capture());
- String postBody = EntityUtils.toString(Utils.toJsonEntity(toSend));
- // assertThat(captor.getValue(), is(equalTo(postBody.getBytes(StandardCharsets.UTF_8))));
-
- Header[] headers = splitHttpResponse.responseHeaders();
- // assertThat(headers[0].getName(), is(equalTo("SplitSDKImpressionsMode")));
- // assertThat(headers[0].getValue(), is(equalTo("[OPTIMIZED]")));
-
- // Assert.assertEquals(200, (long) splitHttpResponse.statusCode());
- } catch (Exception e) {
- }
- }
- @Test
- public void testPotParameters() throws URISyntaxException, IOException {
- URI uri = new URI("https://kubernetesturl.com/split/api/testImpressions/bulk");
-// when(splitHtpClientKerberos.post(uri, null, null)).thenCallRealMethod();
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
- .proxy(proxy)
- .build();
- RequestDecorator decorator = new RequestDecorator(null);
- SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
+ SplitHttpResponse splitHttpResponse = splitHttpClientKerberosImpl.post(rootTarget, Utils.toJsonEntity(toSend),
+ additionalHeaders);
- try {
- SplitHttpResponse splitHttpResponse = splitHtpClientKerberos.post(uri, null, null);
- } catch (Exception e) {
- }
+ RecordedRequest request = server.takeRequest();
+ server.shutdown();
+ Headers requestHeaders = request.getHeaders();
+ String postBody = EntityUtils.toString(Utils.toJsonEntity(toSend));
-// ArgumentCaptor connectionCaptor = ArgumentCaptor.forClass(HttpURLConnection.class);
-// ArgumentCaptor entityCaptor = ArgumentCaptor.forClass(HttpEntity.class);
-// ArgumentCaptor headersCaptor = ArgumentCaptor.forClass(HashMap.class);
-// verify(splitHtpClientKerberos).doPost(connectionCaptor.capture(), entityCaptor.capture(), headersCaptor.capture());
+ Assert.assertEquals("POST /impressions HTTP/1.1", request.getRequestLine());
+ Assert.assertEquals(postBody, request.getBody().readUtf8());
+ assertThat(requestHeaders.get("Authorization"), is(equalTo("Bearer qwerty"))) ;
+ assertThat(requestHeaders.get("SplitSDKClientKey"), is(equalTo("erty")));
+ assertThat(requestHeaders.get("SplitSDKVersion"), is(equalTo("java-1.2.3")));
+ assertThat(requestHeaders.get("SplitSDKMachineIP"), is(equalTo("1.2.3.4")));
+ assertThat(requestHeaders.get("SplitSDKMachineName"), is(equalTo("someIP")));
+ assertThat(requestHeaders.get("SplitSDKImpressionsMode"), is(equalTo("OPTIMIZED")));
- // assertThat(connectionCaptor.getValue().getURL().toString(), is(equalTo(new URL("https://kubernetesturl.com/split/api/testImpressions/bulk").toString())));
+ Header[] headers = splitHttpResponse.responseHeaders();
+ assertThat(headers[1].getName(), is(equalTo("via")));
+ assertThat(headers[1].getValue(), is(equalTo("[HTTP/1.1 s_proxy_rio1]")));
+ assertThat(splitHttpResponse.statusCode(), is(equalTo(200)));
}
@Test
@@ -230,11 +255,9 @@ public void testPosttError() throws URISyntaxException, IOException {
URI uri = new URI("https://kubernetesturl.com/split/api/testImpressions/bulk");
RequestDecorator decorator = new RequestDecorator(null);
ByteArrayOutputStream mockOs = Mockito.mock( ByteArrayOutputStream.class);
-// Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_INTERNAL_ERROR);
-// when(mockHttpURLConnection.getOutputStream()).thenReturn(mockOs);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
+ OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
@@ -251,11 +274,10 @@ public void testPosttError() throws URISyntaxException, IOException {
@Test(expected = IllegalStateException.class)
public void testPosttException() throws URISyntaxException, IOException {
RequestDecorator decorator = null;
-// Mockito.when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
URI uri = new URI("https://kubernetesturl.com/split/api/testImpressions/bulk");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.0.0.127", 8080));
- OkHttpClient client = new Builder()
+ OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
SplitHttpClientKerberosImpl splitHtpClientKerberos = SplitHttpClientKerberosImpl.create(client, decorator, "qwerty", metadata());
diff --git a/pluggable-storage/pom.xml b/pluggable-storage/pom.xml
index e4ffe0e2..2e502e35 100644
--- a/pluggable-storage/pom.xml
+++ b/pluggable-storage/pom.xml
@@ -6,7 +6,7 @@
java-client-parent
io.split.client
- 4.13.0-rc2
+ 4.13.0
2.1.0
diff --git a/pom.xml b/pom.xml
index 159f6135..e99da05f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
io.split.client
java-client-parent
- 4.13.0-rc2
+ 4.13.0
diff --git a/redis-wrapper/pom.xml b/redis-wrapper/pom.xml
index c4947261..6a25062e 100644
--- a/redis-wrapper/pom.xml
+++ b/redis-wrapper/pom.xml
@@ -6,7 +6,7 @@
java-client-parent
io.split.client
- 4.13.0-rc2
+ 4.13.0
redis-wrapper
3.1.0
diff --git a/testing/pom.xml b/testing/pom.xml
index 70b12624..adbffc99 100644
--- a/testing/pom.xml
+++ b/testing/pom.xml
@@ -5,7 +5,7 @@
io.split.client
java-client-parent
- 4.13.0-rc2
+ 4.13.0
java-client-testing
jar