From 3b4de14dd674ba0d35c63b68535138e31e2d06da Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 8 Mar 2022 16:14:15 -0800 Subject: [PATCH 01/15] clean up --- .../OptimizelyManagerEventHandlerTest.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java new file mode 100644 index 00000000..9bfae9c9 --- /dev/null +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java @@ -0,0 +1,68 @@ +/**************************************************************************** + * Copyright 2022, Optimizely, Inc. and contributors * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); * + * you may not use this file except in compliance with the License. * + * You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + ***************************************************************************/ + +package com.optimizely.ab.android.sdk; + +import static junit.framework.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import com.optimizely.ab.event.EventHandler; +import com.optimizely.ab.event.LogEvent; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import java.util.concurrent.TimeUnit; + +@RunWith(AndroidJUnit4.class) +public class OptimizelyManagerEventHandlerTest { + + private String minDatafileWithEvent = "{\n" + + "experiments: [ ],\n" + + "version: \"2\",\n" + + "audiences: [ ],\n" + + "groups: [ ],\n" + + "attributes: [ ],\n" + + "projectId: \"123\",\n" + + "accountId: \"6365361536\",\n" + + "events: [{\"experimentIds\": [\"8509139139\"], \"id\": \"8505434668\", \"key\": \"test_event\"}],\n" + + "revision: \"1\"\n" + + "}"; + + @Test + public void eventClientNameAndVersion() throws Exception { + EventHandler mockEventHandler = mock(EventHandler.class); + + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + OptimizelyManager optimizelyManager = OptimizelyManager.builder() + .withSDKKey("any-sdk-key") + .withEventDispatchInterval(0, TimeUnit.SECONDS) + .withEventHandler(mockEventHandler) + .build(context); + + OptimizelyClient optimizelyClient = optimizelyManager.initialize(context, minDatafileWithEvent); + optimizelyClient.track("test_event", "tester"); + + ArgumentCaptor argument = ArgumentCaptor.forClass(LogEvent.class); + verify(mockEventHandler, timeout(5000)).dispatchEvent(argument.capture()); + assertEquals(argument.getValue().getEventBatch().getClientName(), "android-sdk"); + assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); + } + +} From 056f277f8e8aa8f5e5b223ce85b7d42c9b52c051 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 15 Mar 2022 11:35:32 -0700 Subject: [PATCH 02/15] fix client-sdk name/version override --- .../java/com/optimizely/ab/android/sdk/OptimizelyManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index e46192c1..0253920f 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -580,8 +580,8 @@ private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull Stri builder.withDatafile(datafile); } - builder.withClientEngine(clientEngine) - .withClientVersion(BuildConfig.CLIENT_VERSION); + // override client sdk name/version to be included in events + builder.withClientInfo(clientEngine, BuildConfig.CLIENT_VERSION); if (errorHandler != null) { builder.withErrorHandler(errorHandler); From 20f10cdf8e66a406317e6d6927a3d6ab1ac372ce Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 15 Mar 2022 11:36:37 -0700 Subject: [PATCH 03/15] fix copyright year --- .../java/com/optimizely/ab/android/sdk/OptimizelyManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 0253920f..36ad600b 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017-2021, Optimizely, Inc. and contributors * + * Copyright 2017-2022, Optimizely, Inc. and contributors * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * From 59810bdac7a7cc8bd337e1fe42a3f4bbe69ab333 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 17 Mar 2022 17:08:20 -0700 Subject: [PATCH 04/15] upgrade java-sdk to 3.10.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 763abfad..f5d125ae 100644 --- a/build.gradle +++ b/build.gradle @@ -63,7 +63,7 @@ ext { build_tools_version = "29.0.3" min_sdk_version = 14 target_sdk_version = 29 - java_core_ver = "3.10.1" + java_core_ver = "3.10.2" android_logger_ver = "1.3.6" jacksonversion= "2.11.2" annotations_ver = "1.0.0" From e36be4426e5bc599e04bb5100470b5bb8f470512 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 18 Mar 2022 11:02:41 -0700 Subject: [PATCH 05/15] log SDK version --- .../com/optimizely/ab/android/sdk/OptimizelyManager.java | 5 +++++ build.gradle | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 36ad600b..f1cd4423 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -122,6 +122,11 @@ public class OptimizelyManager { this.userProfileService = userProfileService; this.notificationCenter = notificationCenter; this.defaultDecideOptions = defaultDecideOptions; + + String sdkVersion = BuildConfig.CLIENT_VERSION; + if (sdkVersion != null && !sdkVersion.isEmpty()) { + logger.info("SDK Version: {}", sdkVersion); + } } @VisibleForTesting diff --git a/build.gradle b/build.gradle index f5d125ae..a579c428 100644 --- a/build.gradle +++ b/build.gradle @@ -99,7 +99,8 @@ task testAllModulesTravis () { dependsOn(':android-sdk:connectedAndroidTest', ':android-sdk:test', ':event-handler:connectedAndroidTest', ':event-handler:test', ':datafile-handler:connectedAndroidTest', ':datafile-handler:test', - ':user-profile:connectedAndroidTest', ':shared:connectedAndroidTest') + ':user-profile:connectedAndroidTest', + ':shared:connectedAndroidTest') } // Publish to MavenCentral From 127d7486e3b4ee78a3bf560e9c998f9deb6a8513 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 18 Mar 2022 16:39:28 -0700 Subject: [PATCH 06/15] specify BuildConfig path --- .../com/optimizely/ab/android/sdk/OptimizelyManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index f1cd4423..cb8686ff 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -50,6 +50,7 @@ import com.optimizely.ab.notification.NotificationCenter; import com.optimizely.ab.notification.UpdateConfigNotification; import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption; +import static com.optimizely.ab.android.sdk.BuildConfig.CLIENT_VERSION; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -123,7 +124,7 @@ public class OptimizelyManager { this.notificationCenter = notificationCenter; this.defaultDecideOptions = defaultDecideOptions; - String sdkVersion = BuildConfig.CLIENT_VERSION; + String sdkVersion = CLIENT_VERSION; if (sdkVersion != null && !sdkVersion.isEmpty()) { logger.info("SDK Version: {}", sdkVersion); } @@ -586,7 +587,7 @@ private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull Stri } // override client sdk name/version to be included in events - builder.withClientInfo(clientEngine, BuildConfig.CLIENT_VERSION); + builder.withClientInfo(clientEngine, CLIENT_VERSION); if (errorHandler != null) { builder.withErrorHandler(errorHandler); From 064cbcf44246259075cb8b652f9e4ef8e70c97d9 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 22 Mar 2022 10:39:02 -0700 Subject: [PATCH 07/15] add guard for CLIENT_VERSION --- .../optimizely/ab/android/sdk/OptimizelyManager.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index cb8686ff..84c5f4cb 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -50,7 +50,7 @@ import com.optimizely.ab.notification.NotificationCenter; import com.optimizely.ab.notification.UpdateConfigNotification; import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption; -import static com.optimizely.ab.android.sdk.BuildConfig.CLIENT_VERSION; +import com.optimizely.ab.android.sdk.BuildConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -87,6 +87,7 @@ public class OptimizelyManager { @Nullable private OptimizelyStartListener optimizelyStartListener; @NonNull private final List defaultDecideOptions; + private String sdkVersion = null; OptimizelyManager(@Nullable String projectId, @Nullable String sdkKey, @@ -124,9 +125,11 @@ public class OptimizelyManager { this.notificationCenter = notificationCenter; this.defaultDecideOptions = defaultDecideOptions; - String sdkVersion = CLIENT_VERSION; - if (sdkVersion != null && !sdkVersion.isEmpty()) { + try { + sdkVersion = BuildConfig.CLIENT_VERSION; logger.info("SDK Version: {}", sdkVersion); + } catch (Exception e) { + logger.warn("Error getting BuildConfig version"); } } @@ -587,7 +590,7 @@ private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull Stri } // override client sdk name/version to be included in events - builder.withClientInfo(clientEngine, CLIENT_VERSION); + builder.withClientInfo(clientEngine, sdkVersion); if (errorHandler != null) { builder.withErrorHandler(errorHandler); From 57566688792fff40d562a69ed48a6ff9edb5760c Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 22 Mar 2022 15:56:29 -0700 Subject: [PATCH 08/15] testing --- .../java/com/optimizely/ab/android/sdk/OptimizelyManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 84c5f4cb..6da3dc12 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -50,7 +50,6 @@ import com.optimizely.ab.notification.NotificationCenter; import com.optimizely.ab.notification.UpdateConfigNotification; import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption; -import com.optimizely.ab.android.sdk.BuildConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -126,7 +125,7 @@ public class OptimizelyManager { this.defaultDecideOptions = defaultDecideOptions; try { - sdkVersion = BuildConfig.CLIENT_VERSION; + sdkVersion = com.optimizely.ab.android.sdk.BuildConfig.CLIENT_VERSION; logger.info("SDK Version: {}", sdkVersion); } catch (Exception e) { logger.warn("Error getting BuildConfig version"); From 1a03b71dd59d0581be0040cfbe0e534e4f8c3aa7 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 22 Mar 2022 16:30:21 -0700 Subject: [PATCH 09/15] testing --- .../ab/android/sdk/OptimizelyManagerEventHandlerTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java index 9bfae9c9..d81a905d 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java @@ -62,6 +62,8 @@ public void eventClientNameAndVersion() throws Exception { ArgumentCaptor argument = ArgumentCaptor.forClass(LogEvent.class); verify(mockEventHandler, timeout(5000)).dispatchEvent(argument.capture()); assertEquals(argument.getValue().getEventBatch().getClientName(), "android-sdk"); + + assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.LIBRARY_PACKAGE_NAME); assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); } From 556fef4f4967a89d0070d7984ec0701daa589d4e Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Tue, 22 Mar 2022 17:08:25 -0700 Subject: [PATCH 10/15] clean up --- .../ab/android/sdk/OptimizelyManagerEventHandlerTest.java | 2 -- .../java/com/optimizely/ab/android/sdk/OptimizelyManager.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java index d81a905d..9bfae9c9 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java @@ -62,8 +62,6 @@ public void eventClientNameAndVersion() throws Exception { ArgumentCaptor argument = ArgumentCaptor.forClass(LogEvent.class); verify(mockEventHandler, timeout(5000)).dispatchEvent(argument.capture()); assertEquals(argument.getValue().getEventBatch().getClientName(), "android-sdk"); - - assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.LIBRARY_PACKAGE_NAME); assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); } diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 6da3dc12..9e8c3ae1 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -125,7 +125,7 @@ public class OptimizelyManager { this.defaultDecideOptions = defaultDecideOptions; try { - sdkVersion = com.optimizely.ab.android.sdk.BuildConfig.CLIENT_VERSION; + sdkVersion = BuildConfig.CLIENT_VERSION; logger.info("SDK Version: {}", sdkVersion); } catch (Exception e) { logger.warn("Error getting BuildConfig version"); From c42f3620b2eb6c69c9f85c3b508f997c47ead292 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 23 Mar 2022 10:55:57 -0700 Subject: [PATCH 11/15] testing --- android-sdk/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index f0d2955d..e9108a4c 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -28,7 +28,10 @@ android { versionCode 1 versionName version_name testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" + + // buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" + buildConfigField "String", "CLIENT_VERSION", "\"1.2.3\"" + // these rules will be merged to app's proguard rules consumerProguardFiles '../proguard-rules.txt' } From 8eaa6d16b91edfe5c5fe37a780021b71989f27df Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 23 Mar 2022 12:02:33 -0700 Subject: [PATCH 12/15] fix gradle to avoid undetermistic version in travis --- android-sdk/build.gradle | 4 +--- build.gradle | 10 +++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index e9108a4c..0dbdbe37 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -28,9 +28,7 @@ android { versionCode 1 versionName version_name testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - - // buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" - buildConfigField "String", "CLIENT_VERSION", "\"1.2.3\"" + buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" // these rules will be merged to app's proguard rules consumerProguardFiles '../proguard-rules.txt' diff --git a/build.gradle b/build.gradle index a579c428..3773576e 100644 --- a/build.gradle +++ b/build.gradle @@ -19,13 +19,13 @@ buildscript { ext.kotlin_version = '1.4.0' - def version_name = System.getenv('TRAVIS_TAG') - if (version_name != null) { - rootProject.ext.version_name = version_name + def tag_name = System.getenv('TRAVIS_TAG') + if (tag_name != null) { + ext.version_name = tag_name } else { - rootProject.ext.version_name = 'debugVersion' + ext.version_name = 'debugVersion' } - ext.is_release_version = !rootProject.ext.version_name.endsWith("SNAPSHOT") + ext.is_release_version = !version_name.endsWith("SNAPSHOT") repositories { jcenter() From f348e830dd792142b82dfb8bfb432583e02ede6f Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 23 Mar 2022 13:07:11 -0700 Subject: [PATCH 13/15] testing --- android-sdk/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index 0dbdbe37..7d5b3adf 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -28,7 +28,7 @@ android { versionCode 1 versionName version_name testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" + buildConfigField "String", "CLIENT_VERSION", "\"${rootProject.ext.version_name}\"" // these rules will be merged to app's proguard rules consumerProguardFiles '../proguard-rules.txt' From ed4dda1f81b2eefc57720cdfb44724bb54d37ae4 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 24 Mar 2022 10:04:26 -0700 Subject: [PATCH 14/15] add null and empty check for client version in gradle --- build.gradle | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 3773576e..ff746382 100644 --- a/build.gradle +++ b/build.gradle @@ -19,10 +19,8 @@ buildscript { ext.kotlin_version = '1.4.0' - def tag_name = System.getenv('TRAVIS_TAG') - if (tag_name != null) { - ext.version_name = tag_name - } else { + ext.version_name = System.getenv('TRAVIS_TAG') + if (version_name == null || version_name.isEmpty()) { ext.version_name = 'debugVersion' } ext.is_release_version = !version_name.endsWith("SNAPSHOT") From a41fa3d93f639e60f757c724ebd0dcd84531bee6 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 24 Mar 2022 10:55:06 -0700 Subject: [PATCH 15/15] clean up --- android-sdk/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index 7d5b3adf..0dbdbe37 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -28,7 +28,7 @@ android { versionCode 1 versionName version_name testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - buildConfigField "String", "CLIENT_VERSION", "\"${rootProject.ext.version_name}\"" + buildConfigField "String", "CLIENT_VERSION", "\"$version_name\"" // these rules will be merged to app's proguard rules consumerProguardFiles '../proguard-rules.txt'