diff --git a/analytics-sample/src/main/java/sample/Main.java b/analytics-sample/src/main/java/sample/Main.java
index cfad1468..70800d6b 100644
--- a/analytics-sample/src/main/java/sample/Main.java
+++ b/analytics-sample/src/main/java/sample/Main.java
@@ -56,6 +56,7 @@ private static Client createClient() {
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(new GzipRequestInterceptor())
+ .addInterceptor(new RewriteUrlInterceptor())
.build());
}
}
diff --git a/analytics-sample/src/main/java/sample/RewriteUrlInterceptor.java b/analytics-sample/src/main/java/sample/RewriteUrlInterceptor.java
new file mode 100644
index 00000000..24d46500
--- /dev/null
+++ b/analytics-sample/src/main/java/sample/RewriteUrlInterceptor.java
@@ -0,0 +1,14 @@
+package sample;
+
+import java.io.IOException;
+import okhttp3.*;
+
+/** This interceptor overrides the HTTP client URL */
+final class RewriteUrlInterceptor implements Interceptor {
+ @Override
+ public Response intercept(Interceptor.Chain chain) throws IOException {
+ Request originalRequest = chain.request();
+ Request modifiedUrlRequest = originalRequest.newBuilder().url("proxy-url").build();
+ return chain.proceed(modifiedUrlRequest);
+ }
+}
diff --git a/analytics/pom.xml b/analytics/pom.xml
index 7a67a3aa..f5f120e0 100644
--- a/analytics/pom.xml
+++ b/analytics/pom.xml
@@ -47,6 +47,11 @@
burst
test
+
+ com.squareup.okhttp3
+ mockwebserver
+ test
+
org.assertj
assertj-core
diff --git a/analytics/src/test/java/com/segment/analytics/AnalyticsTest.java b/analytics/src/test/java/com/segment/analytics/AnalyticsTest.java
index e0dbfdbf..8ac276e7 100644
--- a/analytics/src/test/java/com/segment/analytics/AnalyticsTest.java
+++ b/analytics/src/test/java/com/segment/analytics/AnalyticsTest.java
@@ -1,18 +1,31 @@
package com.segment.analytics;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
+import com.jakewharton.retrofit.Ok3Client;
import com.segment.analytics.TestUtils.MessageBuilderTest;
import com.segment.analytics.internal.AnalyticsClient;
import com.segment.analytics.messages.Message;
import com.segment.analytics.messages.MessageBuilder;
+import com.segment.analytics.messages.TrackMessage;
import com.squareup.burst.BurstJUnit4;
+import java.io.IOException;
import java.util.Collections;
+import java.util.concurrent.TimeUnit;
+import okhttp3.Interceptor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -88,4 +101,41 @@ public void flushIsDispatched() {
verify(client).flush();
}
+
+ @Rule public MockWebServer server = new MockWebServer();
+
+ @Test
+ public void testClient() throws InterruptedException {
+ server.enqueue(new MockResponse().setBody("hello, world!"));
+
+ Analytics analytics =
+ new Analytics.Builder("writeKey")
+ .client(
+ new Ok3Client(
+ new OkHttpClient.Builder()
+ .connectTimeout(15, TimeUnit.SECONDS)
+ .readTimeout(15, TimeUnit.SECONDS)
+ .writeTimeout(15, TimeUnit.SECONDS)
+ .addInterceptor(
+ new Interceptor() {
+ @Override
+ public Response intercept(Chain chain) throws IOException {
+ Request newRequest =
+ chain
+ .request()
+ .newBuilder()
+ .url(server.url("/v2/import"))
+ .build();
+ return chain.proceed(newRequest);
+ }
+ })
+ .build()))
+ .build();
+
+ analytics.enqueue(TrackMessage.builder("test").userId("prateek"));
+ analytics.flush();
+
+ RecordedRequest request1 = server.takeRequest();
+ assertThat(request1.getPath()).isEqualTo("/v2/import");
+ }
}
diff --git a/pom.xml b/pom.xml
index 74d54b11..1846274f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,11 @@
okhttp
${okhttp.version}
+
+ com.squareup.okhttp3
+ mockwebserver
+ ${okhttp.version}
+
com.jakewharton.retrofit
retrofit1-okhttp3-client