diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolver.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolver.kt index d7dc662331..dfbcd02778 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolver.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolver.kt @@ -48,10 +48,11 @@ class DefaultFirstPartyHostHeaderTypeResolver( /** @inheritdoc */ override fun headerTypesForUrl(url: HttpUrl): Set { val host = url.host - val filteredHosts = knownHosts.filter { - it.key == "*" || it.key == host || host.endsWith(".${it.key}") - } - return filteredHosts.values.flatten().toSet() + + return knownHosts[host] + ?: knownHosts.entries.firstOrNull { host.endsWith(".${it.key}") }?.value + ?: knownHosts["*"] + ?: emptySet() } /** @inheritdoc */ diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolverTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolverTest.kt index 11da34e3d1..57c8fae0b2 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolverTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolverTest.kt @@ -350,6 +350,22 @@ internal class DefaultFirstPartyHostHeaderTypeResolverTest { } } + @Test + fun `M return correct header type W headerTypesForUrl(String) {domain and subdomain has different types}`() { + val resolver = DefaultFirstPartyHostHeaderTypeResolver( + mapOf( + "bar.com" to setOf(TracingHeaderType.DATADOG), + "foo.bar.com" to setOf(TracingHeaderType.TRACECONTEXT) + ) + ) + + assertThat(resolver.headerTypesForUrl("http://bar.com")) + .isEqualTo(setOf(TracingHeaderType.DATADOG)) + + assertThat(resolver.headerTypesForUrl("http://foo.bar.com")) + .isEqualTo(setOf(TracingHeaderType.TRACECONTEXT)) + } + companion object { private const val HOST_REGEX = "([a-z][a-z0-9_~-]{3,9}\\.){1,4}[a-z][a-z0-9]{2,3}" } diff --git a/detekt_custom.yml b/detekt_custom.yml index 22b9d08919..a9e356978d 100644 --- a/detekt_custom.yml +++ b/detekt_custom.yml @@ -1041,6 +1041,7 @@ datadog: - "kotlin.collections.Set.any(kotlin.Function1)" - "kotlin.collections.Set.associate(kotlin.Function1)" - "kotlin.collections.Set.contains(com.datadog.android.trace.TracingHeaderType)" + - "kotlin.collections.Set.firstOrNull(kotlin.Function1)" - "kotlin.collections.Set.forEach(kotlin.Function1)" - "kotlin.collections.Set.ifEmpty(kotlin.Function0)" - "kotlin.collections.Set.isEmpty()"