Skip to content

Commit

Permalink
Merge branch 'release/3.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
matus-tomlein committed Jun 28, 2022
2 parents 3a93694 + 189b038 commit 627db67
Show file tree
Hide file tree
Showing 37 changed files with 954 additions and 133 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
Version 3.2.0 (2022-06-28)
--------------------------
Add eventIndex and firstEventTimestamp properties to client sessions (#517)
Add a customizable set of failure HTTP status codes for which collector requests should not be retried (#518)
Add support for storing cookies in NetworkConnection (#519)
Update Android target SDK version to 31 (#526)
Bump okhttp3 to 4.10.0, play-services-analytics to 18.0.1, and gson to 2.9.0 (#520)

Version 3.1.2 (2022-05-25)
--------------------------
Set log level without trackerDiagnostic (#441)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.1.2
3.2.0
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ buildscript {

subprojects {
group = 'com.snowplowanalytics'
version = '3.1.2'
version = '3.2.0'
repositories {
google()
maven {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000
SONATYPE_STAGING_PROFILE=comsnowplowanalytics
GROUP=com.snowplowanalytics
POM_ARTIFACT_ID=snowplow-android-tracker
VERSION_NAME=3.1.2
VERSION_NAME=3.2.0

POM_NAME=snowplow-android-tracker
POM_PACKAGING=aar
Expand Down
12 changes: 6 additions & 6 deletions snowplow-demo-app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ project.ext {
}

android {
compileSdkVersion 30
compileSdkVersion 31
buildToolsVersion '28.0.3'

defaultConfig {
applicationId "com.snowplowanalytics.snowplowtrackerdemo"
minSdkVersion 21
targetSdkVersion 30
targetSdkVersion 31
versionCode 3
versionName "0.3.0"
}
Expand Down Expand Up @@ -46,8 +46,8 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-extensions:$project.archLifecycleVersion"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':snowplow-android-tracker')
implementation 'androidx.browser:browser:1.3.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'androidx.browser:browser:1.4.0'
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.google.code.gson:gson:2.9.0'
}
3 changes: 2 additions & 1 deletion snowplow-demo-app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
android:screenOrientation="portrait"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,15 @@
import com.snowplowanalytics.snowplow.controller.EmitterController;
import com.snowplowanalytics.snowplow.controller.SessionController;
import com.snowplowanalytics.snowplow.controller.TrackerController;
import com.snowplowanalytics.snowplow.emitter.BufferOption;
import com.snowplowanalytics.snowplow.globalcontexts.GlobalContext;
import com.snowplowanalytics.snowplow.tracker.DevicePlatform;
import com.snowplowanalytics.snowplow.tracker.LoggerDelegate;
import com.snowplowanalytics.snowplow.internal.constants.Parameters;
import com.snowplowanalytics.snowplow.internal.constants.TrackerConstants;
import com.snowplowanalytics.snowplow.network.HttpMethod;
import com.snowplowanalytics.snowplow.network.RequestCallback;
import com.snowplowanalytics.snowplow.payload.SelfDescribingJson;
import com.snowplowanalytics.snowplow.tracker.LogLevel;
import com.snowplowanalytics.snowplow.internal.utils.Util;
import com.snowplowanalytics.snowplow.tracker.SessionState;
import com.snowplowanalytics.snowplow.util.Basis;
import com.snowplowanalytics.snowplow.util.TimeMeasure;
import com.snowplowanalytics.snowplowtrackerdemo.utils.DemoUtils;
Expand Down Expand Up @@ -250,6 +248,7 @@ private boolean setupWithLocalConfig() {
NetworkConfiguration networkConfiguration = new NetworkConfiguration(uri, method);
EmitterConfiguration emitterConfiguration = new EmitterConfiguration()
.requestCallback(getRequestCallback())
.bufferOption(BufferOption.DefaultGroup)
.threadPoolSize(20)
.emitRange(500)
.byteLimitPost(52000);
Expand Down
14 changes: 7 additions & 7 deletions snowplow-tracker/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ project.ext {
}

android {
compileSdkVersion 30
buildToolsVersion "29.0.3"
compileSdkVersion 31
buildToolsVersion "30.0.2"

useLibrary 'android.test.base'

defaultConfig {
// With API 24: Remove `androidx.appcompat:appcompat` as it's needed for Consumer<T>.
minSdkVersion 21
targetSdkVersion 30
targetSdkVersion 31
versionCode 1
versionName "$project.version"

Expand Down Expand Up @@ -77,19 +77,19 @@ android {
}

dependencies {
implementation 'androidx.annotation:annotation:1.3.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.annotation:annotation:1.4.0'
implementation 'androidx.appcompat:appcompat:1.4.2'
compileOnly "androidx.lifecycle:lifecycle-extensions:$project.archLifecycleVersion"
compileOnly "com.android.installreferrer:installreferrer:2.2"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
// test
testImplementation "androidx.lifecycle:lifecycle-extensions:$project.archLifecycleVersion"
testImplementation "com.android.installreferrer:installreferrer:2.2"
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'com.google.android.gms:play-services-analytics:17.0.1'
androidTestImplementation 'com.google.android.gms:play-services-analytics:18.0.1'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.7.2'
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ public void testGetTimestamp() {
assertEquals(13, Util.getTimestamp().length());
}

public void testGetDateTimeFromTimestamp() {
long timestamp = 1653923456266L;
assertEquals("2022-05-30T15:10:56.266Z", Util.getDateTimeFromTimestamp(timestamp));
}

public void testBase64Encode() {
assertEquals("Zm9v", Util.base64Encode("foo"));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.snowplowanalytics.snowplow.tracker;

import static com.snowplowanalytics.snowplow.internal.constants.TrackerConstants.COOKIE_PERSISTANCE;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;

import android.content.Context;
import android.content.SharedPreferences;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;

import org.junit.Test;
import org.junit.runner.RunWith;

import com.snowplowanalytics.snowplow.network.CollectorCookieJar;

import java.util.ArrayList;
import java.util.List;

import okhttp3.Cookie;
import okhttp3.HttpUrl;

@RunWith(AndroidJUnit4.class)
public class CollectorCookieJarTest {
Cookie cookie1 = new Cookie.Builder()
.name("sp")
.value("xxx")
.domain("acme.test.url.com")
.build();

@Test
public void testNoCookiesAtStartup() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
CollectorCookieJar cookieJar = new CollectorCookieJar(context);

List<Cookie> cookies1 = cookieJar.loadForRequest(HttpUrl.parse("http://acme.test.url.com"));
assertTrue(cookies1.isEmpty());
}

@Test
public void testReturnsCookiesAfterSetInResponse() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
CollectorCookieJar cookieJar = new CollectorCookieJar(context);

ArrayList<Cookie> requestCookies = new ArrayList<Cookie>();
requestCookies.add(cookie1);
cookieJar.saveFromResponse(
HttpUrl.parse("http://acme.test.url.com"),
requestCookies
);

List<Cookie> cookies2 = cookieJar.loadForRequest(HttpUrl.parse("http://acme.test.url.com"));
assertFalse(cookies2.isEmpty());
assertEquals(cookies2.get(0).name(), "sp");

cookieJar.clear();
}

@Test
public void testDoesntReturnCookiesForDifferentDomain() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
CollectorCookieJar cookieJar = new CollectorCookieJar(context);

ArrayList<Cookie> requestCookies = new ArrayList<Cookie>();
requestCookies.add(cookie1);
cookieJar.saveFromResponse(
HttpUrl.parse("http://acme.test.url.com"),
requestCookies
);

List<Cookie> cookies2 = cookieJar.loadForRequest(HttpUrl.parse("http://other.test.url.com"));
assertTrue(cookies2.isEmpty());

cookieJar.clear();
}

@Test
public void testMaintainsCookiesAcrossJarInstances() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
CollectorCookieJar cookieJar1 = new CollectorCookieJar(context);

ArrayList<Cookie> requestCookies = new ArrayList<Cookie>();
requestCookies.add(cookie1);
cookieJar1.saveFromResponse(
HttpUrl.parse("http://acme.test.url.com"),
requestCookies
);

CollectorCookieJar cookieJar2 = new CollectorCookieJar(context);

List<Cookie> cookies2 = cookieJar2.loadForRequest(HttpUrl.parse("http://acme.test.url.com"));
assertFalse(cookies2.isEmpty());

cookieJar1.clear();
}

@Test
public void testRemovesInvalidCookies() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
SharedPreferences sharedPreferences = context.getSharedPreferences(COOKIE_PERSISTANCE, Context.MODE_PRIVATE);
sharedPreferences.edit().putString("x", "y").apply();
assertEquals(1, sharedPreferences.getAll().size());

new CollectorCookieJar(context);
assertEquals(0, sharedPreferences.getAll().size());
}
}
Loading

0 comments on commit 627db67

Please sign in to comment.