diff --git a/android-core/src/androidTest/kotlin/com.mparticle/identity/IdentityApiStartTest.kt b/android-core/src/androidTest/kotlin/com.mparticle/identity/IdentityApiStartTest.kt index 69707f5a9..6117b4807 100644 --- a/android-core/src/androidTest/kotlin/com.mparticle/identity/IdentityApiStartTest.kt +++ b/android-core/src/androidTest/kotlin/com.mparticle/identity/IdentityApiStartTest.kt @@ -63,12 +63,18 @@ class IdentityApiStartTest : BaseCleanInstallEachTest() { @Test @Throws(Exception::class) fun testNoInitialIdentity() { + val currentMpid = ran.nextLong() + val identities = mRandomUtils.randomUserIdentities startMParticle() - TestCase.assertEquals(mServer.Requests().identify.size, 1) + MParticle.getInstance()?.Internal()?.configManager?.setMpid(currentMpid, ran.nextBoolean()) + for ((key, value) in identities) { + AccessUtils.setUserIdentity(value, key, currentMpid) + } + com.mparticle.internal.AccessUtils.awaitMessageHandler() mServer = MockServer.getNewInstance(mContext) startMParticle() - // Due to caching - TestCase.assertEquals(mServer.Requests().identify.size, 0) + TestCase.assertEquals(mServer.Requests().identify.size, 1) + assertIdentitiesMatch(mServer.Requests().identify[0], identities, false) } /** diff --git a/android-core/src/main/java/com/mparticle/identity/IdentityApi.java b/android-core/src/main/java/com/mparticle/identity/IdentityApi.java index 938ee4538..bdf61b887 100644 --- a/android-core/src/main/java/com/mparticle/identity/IdentityApi.java +++ b/android-core/src/main/java/com/mparticle/identity/IdentityApi.java @@ -364,7 +364,7 @@ private void reset() { } private boolean shouldMakeRequest(IdentityApiRequest identityRequest, boolean acceptCachedResponse, long lastIdentityCall) { - if (!acceptCachedResponse) { + if (!acceptCachedResponse || !mConfigManager.isIdentityCachingEnabled()) { return true; } boolean hasTimedOut = lastIdentityCall == -1L || (lastIdentityCall + (timeoutSeconds * 1000) > System.currentTimeMillis()); diff --git a/android-core/src/main/java/com/mparticle/internal/ConfigManager.java b/android-core/src/main/java/com/mparticle/internal/ConfigManager.java index 6199b06e7..2fe9f6826 100644 --- a/android-core/src/main/java/com/mparticle/internal/ConfigManager.java +++ b/android-core/src/main/java/com/mparticle/internal/ConfigManager.java @@ -73,6 +73,7 @@ public class ConfigManager { static final String DATAPLAN_BLOCK_USER_IDENTITIES = "id"; public static final String KIT_CONFIG_KEY = "kit_config"; static final String MIGRATED_TO_KIT_SHARED_PREFS = "is_mig_kit_sp"; + private static final String IDENTITY_CACHING_ENABLED = "identityCachingEnabled"; private static final int DEVMODE_UPLOAD_INTERVAL_MILLISECONDS = 10 * 1000; private static final int DEFAULT_MAX_ALIAS_WINDOW_DAYS = 90; @@ -92,6 +93,7 @@ public class ConfigManager { private JSONObject mProviderPersistence; private int mRampValue = -1; private int mUserBucket = -1; + private boolean identityCachingEnabled = false; private int mSessionTimeoutInterval = -1; private int mUploadInterval = -1; @@ -421,6 +423,9 @@ private synchronized void updateCoreConfig(JSONObject responseJSON, boolean newC mSendOoEvents = false; } + //TODO Read from identityCachingEnabled feature flag + editor.putBoolean(IDENTITY_CACHING_ENABLED, identityCachingEnabled); + if (responseJSON.has(ProviderPersistence.KEY_PERSISTENCE)) { setProviderPersistence(new ProviderPersistence(responseJSON, mContext)); } else { @@ -527,6 +532,10 @@ public long getInfluenceOpenTimeoutMillis() { return mInfluenceOpenTimeout; } + public boolean isIdentityCachingEnabled() { + return identityCachingEnabled; + } + private void applyConfig() { if (getLogUnhandledExceptions()) { enableUncaughtExceptionLogging(false); diff --git a/testutils/src/main/java/com/mparticle/testutils/BaseAbstractTest.java b/testutils/src/main/java/com/mparticle/testutils/BaseAbstractTest.java index 402fd00ea..83d74b53c 100644 --- a/testutils/src/main/java/com/mparticle/testutils/BaseAbstractTest.java +++ b/testutils/src/main/java/com/mparticle/testutils/BaseAbstractTest.java @@ -1,5 +1,6 @@ package com.mparticle.testutils; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.app.Activity; @@ -103,6 +104,7 @@ protected void startMParticle(MParticleOptions.Builder optionsBuilder) throws In MParticle.start(optionsBuilder.build()); mServer.setupHappyIdentify(mStartingMpid); latch.await(); + assertTrue(called.value); } protected void goToBackground() {