Skip to content

Commit 2ff36db

Browse files
committed
RUM-14857: Reverting deprecated classes back to preserve backward compatibility
1 parent c217ee7 commit 2ff36db

15 files changed

Lines changed: 297 additions & 39 deletions

File tree

dd-sdk-android-internal/api/apiSurface

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ object com.datadog.android.internal.network.HttpSpec
106106
const val GATEWAY_TIMEOUT: Int
107107
const val NETWORK_AUTHENTICATION_REQUIRED: Int
108108
fun values()
109-
fun clientErrors()
109+
fun clientErrors(Int): List<Int>
110110
fun serverErrors()
111111
object ContentType
112112
const val APPLICATION_JSON: String

dd-sdk-android-internal/api/dd-sdk-android-internal.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public final class com/datadog/android/internal/network/HttpSpec$StatusCode {
194194
public static final field TEMPORARY_REDIRECT I
195195
public static final field TOO_MANY_REQUESTS I
196196
public static final field UNAUTHORIZED I
197-
public final fun clientErrors ()Ljava/util/List;
197+
public final fun clientErrors ([I)Ljava/util/List;
198198
public final fun serverErrors ()Ljava/util/List;
199199
public final fun values ()Ljava/util/List;
200200
}

dd-sdk-android-internal/src/main/java/com/datadog/android/internal/network/HttpSpec.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ object HttpSpec {
173173
* Returns a list of common HTTP client error status codes (4xx).
174174
* @return list containing BAD_REQUEST, UNAUTHORIZED, FORBIDDEN, and NOT_FOUND
175175
*/
176-
fun clientErrors() = values().filter { it / STATUS_CODE_TYPE == STATUS_CODE_TYPE_CLIENT }
176+
fun clientErrors(vararg except: Int): List<Int> {
177+
val prohibited = except.toSet()
178+
return values().filterNot { it in prohibited }.filter { it / STATUS_CODE_TYPE == STATUS_CODE_TYPE_CLIENT }
179+
}
177180

178181
/**
179182
* Returns a list of common HTTP server error status codes (5xx).

detekt_custom_safe_calls.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,7 @@ datadog:
805805
- "kotlin.collections.List.elementAtOrNull(kotlin.Int)"
806806
- "kotlin.collections.List.filter(kotlin.Function1)"
807807
- "kotlin.collections.List.filterIndexed(kotlin.Function2)"
808+
- "kotlin.collections.List.filterNot(kotlin.Function1)"
808809
- "kotlin.collections.List.filterNotNull(kotlin.Function1)"
809810
- "kotlin.collections.List.findFirstForType(java.lang.Class)"
810811
- "kotlin.collections.List.firstOrNull()"
@@ -1136,6 +1137,7 @@ datadog:
11361137
- "kotlin.Int.toLong()"
11371138
- "kotlin.IntArray.constructor(kotlin.Int)"
11381139
- "kotlin.IntArray.joinToString(kotlin.CharSequence, kotlin.CharSequence, kotlin.CharSequence, kotlin.Int, kotlin.CharSequence, kotlin.Function1?)"
1140+
- "kotlin.IntArray.toSet()"
11391141
- "kotlin.Long.coerceIn(kotlin.Long, kotlin.Long)"
11401142
- "kotlin.Long.hashCode()"
11411143
- "kotlin.Long.or(kotlin.Long)"

instrumented/integration/src/androidTest/kotlin/com/datadog/android/sdk/integration/network/tests/NetworkInstrumentationComparisonTest.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ internal class NetworkInstrumentationComparisonTest {
8080
val results = compositeClient.execute(request)
8181

8282
// Then
83-
assertThat(results)
83+
assertThat(results, request)
8484
.haveSameSpanCount()
8585
.haveExpectedClients()
8686
.haveSameSpanStructure()
@@ -93,7 +93,11 @@ internal class NetworkInstrumentationComparisonTest {
9393
fun executionResultsMustBeSimilarWhen_clientError() = asyncTest {
9494
// Given
9595
val method = networkRule.forge.anElementFrom(ALLOWED_METHODS)
96-
val error = networkRule.forge.anElementFrom(HttpSpec.StatusCode.clientErrors())
96+
// https://github.com/RunningTheSnail/Okhttp/blob/84cbd2dae1708967c3b1bd71ccecdecefd6354f5/okhttp/src/main/java/okhttp3/internal/http/RetryAndFollowUpInterceptor.java#L318
97+
// OkHttp will retry on 408 status code by default, se we excluding this code here
98+
val error = networkRule.forge.anElementFrom(
99+
HttpSpec.StatusCode.clientErrors(HttpSpec.StatusCode.REQUEST_TIMEOUT)
100+
)
97101
val url = NetworkTestConfig.Endpoint.error(error, method)
98102
val request = TestRequest(
99103
url = url,
@@ -105,7 +109,7 @@ internal class NetworkInstrumentationComparisonTest {
105109
val results = compositeClient.execute(request)
106110

107111
// Then
108-
assertThat(results)
112+
assertThat(results, request)
109113
.haveSameSpanCount()
110114
.haveExpectedClients()
111115
.haveSameSpanStructure()
@@ -130,7 +134,7 @@ internal class NetworkInstrumentationComparisonTest {
130134
val results = compositeClient.execute(request)
131135

132136
// Then
133-
assertThat(results)
137+
assertThat(results, request)
134138
.haveSameSpanCount()
135139
.haveExpectedClients()
136140
.haveSameSpanStructure()
@@ -156,7 +160,7 @@ internal class NetworkInstrumentationComparisonTest {
156160
val results = compositeClient.execute(request)
157161

158162
// Then
159-
assertThat(results)
163+
assertThat(results, request)
160164
.haveSameSpanCount()
161165
.haveSameStatusCode()
162166
.haveExpectedClients()
@@ -181,7 +185,7 @@ internal class NetworkInstrumentationComparisonTest {
181185
val results = compositeClient.execute(request)
182186

183187
// Then
184-
assertThat(results)
188+
assertThat(results, request)
185189
.haveSameSpanCount()
186190
.haveExpectedClients()
187191
.haveSameSpanStructure()

instrumented/integration/src/androidTest/kotlin/com/datadog/android/sdk/integration/network/utils/ExecutionResultComparisonAssert.kt

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
package com.datadog.android.sdk.integration.network.utils
88

99
import com.datadog.android.sdk.integration.network.models.ClientExecutionResult
10+
import com.datadog.android.sdk.integration.network.models.TestRequest
1011
import com.datadog.android.trace.api.span.DatadogSpan
1112
import org.assertj.core.api.AbstractObjectAssert
1213
import org.assertj.core.api.Assertions.assertThat
1314

14-
internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecutionResult>) :
15+
internal class ExecutionResultComparisonAssert(
16+
actual: Map<String, ClientExecutionResult>,
17+
private val request: TestRequest
18+
) :
1519
AbstractObjectAssert<ExecutionResultComparisonAssert, Map<String, ClientExecutionResult>>(
1620
actual,
1721
ExecutionResultComparisonAssert::class.java
@@ -21,7 +25,8 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
2125
actual.values.forEach {
2226
assertThat(it.request?.method)
2327
.overridingErrorMessage {
24-
"Expected client ${it.name} to have request method: $expected but was ${it.request?.method}"
28+
"Expected client ${it.name} to have request method:" +
29+
" $expected but was ${it.request?.method}. ${requestState()}"
2530
}
2631
.isEqualTo(expected)
2732
}
@@ -31,7 +36,8 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
3136
actual.values.forEach {
3237
assertThat(it.request?.url)
3338
.overridingErrorMessage {
34-
"Expected client ${it.name} to have request url: $expected but was ${it.request?.url}"
39+
"Expected client ${it.name} to have request url: " +
40+
"$expected but was ${it.request?.url}. ${requestState()}"
3541
}
3642
.isEqualTo(expected)
3743
}
@@ -40,7 +46,8 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
4046
fun haveExpectedClients() = apply {
4147
assertThat(actual.keys)
4248
.overridingErrorMessage {
43-
"Expected composite execution result to have clients:$EXPECTED_CLIENTS but was ${actual.keys}"
49+
"Expected composite execution result to have clients: " +
50+
"$EXPECTED_CLIENTS but was ${actual.keys}. ${requestState()}"
4451
}
4552
.containsAll(EXPECTED_CLIENTS)
4653
}
@@ -50,7 +57,7 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
5057
assertThat(it.response?.statusCode)
5158
.overridingErrorMessage {
5259
"Expected client ${it.name} to have response status code: $expected " +
53-
"but was ${it.response?.statusCode}"
60+
"but was ${it.response?.statusCode}. ${requestState()}"
5461
}
5562
.isEqualTo(expected)
5663
}
@@ -61,9 +68,9 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
6168
assertThat(client1Result.response?.statusCode)
6269
.overridingErrorMessage {
6370
"Expected that all composite execution results to have same response status code, " +
64-
"but discrepancy found:\n" +
65-
"${client1Result.name}=${client1Result.response?.statusCode}\n" +
66-
"${client2Result.name}=${client2Result.response?.statusCode}\n"
71+
"but discrepancy found:" +
72+
"${client1Result.name}=${client1Result.response?.statusCode}, " +
73+
"${client2Result.name}=${client2Result.response?.statusCode}. ${requestState()}"
6774
}
6875
.isEqualTo(client2Result.response?.statusCode)
6976
}
@@ -74,9 +81,9 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
7481
assertThat(client1Result.collectedSpans.size)
7582
.overridingErrorMessage {
7683
"Expected that all composite execution results to have same response span count, " +
77-
"but discrepancy found:\n" +
78-
"${client1Result.name}=${client1Result.collectedSpans.size}\n" +
79-
"${client2Result.name}=${client2Result.collectedSpans.size}\n"
84+
"but discrepancy found: " +
85+
"${client1Result.name}=${client1Result.collectedSpans.size}, " +
86+
"${client2Result.name}=${client2Result.collectedSpans.size}. ${requestState()}"
8087
}
8188
.isEqualTo(client2Result.collectedSpans.size)
8289
}
@@ -87,9 +94,9 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
8794
assertThat(client1Result.collectedSpans.hash())
8895
.overridingErrorMessage {
8996
"Expected that all composite execution results to have same span structure, " +
90-
"but discrepancy found:\n" +
91-
"${client1Result.name}=${client1Result.collectedSpans.hash()}\n" +
92-
"${client2Result.name}=${client2Result.collectedSpans.hash()}\n"
97+
"but discrepancy found: " +
98+
"${client1Result.name}=${client1Result.collectedSpans.hash()}, " +
99+
"${client2Result.name}=${client2Result.collectedSpans.hash()}. ${requestState()}"
93100
}
94101
.isEqualTo(client2Result.collectedSpans.hash())
95102
}
@@ -101,10 +108,13 @@ internal class ExecutionResultComparisonAssert(actual: Map<String, ClientExecuti
101108
.windowed(2, 1)
102109
.forEach { (client1Result, client2Result) -> block(client1Result, client2Result) }
103110

111+
private fun requestState() = request.toString()
112+
104113
companion object {
105114
private val EXPECTED_CLIENTS = setOf("Cronet", "OkHttp")
106115

107-
internal fun assertThat(actual: Map<String, ClientExecutionResult>) = ExecutionResultComparisonAssert(actual)
116+
internal fun assertThat(actual: Map<String, ClientExecutionResult>, request: TestRequest) =
117+
ExecutionResultComparisonAssert(actual, request)
108118

109119
fun List<DatadogSpan>.associateById(): Map<Long, DatadogSpan> = associateBy { it.context().spanId }
110120

instrumented/integration/src/androidTest/kotlin/com/datadog/android/sdk/integration/network/wrappers/okhttp/OkHttpClientWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal class OkHttpClientWrapper(private val baseUrl: String) : HttpTestClient
3333

3434
val client = OkHttpClient.Builder()
3535
.addNetworkInterceptor(
36-
TracingInterceptor.Builder(HttpTestClientWrapper.Companion.tracedHosts)
36+
TracingInterceptor.Builder(HttpTestClientWrapper.tracedHosts)
3737
.setTracedRequestListener(spansCollector)
3838
.setTraceSampleRate(100f)
3939
.build()

integrations/dd-sdk-android-okhttp/api/apiSurface

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ open class com.datadog.android.okhttp.DatadogInterceptor : com.datadog.android.o
2525
constructor(List<String>)
2626
override fun build(): DatadogInterceptor
2727
fun setRumResourceAttributesProvider(com.datadog.android.rum.RumResourceAttributesProvider): Builder
28-
typealias TraceContextInjection = com.datadog.android.trace.TraceContextInjection
28+
DEPRECATED data class com.datadog.android.okhttp.TraceContext
29+
constructor(String, String, Int)
30+
DEPRECATED enum com.datadog.android.okhttp.TraceContextInjection
31+
- ALL
32+
- SAMPLED
2933
class com.datadog.android.okhttp.internal.OkHttpRequestInfoBuilder : com.datadog.android.api.instrumentation.network.HttpRequestInfoBuilder
3034
constructor(okhttp3.Request.Builder)
3135
override fun setUrl(String)
@@ -34,7 +38,10 @@ class com.datadog.android.okhttp.internal.OkHttpRequestInfoBuilder : com.datadog
3438
override fun removeHeader(String)
3539
override fun <T> addTag(Class<T>, T?)
3640
override fun build(): com.datadog.android.api.instrumentation.network.HttpRequestInfo
37-
typealias DeterministicTraceSampler = com.datadog.android.trace.DeterministicTraceSampler
41+
DEPRECATED open class com.datadog.android.okhttp.trace.DeterministicTraceSampler : com.datadog.android.core.sampling.DeterministicSampler<com.datadog.android.trace.api.span.DatadogSpan>
42+
constructor(() -> Float)
43+
constructor(Float)
44+
constructor(Double)
3845
fun okhttp3.Request.Builder.parentSpan(com.datadog.android.trace.api.span.DatadogSpan): okhttp3.Request.Builder
3946
interface com.datadog.android.okhttp.trace.TracedRequestListener
4047
fun onRequestIntercepted(okhttp3.Request, com.datadog.android.trace.api.span.DatadogSpan, okhttp3.Response?, Throwable?)
@@ -54,5 +61,6 @@ open class com.datadog.android.okhttp.trace.TracingInterceptor : okhttp3.Interce
5461
fun setTraceSampleRate(Float): R
5562
fun setTraceSampler(com.datadog.android.core.sampling.Sampler<com.datadog.android.trace.api.span.DatadogSpan>): R
5663
fun setTraceContextInjection(com.datadog.android.trace.TraceContextInjection): R
64+
DEPRECATED fun setTraceContextInjection(com.datadog.android.okhttp.TraceContextInjection): R
5765
fun set404ResourcesRedacted(Boolean): R
5866
abstract fun build(): T

integrations/dd-sdk-android-okhttp/api/dd-sdk-android-okhttp.api

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,28 @@ public final class com/datadog/android/okhttp/DatadogInterceptor$Builder : com/d
3535
public final fun setRumResourceAttributesProvider (Lcom/datadog/android/rum/RumResourceAttributesProvider;)Lcom/datadog/android/okhttp/DatadogInterceptor$Builder;
3636
}
3737

38+
public final class com/datadog/android/okhttp/TraceContext {
39+
public fun <init> (Ljava/lang/String;Ljava/lang/String;I)V
40+
public final fun component1 ()Ljava/lang/String;
41+
public final fun component2 ()Ljava/lang/String;
42+
public final fun component3 ()I
43+
public final fun copy (Ljava/lang/String;Ljava/lang/String;I)Lcom/datadog/android/okhttp/TraceContext;
44+
public static synthetic fun copy$default (Lcom/datadog/android/okhttp/TraceContext;Ljava/lang/String;Ljava/lang/String;IILjava/lang/Object;)Lcom/datadog/android/okhttp/TraceContext;
45+
public fun equals (Ljava/lang/Object;)Z
46+
public final fun getSamplingPriority ()I
47+
public final fun getSpanId ()Ljava/lang/String;
48+
public final fun getTraceId ()Ljava/lang/String;
49+
public fun hashCode ()I
50+
public fun toString ()Ljava/lang/String;
51+
}
52+
53+
public final class com/datadog/android/okhttp/TraceContextInjection : java/lang/Enum {
54+
public static final field ALL Lcom/datadog/android/okhttp/TraceContextInjection;
55+
public static final field SAMPLED Lcom/datadog/android/okhttp/TraceContextInjection;
56+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/okhttp/TraceContextInjection;
57+
public static fun values ()[Lcom/datadog/android/okhttp/TraceContextInjection;
58+
}
59+
3860
public final class com/datadog/android/okhttp/internal/OkHttpRequestInfoBuilder : com/datadog/android/api/instrumentation/network/HttpRequestInfoBuilder {
3961
public fun <init> (Lokhttp3/Request$Builder;)V
4062
public synthetic fun addHeader (Ljava/lang/String;[Ljava/lang/String;)Lcom/datadog/android/api/instrumentation/network/HttpRequestInfoBuilder;
@@ -51,6 +73,12 @@ public final class com/datadog/android/okhttp/internal/OkHttpRequestInfoBuilder
5173
public fun setUrl (Ljava/lang/String;)Lcom/datadog/android/okhttp/internal/OkHttpRequestInfoBuilder;
5274
}
5375

76+
public class com/datadog/android/okhttp/trace/DeterministicTraceSampler : com/datadog/android/core/sampling/DeterministicSampler {
77+
public fun <init> (D)V
78+
public fun <init> (F)V
79+
public fun <init> (Lkotlin/jvm/functions/Function0;)V
80+
}
81+
5482
public final class com/datadog/android/okhttp/trace/OkHttpRequestExtKt {
5583
public static final fun parentSpan (Lokhttp3/Request$Builder;Lcom/datadog/android/trace/api/span/DatadogSpan;)Lokhttp3/Request$Builder;
5684
}
@@ -70,6 +98,7 @@ public abstract class com/datadog/android/okhttp/trace/TracingInterceptor$BaseBu
7098
public abstract fun build ()Lcom/datadog/android/okhttp/trace/TracingInterceptor;
7199
public final fun set404ResourcesRedacted (Z)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
72100
public final fun setSdkInstanceName (Ljava/lang/String;)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
101+
public final fun setTraceContextInjection (Lcom/datadog/android/okhttp/TraceContextInjection;)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
73102
public final fun setTraceContextInjection (Lcom/datadog/android/trace/TraceContextInjection;)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
74103
public final fun setTraceSampleRate (F)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
75104
public final fun setTraceSampler (Lcom/datadog/android/core/sampling/Sampler;)Lcom/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.okhttp
8+
9+
import com.datadog.android.lint.InternalApi
10+
11+
/**
12+
* Deprecated. Use com.datadog.android.trace.internal.net.TraceContext instead."
13+
* The context of a trace to be propagated through the OkHttp requests for Datadog tracing.
14+
*/
15+
@InternalApi
16+
@Deprecated(
17+
"Use com.datadog.android.trace.internal.net.TraceContext instead.",
18+
replaceWith = ReplaceWith(
19+
"TraceContextInjection",
20+
imports = ["com.datadog.android.trace.internal.net.TraceContext"]
21+
)
22+
)
23+
// TODO RUM-13454 Remove with SDK v4 release.
24+
data class TraceContext(
25+
/**
26+
* The trace id.
27+
*/
28+
val traceId: String,
29+
/**
30+
* The span id.
31+
*/
32+
val spanId: String,
33+
/**
34+
* The sampling priority.
35+
*/
36+
val samplingPriority: Int
37+
)

0 commit comments

Comments
 (0)