Skip to content

Commit 88de5ea

Browse files
authored
Merge pull request DataDog#3137 from DataDog/hector.morilloprieto/RUM-13018
RUM-13018 - Add 'setVersion' method to the configuration
2 parents a43d6bc + 0f1f019 commit 88de5ea

8 files changed

Lines changed: 101 additions & 15 deletions

File tree

dd-sdk-android-core/api/apiSurface

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ data class com.datadog.android.core.configuration.Configuration
266266
fun setCrashReportsEnabled(Boolean): Builder
267267
fun setBackpressureStrategy(BackPressureStrategy): Builder
268268
fun setUploadSchedulerStrategy(UploadSchedulerStrategy?): Builder
269+
fun setVersion(String): Builder
269270
companion object
270271
class com.datadog.android.core.configuration.HostsSanitizer
271272
fun sanitizeHosts(List<String>, String): List<String>

dd-sdk-android-core/api/dd-sdk-android-core.api

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -702,8 +702,8 @@ public final class com/datadog/android/core/configuration/BatchSize : java/lang/
702702

703703
public final class com/datadog/android/core/configuration/Configuration {
704704
public static final field Companion Lcom/datadog/android/core/configuration/Configuration$Companion;
705-
public final fun copy (Lcom/datadog/android/core/configuration/Configuration$Core;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Map;)Lcom/datadog/android/core/configuration/Configuration;
706-
public static synthetic fun copy$default (Lcom/datadog/android/core/configuration/Configuration;Lcom/datadog/android/core/configuration/Configuration$Core;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/core/configuration/Configuration;
705+
public final fun copy (Lcom/datadog/android/core/configuration/Configuration$Core;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Map;Ljava/lang/String;)Lcom/datadog/android/core/configuration/Configuration;
706+
public static synthetic fun copy$default (Lcom/datadog/android/core/configuration/Configuration;Lcom/datadog/android/core/configuration/Configuration$Core;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Map;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/core/configuration/Configuration;
707707
public fun equals (Ljava/lang/Object;)Z
708708
public fun hashCode ()I
709709
public fun toString ()Ljava/lang/String;
@@ -728,6 +728,7 @@ public final class com/datadog/android/core/configuration/Configuration$Builder
728728
public final fun setUploadFrequency (Lcom/datadog/android/core/configuration/UploadFrequency;)Lcom/datadog/android/core/configuration/Configuration$Builder;
729729
public final fun setUploadSchedulerStrategy (Lcom/datadog/android/core/configuration/UploadSchedulerStrategy;)Lcom/datadog/android/core/configuration/Configuration$Builder;
730730
public final fun setUseDeveloperModeWhenDebuggable (Z)Lcom/datadog/android/core/configuration/Configuration$Builder;
731+
public final fun setVersion (Ljava/lang/String;)Lcom/datadog/android/core/configuration/Configuration$Builder;
731732
public final fun useSite (Lcom/datadog/android/DatadogSite;)Lcom/datadog/android/core/configuration/Configuration$Builder;
732733
}
733734

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/configuration/Configuration.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ internal constructor(
2727
internal val variant: String,
2828
internal val service: String?,
2929
internal val crashReportsEnabled: Boolean,
30-
internal val additionalConfig: Map<String, Any>
30+
internal val additionalConfig: Map<String, Any>,
31+
internal val version: String?
3132
) {
3233

3334
internal data class Core(
@@ -72,6 +73,7 @@ internal constructor(
7273

7374
private var coreConfig = DEFAULT_CORE_CONFIG
7475
private var crashReportsEnabled: Boolean = true
76+
private var version: String? = null
7577

7678
internal var hostsSanitizer = HostsSanitizer()
7779

@@ -86,7 +88,9 @@ internal constructor(
8688
variant = variant,
8789
service = service,
8890
crashReportsEnabled = crashReportsEnabled,
89-
additionalConfig = additionalConfig
91+
additionalConfig = additionalConfig,
92+
version = version
93+
9094
)
9195
}
9296

@@ -270,6 +274,17 @@ internal constructor(
270274
return this
271275
}
272276

277+
/**
278+
* Sets the version name that will be used for all events sent to Datadog.
279+
* If not provided, the SDK will use the version from the application's package info.
280+
*
281+
* @param version the version name to use
282+
*/
283+
fun setVersion(version: String): Builder {
284+
this.version = version
285+
return this
286+
}
287+
273288
internal fun allowClearTextHttp(): Builder {
274289
coreConfig = coreConfig.copy(
275290
needsClearTextHttp = true

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -510,13 +510,14 @@ internal class CoreFeature(
510510
private fun readApplicationInformation(appContext: Context, configuration: Configuration) {
511511
val packageInfo = getPackageInfo(appContext)
512512

513-
val versionName = packageInfo?.versionName
514-
515513
@Suppress("DEPRECATION")
516514
val versionCode = packageInfo?.versionCode
517515

516+
val versionName =
517+
configuration.version ?: packageInfo?.versionName ?: versionCode?.toString() ?: DEFAULT_APP_VERSION
518+
518519
packageVersionProvider = DefaultAppVersionProvider(
519-
initialVersion = versionName ?: versionCode?.toString() ?: DEFAULT_APP_VERSION,
520+
initialVersion = versionName,
520521
versionCode = versionCode ?: 0
521522
)
522523
clientToken = configuration.clientToken

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/DatadogCoreInitializationTest.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ internal class DatadogCoreInitializationTest {
588588
).apply {
589589
initialize(
590590
fakeConfiguration.copy(
591+
version = null,
591592
additionalConfig = mapOf(Datadog.DD_APP_VERSION_TAG to forge.aWhitespaceString())
592593
)
593594
)
@@ -612,6 +613,7 @@ internal class DatadogCoreInitializationTest {
612613
).apply {
613614
initialize(
614615
fakeConfiguration.copy(
616+
version = null,
615617
additionalConfig = mapOf(Datadog.DD_APP_VERSION_TAG to forge.anInt())
616618
)
617619
)
@@ -623,6 +625,28 @@ internal class DatadogCoreInitializationTest {
623625
)
624626
}
625627

628+
@Test
629+
fun `M apply app version from config W initialize { version in config is not null }`(
630+
@StringForgery appVersion: String
631+
) {
632+
// When
633+
testedCore = DatadogCore(
634+
appContext.mockInstance,
635+
fakeInstanceId,
636+
fakeInstanceName,
637+
executorServiceFactory = { _, _, _, _ -> mockPersistenceExecutorService }
638+
).apply {
639+
initialize(
640+
fakeConfiguration.copy(
641+
version = appVersion
642+
)
643+
)
644+
}
645+
646+
// Then
647+
assertThat(testedCore.coreFeature.packageVersionProvider.version).isEqualTo(appVersion)
648+
}
649+
626650
// endregion
627651

628652
companion object {

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/configuration/ConfigurationBuilderTest.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import fr.xgouchet.elmyr.annotation.BoolForgery
2020
import fr.xgouchet.elmyr.annotation.Forgery
2121
import fr.xgouchet.elmyr.annotation.IntForgery
2222
import fr.xgouchet.elmyr.annotation.StringForgery
23+
import fr.xgouchet.elmyr.annotation.StringForgeryType
2324
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
2425
import fr.xgouchet.elmyr.junit5.ForgeExtension
2526
import okhttp3.Authenticator
@@ -101,6 +102,22 @@ internal class ConfigurationBuilderTest {
101102
assertThat(config.additionalConfig).isEmpty()
102103
}
103104

105+
@Test
106+
fun `M build config with custom version W setVersion() and build()`(
107+
@StringForgery(StringForgeryType.ALPHA_NUMERICAL) version: String
108+
) {
109+
// When
110+
val config = testedBuilder
111+
.setVersion(version)
112+
.build()
113+
114+
// Then
115+
assertThat(config.version).isEqualTo(version)
116+
assertThat(config.coreConfig).isEqualTo(Configuration.DEFAULT_CORE_CONFIG)
117+
assertThat(config.crashReportsEnabled).isTrue
118+
assertThat(config.additionalConfig).isEmpty()
119+
}
120+
104121
@Test
105122
fun `M build config with custom site W useSite() and build()`(
106123
@Forgery site: DatadogSite

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ internal class CoreFeatureTest {
140140
@Forgery
141141
lateinit var fakeBuildId: UUID
142142

143+
@StringForgery(type = StringForgeryType.ALPHA_NUMERICAL)
144+
lateinit var fakeVersion: String
145+
143146
@BeforeEach
144147
fun `set up`() {
145148
CoreFeature.disableKronosBackgroundSync = true
@@ -158,6 +161,7 @@ internal class CoreFeatureTest {
158161
whenever(mockPersistenceExecutorService.execute(any())) doAnswer {
159162
it.getArgument<Runnable>(0).run()
160163
}
164+
fakeConfig = fakeConfig.copy(version = fakeVersion)
161165
}
162166

163167
@AfterEach
@@ -326,7 +330,7 @@ internal class CoreFeatureTest {
326330

327331
// Then
328332
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
329-
assertThat(testedFeature.packageVersionProvider.version).isEqualTo(appContext.fakeVersionName)
333+
assertThat(testedFeature.packageVersionProvider.version).isEqualTo(fakeConfig.version)
330334
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
331335
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
332336
assertThat(testedFeature.variant).isEqualTo(fakeConfig.variant)
@@ -351,7 +355,7 @@ internal class CoreFeatureTest {
351355
// Then
352356
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
353357
assertThat(testedFeature.packageVersionProvider.version)
354-
.isEqualTo(appContext.fakeVersionName)
358+
.isEqualTo(fakeConfig.version)
355359
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
356360
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
357361
assertThat(testedFeature.variant).isEqualTo(fakeConfig.variant)
@@ -373,7 +377,7 @@ internal class CoreFeatureTest {
373377
// Then
374378
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
375379
assertThat(testedFeature.packageVersionProvider.version)
376-
.isEqualTo(appContext.fakeVersionName)
380+
.isEqualTo(fakeConfig.version)
377381
assertThat(testedFeature.serviceName).isEqualTo(appContext.fakePackageName)
378382
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
379383
assertThat(testedFeature.variant).isEqualTo(fakeConfig.variant)
@@ -382,6 +386,28 @@ internal class CoreFeatureTest {
382386
assertThat(testedFeature.uploadFrequency).isEqualTo(fakeConfig.coreConfig.uploadFrequency)
383387
}
384388

389+
@Test
390+
fun `M use app version W initialize() {null config version}`() {
391+
// When
392+
testedFeature.initialize(
393+
appContext.mockInstance,
394+
fakeSdkInstanceId,
395+
fakeConfig.copy(version = null),
396+
fakeConsent
397+
)
398+
399+
// Then
400+
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
401+
assertThat(testedFeature.packageVersionProvider.version)
402+
.isEqualTo(appContext.fakeVersionName)
403+
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
404+
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
405+
assertThat(testedFeature.variant).isEqualTo(fakeConfig.variant)
406+
assertThat(testedFeature.contextRef.get()).isEqualTo(appContext.mockInstance)
407+
assertThat(testedFeature.batchSize).isEqualTo(fakeConfig.coreConfig.batchSize)
408+
assertThat(testedFeature.uploadFrequency).isEqualTo(fakeConfig.coreConfig.uploadFrequency)
409+
}
410+
385411
@Test
386412
fun `M initializes app info W initialize() {null versionName}`() {
387413
// Given
@@ -393,7 +419,7 @@ internal class CoreFeatureTest {
393419
testedFeature.initialize(
394420
appContext.mockInstance,
395421
fakeSdkInstanceId,
396-
fakeConfig,
422+
fakeConfig.copy(version = null),
397423
fakeConsent
398424
)
399425

@@ -422,7 +448,7 @@ internal class CoreFeatureTest {
422448
testedFeature.initialize(
423449
appContext.mockInstance,
424450
fakeSdkInstanceId,
425-
fakeConfig,
451+
fakeConfig.copy(version = null),
426452
fakeConsent
427453
)
428454

@@ -456,7 +482,7 @@ internal class CoreFeatureTest {
456482
testedFeature.initialize(
457483
appContext.mockInstance,
458484
fakeSdkInstanceId,
459-
fakeConfig,
485+
fakeConfig.copy(version = null),
460486
fakeConsent
461487
)
462488

@@ -730,7 +756,7 @@ internal class CoreFeatureTest {
730756
// Then
731757
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
732758
assertThat(testedFeature.packageVersionProvider.version)
733-
.isEqualTo(appContext.fakeVersionName)
759+
.isEqualTo(fakeConfig.version)
734760
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
735761
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
736762
assertThat(testedFeature.variant).isEqualTo(fakeConfig.variant)

dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/ConfigurationForgeryFactory.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ internal class ConfigurationForgeryFactory :
2020
variant = forge.anElementFrom(forge.anAlphabeticalString(), ""),
2121
service = forge.aStringMatching("[a-z]+(\\.[a-z]+)+"),
2222
crashReportsEnabled = forge.aBool(),
23-
additionalConfig = forge.aMap { aString() to aString() }
23+
additionalConfig = forge.aMap { aString() to aString() },
24+
version = forge.aNullable { forge.anAlphaNumericalString() }
2425
)
2526
}
2627
}

0 commit comments

Comments
 (0)