diff --git a/dd-sdk-android-core/api/apiSurface b/dd-sdk-android-core/api/apiSurface index 67f4f7815a..c6b806b96a 100644 --- a/dd-sdk-android-core/api/apiSurface +++ b/dd-sdk-android-core/api/apiSurface @@ -23,6 +23,7 @@ enum com.datadog.android.DatadogSite - AP1 - AP2 - US1_FED + - US2_FED - STAGING val intakeEndpoint: String class com.datadog.android._InternalProxy diff --git a/dd-sdk-android-core/api/dd-sdk-android-core.api b/dd-sdk-android-core/api/dd-sdk-android-core.api index 7b9f86b628..b206425a2f 100644 --- a/dd-sdk-android-core/api/dd-sdk-android-core.api +++ b/dd-sdk-android-core/api/dd-sdk-android-core.api @@ -64,6 +64,7 @@ public final class com/datadog/android/DatadogSite : java/lang/Enum { public static final field STAGING Lcom/datadog/android/DatadogSite; public static final field US1 Lcom/datadog/android/DatadogSite; public static final field US1_FED Lcom/datadog/android/DatadogSite; + public static final field US2_FED Lcom/datadog/android/DatadogSite; public static final field US3 Lcom/datadog/android/DatadogSite; public static final field US5 Lcom/datadog/android/DatadogSite; public final fun getIntakeEndpoint ()Ljava/lang/String; diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/DatadogSite.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/DatadogSite.kt index 26b4c2731b..fcb668b292 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/DatadogSite.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/DatadogSite.kt @@ -50,6 +50,11 @@ enum class DatadogSite private constructor(internal val siteName: String, privat */ US1_FED("us1_fed", "browser-intake-ddog-gov.com"), + /** + * The US2_FED site (FedRAMP compatible): [us2.ddog-gov.com](https://us2.ddog-gov.com). + */ + US2_FED("us2_fed", "browser-intake-us2-ddog-gov.com"), + /** * The STAGING site (internal usage only): [app.datad0g.com](https://app.datad0g.com). */ diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/DatadogSiteTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/DatadogSiteTest.kt index 7b58e40b83..a4127ff5c3 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/DatadogSiteTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/DatadogSiteTest.kt @@ -45,6 +45,11 @@ internal class DatadogSiteTest { assertThat(DatadogSite.US1_FED.intakeEndpoint).isEqualTo("https://browser-intake-ddog-gov.com") } + @Test + fun `M return intake endpoint W intakeEndpoint {US2-FED}`() { + assertThat(DatadogSite.US2_FED.intakeEndpoint).isEqualTo("https://browser-intake-us2-ddog-gov.com") + } + @Test fun `M return intake endpoint W intakeEndpoint {EU1}`() { assertThat(DatadogSite.EU1.intakeEndpoint).isEqualTo("https://browser-intake-datadoghq.eu") diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensions.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensions.kt index 918c8cd343..89e622d66e 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensions.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensions.kt @@ -25,7 +25,8 @@ internal fun DatadogSite.getFlagsEndpoint(customerDomain: String): String? { * @return Flags host string in format `.ff-cdn..`, or null if site not supported */ private fun DatadogSite.flagsHost(customerDomain: String): String? = when (this) { - DatadogSite.US1_FED -> null + DatadogSite.US1_FED, + DatadogSite.US2_FED -> null DatadogSite.STAGING -> "$customerDomain.ff-cdn.datad0g.com" DatadogSite.EU1 -> buildFlagsHostString(customerDomain, tld = "eu") // No site in the host, .eu TLD diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensionsTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensionsTest.kt index 93dbea8108..24a86d23e5 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensionsTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/DatadogSiteExtensionsTest.kt @@ -10,10 +10,10 @@ import com.datadog.android.DatadogSite import fr.xgouchet.elmyr.annotation.StringForgery import fr.xgouchet.elmyr.junit5.ForgeExtension import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.EnumSource import org.junit.jupiter.params.provider.MethodSource @ExtendWith(ForgeExtension::class) @@ -56,10 +56,14 @@ internal class DatadogSiteExtensionsTest { // region getFlagsEndpoint - Error Cases - @Test - fun `M return null W getFlagsEndpoint() { unsupported site }`(@StringForgery customerDomain: String) { + @ParameterizedTest + @EnumSource(DatadogSite::class, names = ["US1_FED", "US2_FED"]) + fun `M return null W getFlagsEndpoint() { unsupported site }`( + site: DatadogSite, + @StringForgery customerDomain: String + ) { // When - val result = DatadogSite.US1_FED.getFlagsEndpoint(customerDomain) + val result = site.getFlagsEndpoint(customerDomain) // Then assertThat(result).isNull() diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsRequestFactoryTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsRequestFactoryTest.kt index e1cd5693a4..3a427c85f7 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsRequestFactoryTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsRequestFactoryTest.kt @@ -24,6 +24,8 @@ import org.json.JSONObject import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension import org.mockito.junit.jupiter.MockitoSettings @@ -49,7 +51,10 @@ internal class PrecomputedAssignmentsRequestFactoryTest { @BeforeEach fun `set up`(forge: Forge) { fakeDatadogContext = fakeDatadogContext.copy( - site = forge.aValueFrom(DatadogSite::class.java, exclude = listOf(DatadogSite.US1_FED)), + site = forge.aValueFrom( + DatadogSite::class.java, + exclude = listOf(DatadogSite.US1_FED, DatadogSite.US2_FED) + ), featuresContext = fakeDatadogContext.featuresContext + mapOf(Feature.RUM_FEATURE_NAME to mapOf("application_id" to fakeRumApplicationId.toString())) ) @@ -252,8 +257,10 @@ internal class PrecomputedAssignmentsRequestFactoryTest { // region create() - Error cases - @Test + @ParameterizedTest + @EnumSource(DatadogSite::class, names = ["US1_FED", "US2_FED"]) fun `M return null W create() { unsupported site and no custom endpoint }`( + site: DatadogSite, @StringForgery fakeTargetingKey: String ) { // Given @@ -262,7 +269,7 @@ internal class PrecomputedAssignmentsRequestFactoryTest { attributes = emptyMap() ) fakeDatadogContext = fakeDatadogContext.copy( - site = DatadogSite.US1_FED + site = site ) // When diff --git a/sample/kotlin/build.gradle.kts b/sample/kotlin/build.gradle.kts index cef6636b7d..0e90cb38ee 100644 --- a/sample/kotlin/build.gradle.kts +++ b/sample/kotlin/build.gradle.kts @@ -75,7 +75,7 @@ android { flavorDimensions += listOf("site") productFlavors { - val regions = arrayOf("us1", "us3", "us5", "us1_fed", "eu1", "ap1", "ap2", "staging") + val regions = arrayOf("us1", "us3", "us5", "us1_fed", "us2_fed", "eu1", "ap1", "ap2", "staging") regions.forEachIndexed { index, region -> register(region) { diff --git a/sample/kotlin/src/main/kotlin/com/datadog/android/sample/webview/DatadogSiteExt.kt b/sample/kotlin/src/main/kotlin/com/datadog/android/sample/webview/DatadogSiteExt.kt index 4f98c094ba..3479feb5d0 100644 --- a/sample/kotlin/src/main/kotlin/com/datadog/android/sample/webview/DatadogSiteExt.kt +++ b/sample/kotlin/src/main/kotlin/com/datadog/android/sample/webview/DatadogSiteExt.kt @@ -32,5 +32,6 @@ private fun DatadogSite?.browserSite(): String { DatadogSite.AP1 -> "ap1.datadoghq.com" DatadogSite.AP2 -> "ap2.datadoghq.com" DatadogSite.US1_FED -> "ddog-gov.com" + DatadogSite.US2_FED -> "us2.ddog-gov.com" } } diff --git a/sample/wear/build.gradle.kts b/sample/wear/build.gradle.kts index eb9b8a84c0..e3ce5c4de2 100644 --- a/sample/wear/build.gradle.kts +++ b/sample/wear/build.gradle.kts @@ -38,7 +38,7 @@ android { flavorDimensions += listOf("site") productFlavors { - val regions = arrayOf("us1", "us3", "us5", "us1_fed", "eu1", "ap1", "ap2", "staging") + val regions = arrayOf("us1", "us3", "us5", "us1_fed", "us2_fed", "eu1", "ap1", "ap2", "staging") regions.forEachIndexed { index, region -> register(region) {