diff --git a/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/NetworkConnectionTest.java b/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/NetworkConnectionTest.java index 32b82ae7d..c21eb0d45 100644 --- a/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/NetworkConnectionTest.java +++ b/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/NetworkConnectionTest.java @@ -18,7 +18,15 @@ import androidx.annotation.NonNull; +import com.snowplowanalytics.snowplow.emitter.BufferOption; +import com.snowplowanalytics.snowplow.event.ScreenView; +import com.snowplowanalytics.snowplow.event.Structured; +import com.snowplowanalytics.snowplow.internal.emitter.Emitter; +import com.snowplowanalytics.snowplow.internal.tracker.Subject; +import com.snowplowanalytics.snowplow.internal.tracker.Tracker; +import com.snowplowanalytics.snowplow.network.HttpMethod; import com.snowplowanalytics.snowplow.network.OkHttpNetworkConnection; +import com.snowplowanalytics.snowplow.network.Protocol; import com.snowplowanalytics.snowplow.network.RequestResult; import com.snowplowanalytics.snowplow.internal.emitter.TLSVersion; import com.snowplowanalytics.snowplow.network.Request; @@ -217,6 +225,48 @@ public void testHttpEndpoint_GetHttpUrl() { assertTrue(connection.getUri().toString().startsWith("http://acme.test.url.com")); } + public void testCookieJar() throws InterruptedException { + + Emitter emitter = new Emitter(getContext(), "0674-82-26-43-253.ngrok.io", new Emitter.EmitterBuilder() + .option(BufferOption.Single) + .method(HttpMethod.GET) + .security(Protocol.HTTPS) + .tick(0) + .emptyLimit(0) + ); + + Tracker tracker = new Tracker(new Tracker.TrackerBuilder(emitter, "namespace", "myAppId", getContext()) + .base64(false) + .level(LogLevel.DEBUG) + ); + + tracker.track(new ScreenView("cookie_test_1")); + Thread.sleep(1000); + tracker.track(new Structured("cookie_test_2", "action_1")); + + + + int counter = 0; + while (!tracker.getEmitter().getEmitterStatus()) { + Thread.sleep(500); + counter++; + if (counter > 10) { + return; + } + } + counter = 0; + while (tracker.getEmitter().getEmitterStatus()) { + Thread.sleep(500); + counter++; + if (counter > 10) { + return; + } + } + Thread.sleep(500); + tracker.pauseEventTracking(); + + } + // Service methods diff --git a/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/network/OkHttpNetworkConnection.java b/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/network/OkHttpNetworkConnection.java index 7c21666b1..bcb7f2541 100644 --- a/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/network/OkHttpNetworkConnection.java +++ b/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/network/OkHttpNetworkConnection.java @@ -24,6 +24,9 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import okhttp3.Cookie; +import okhttp3.CookieJar; +import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.RequestBody; @@ -189,12 +192,46 @@ private OkHttpNetworkConnection(OkHttpNetworkConnectionBuilder builder) { .sslSocketFactory(tlsArguments.getSslSocketFactory(), tlsArguments.getTrustManager()) .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) + .cookieJar(new CookieJar()) .build(); } else { client = builder.client; } } + public static Cookie createNonPersistentCookie() { + return new Cookie.Builder() + .domain("0674-82-26-43-253.ngrok.io") + .path("/") + .name("cookie-name") + .value("cookie-value") +// .httpOnly() +// .secure() + .build(); + } + + private class CookieJar implements okhttp3.CookieJar { + private final HashMap> cookieStore = new HashMap<>(); + + @NonNull + @Override + public List loadForRequest(@NonNull HttpUrl httpUrl) { + Logger.d(TAG, "🍪 in loadForRequest"); + +// ArrayList fakeCookies = new ArrayList<>(); +// fakeCookies.add(createNonPersistentCookie()); + List cookies = cookieStore.get(httpUrl.host()); + Logger.d(TAG, "🍪 " + cookieStore); + return cookies != null ? cookies : new ArrayList<>(); + } + + @Override + public void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List cookies) { + Logger.d(TAG, "🍪 got cookies: " + cookies); + cookieStore.put(httpUrl.host(), cookies); + } + } + @Override @NonNull public HttpMethod getHttpMethod() {