Skip to content

Commit f124439

Browse files
committed
RUM-9902 - post review fixes
1 parent cb5cf60 commit f124439

File tree

12 files changed

+160
-26
lines changed

12 files changed

+160
-26
lines changed

features/dd-sdk-android-trace-api/api/apiSurface

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ interface com.datadog.android.trace.api.tracer.DatadogTracer
119119
fun activateSpan(com.datadog.android.trace.api.span.DatadogSpan, Boolean): com.datadog.android.trace.api.scope.DatadogScope?
120120
fun buildSpan(CharSequence): com.datadog.android.trace.api.span.DatadogSpanBuilder
121121
fun buildSpan(String, CharSequence): com.datadog.android.trace.api.span.DatadogSpanBuilder
122-
fun addScopeListener(com.datadog.android.trace.api.scope.DataScopeListener)
122+
fun addScopeListener(com.datadog.android.trace.api.scope.DatadogScopeListener)
123123
interface com.datadog.android.trace.api.tracer.DatadogTracerBuilder
124124
fun build(): DatadogTracer
125125
fun withTracingHeadersTypes(Set<com.datadog.android.trace.TracingHeaderType>): DatadogTracerBuilder

features/dd-sdk-android-trace-api/api/dd-sdk-android-trace-api.api

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ public final class com/datadog/android/trace/api/propagation/NoOpDatadogPropagat
7272
public fun inject (Lcom/datadog/android/trace/api/span/DatadogSpanContext;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V
7373
}
7474

75-
public abstract interface class com/datadog/android/trace/api/scope/DataScopeListener {
76-
public abstract fun afterScopeActivated ()V
77-
public abstract fun afterScopeClosed ()V
78-
}
79-
8075
public abstract interface class com/datadog/android/trace/api/scope/DatadogScope : java/io/Closeable {
8176
public abstract fun close ()V
8277
}
8378

79+
public abstract interface class com/datadog/android/trace/api/scope/DatadogScopeListener {
80+
public abstract fun afterScopeActivated ()V
81+
public abstract fun afterScopeClosed ()V
82+
}
83+
8484
public abstract interface class com/datadog/android/trace/api/span/DatadogSpan {
8585
public abstract fun addThrowable (Ljava/lang/Throwable;)V
8686
public abstract fun addThrowable (Ljava/lang/Throwable;B)V
@@ -175,7 +175,7 @@ public abstract interface class com/datadog/android/trace/api/tracer/DatadogTrac
175175
public abstract fun activateSpan (Lcom/datadog/android/trace/api/span/DatadogSpan;)Lcom/datadog/android/trace/api/scope/DatadogScope;
176176
public abstract fun activateSpan (Lcom/datadog/android/trace/api/span/DatadogSpan;Z)Lcom/datadog/android/trace/api/scope/DatadogScope;
177177
public abstract fun activeSpan ()Lcom/datadog/android/trace/api/span/DatadogSpan;
178-
public abstract fun addScopeListener (Lcom/datadog/android/trace/api/scope/DataScopeListener;)V
178+
public abstract fun addScopeListener (Lcom/datadog/android/trace/api/scope/DatadogScopeListener;)V
179179
public abstract fun buildSpan (Ljava/lang/CharSequence;)Lcom/datadog/android/trace/api/span/DatadogSpanBuilder;
180180
public abstract fun buildSpan (Ljava/lang/String;Ljava/lang/CharSequence;)Lcom/datadog/android/trace/api/span/DatadogSpanBuilder;
181181
public abstract fun propagate ()Lcom/datadog/android/trace/api/propagation/DatadogPropagation;
@@ -201,7 +201,7 @@ public final class com/datadog/android/trace/api/tracer/NoOpDatadogTracer : com/
201201
public fun activateSpan (Lcom/datadog/android/trace/api/span/DatadogSpan;)Lcom/datadog/android/trace/api/scope/DatadogScope;
202202
public fun activateSpan (Lcom/datadog/android/trace/api/span/DatadogSpan;Z)Lcom/datadog/android/trace/api/scope/DatadogScope;
203203
public fun activeSpan ()Lcom/datadog/android/trace/api/span/DatadogSpan;
204-
public fun addScopeListener (Lcom/datadog/android/trace/api/scope/DataScopeListener;)V
204+
public fun addScopeListener (Lcom/datadog/android/trace/api/scope/DatadogScopeListener;)V
205205
public fun buildSpan (Ljava/lang/CharSequence;)Lcom/datadog/android/trace/api/span/DatadogSpanBuilder;
206206
public fun buildSpan (Ljava/lang/String;Ljava/lang/CharSequence;)Lcom/datadog/android/trace/api/span/DatadogSpanBuilder;
207207
public fun propagate ()Lcom/datadog/android/trace/api/propagation/DatadogPropagation;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package com.datadog.android.trace.api.scope;
88

99
/** Hooks for scope activation */
10-
public interface DataScopeListener {
10+
public interface DatadogScopeListener {
1111
/**
1212
* Called just after a scope becomes the active scope.
1313
* <p>May be called multiple times. When a scope is initially created, or after a child scope is

features/dd-sdk-android-trace-api/src/main/kotlin/com/datadog/android/trace/api/tracer/DatadogTracer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package com.datadog.android.trace.api.tracer
77

88
import com.datadog.android.trace.api.propagation.DatadogPropagation
99
import com.datadog.android.trace.api.propagation.NoOpDatadogPropagation
10-
import com.datadog.android.trace.api.scope.DataScopeListener
10+
import com.datadog.android.trace.api.scope.DatadogScopeListener
1111
import com.datadog.android.trace.api.scope.DatadogScope
1212
import com.datadog.android.trace.api.span.DatadogSpan
1313
import com.datadog.android.trace.api.span.DatadogSpanBuilder
@@ -73,8 +73,8 @@ interface DatadogTracer {
7373
/**
7474
* Adds a listener to be notified when a scope is activated or closed.
7575
*
76-
* @param dataScopeListener The listener to be added. It defines the actions
76+
* @param scopeListener The listener to be added. It defines the actions
7777
* to be executed after a scope is activated or closed.
7878
*/
79-
fun addScopeListener(dataScopeListener: DataScopeListener)
79+
fun addScopeListener(scopeListener: DatadogScopeListener)
8080
}

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/DatadogPropagationAdapter.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,33 @@
66

77
package com.datadog.android.trace.internal
88

9+
import com.datadog.android.api.InternalLogger
910
import com.datadog.android.trace.api.propagation.DatadogPropagation
1011
import com.datadog.android.trace.api.span.DatadogSpanContext
1112
import com.datadog.trace.bootstrap.instrumentation.api.AgentPropagation
13+
import kotlin.reflect.KClass
1214

13-
internal class DatadogPropagationAdapter(private val delegate: AgentPropagation) : DatadogPropagation {
15+
internal class DatadogPropagationAdapter(
16+
private val internalLogger: InternalLogger,
17+
private val delegate: AgentPropagation
18+
) : DatadogPropagation {
1419

1520
override fun <C> inject(
1621
context: DatadogSpanContext,
1722
carrier: C,
1823
setter: (carrier: C, key: String, value: String) -> Unit
1924
) {
20-
if (context !is DatadogSpanContextAdapter) return
25+
if (context !is DatadogSpanContextAdapter) {
26+
internalLogger.log(
27+
InternalLogger.Level.ERROR,
28+
targets = listOf(
29+
InternalLogger.Target.MAINTAINER,
30+
InternalLogger.Target.USER,
31+
),
32+
{ constructErrorMessage(context::class) }
33+
)
34+
return
35+
}
2136
delegate.inject(context.delegate, carrier, setter)
2237
}
2338

@@ -28,4 +43,7 @@ internal class DatadogPropagationAdapter(private val delegate: AgentPropagation)
2843
return delegate.extract(carrier) { car, cls -> getter(car, cls::accept) }
2944
?.let { DatadogSpanContextAdapter(it) }
3045
}
46+
47+
private fun constructErrorMessage(klass: KClass<*>) = "DatadogPropagationAdapter supports only" +
48+
" DatadogSpanContextAdapter instancies for injection but ${klass.simpleName} is given"
3149
}

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/DatadogScopeListenerAdapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
package com.datadog.android.trace.internal
77

8-
import com.datadog.android.trace.api.scope.DataScopeListener
8+
import com.datadog.android.trace.api.scope.DatadogScopeListener
99
import com.datadog.trace.api.scopemanager.ScopeListener
1010

1111
internal class DatadogScopeListenerAdapter(
12-
internal val delegate: DataScopeListener
12+
internal val delegate: DatadogScopeListener
1313
) : ScopeListener {
1414
override fun afterScopeClosed() = delegate.afterScopeClosed()
1515
override fun afterScopeActivated() = delegate.afterScopeActivated()

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/DatadogTracerAdapter.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
*/
66
package com.datadog.android.trace.internal
77

8+
import com.datadog.android.api.InternalLogger
89
import com.datadog.android.api.context.DatadogContext
910
import com.datadog.android.api.feature.Feature
1011
import com.datadog.android.api.feature.FeatureSdkCore
1112
import com.datadog.android.internal.concurrent.CompletableFuture
1213
import com.datadog.android.trace.api.propagation.DatadogPropagation
13-
import com.datadog.android.trace.api.scope.DataScopeListener
1414
import com.datadog.android.trace.api.scope.DatadogScope
15+
import com.datadog.android.trace.api.scope.DatadogScopeListener
1516
import com.datadog.android.trace.api.span.DatadogSpan
1617
import com.datadog.android.trace.api.span.DatadogSpanBuilder
1718
import com.datadog.android.trace.api.tracer.DatadogTracer
@@ -24,6 +25,9 @@ internal class DatadogTracerAdapter(
2425
internal val bundleWithRumEnabled: Boolean
2526
) : DatadogTracer {
2627

28+
private val internalLogger: InternalLogger
29+
get() = sdkCore.internalLogger
30+
2731
override fun buildSpan(instrumentationName: String, spanName: CharSequence): DatadogSpanBuilder = wrapSpan(
2832
delegate.buildSpan(instrumentationName, spanName)
2933
)
@@ -50,8 +54,8 @@ internal class DatadogTracerAdapter(
5054
}
5155
}
5256

53-
override fun addScopeListener(dataScopeListener: DataScopeListener) {
54-
delegate.addScopeListener(DatadogScopeListenerAdapter(dataScopeListener))
57+
override fun addScopeListener(scopeListener: DatadogScopeListener) {
58+
delegate.addScopeListener(DatadogScopeListenerAdapter(scopeListener))
5559
}
5660

5761
override fun activeSpan(): DatadogSpan? = delegate.activeSpan()?.let(::DatadogSpanAdapter)
@@ -70,5 +74,5 @@ internal class DatadogTracerAdapter(
7074
}
7175
}
7276

73-
override fun propagate(): DatadogPropagation = DatadogPropagationAdapter(delegate.propagate())
77+
override fun propagate(): DatadogPropagation = DatadogPropagationAdapter(internalLogger, delegate.propagate())
7478
}

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/DatadogTracerBuilderAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal class DatadogTracerBuilderAdapter(
3434
override fun build(): DatadogTracer {
3535
val coreTracer = delegate.withProperties(properties()).build()
3636
val datadogTracer = DatadogTracerAdapter(sdkCore, coreTracer, bundleWithRumEnabled)
37-
datadogTracer.addScopeListener(TracePropagationDataScopeListener(sdkCore, datadogTracer))
37+
datadogTracer.addScopeListener(TracePropagationScopeListener(sdkCore, datadogTracer))
3838

3939
return datadogTracer
4040
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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+
package com.datadog.android.trace.internal
7+
8+
import com.datadog.android.api.InternalLogger
9+
import com.datadog.android.trace.api.span.DatadogSpanContext
10+
import com.datadog.android.trace.api.trace.DatadogTraceId
11+
import com.datadog.android.trace.utils.verifyLog
12+
import com.datadog.trace.bootstrap.instrumentation.api.AgentPropagation
13+
import com.datadog.trace.bootstrap.instrumentation.api.AgentSpan
14+
import org.junit.jupiter.api.BeforeEach
15+
import org.junit.jupiter.api.Test
16+
import org.junit.jupiter.api.extension.ExtendWith
17+
import org.junit.jupiter.api.extension.Extensions
18+
import org.mockito.Mock
19+
import org.mockito.junit.jupiter.MockitoExtension
20+
import org.mockito.kotlin.any
21+
import org.mockito.kotlin.doReturn
22+
import org.mockito.kotlin.eq
23+
import org.mockito.kotlin.mock
24+
import org.mockito.kotlin.verify
25+
26+
@Extensions(
27+
ExtendWith(MockitoExtension::class)
28+
)
29+
internal class DatadogPropagationAdapterTest {
30+
31+
private lateinit var testedPropagation: DatadogPropagationAdapter
32+
33+
@Mock
34+
lateinit var mockAgentPropagation: AgentPropagation
35+
36+
@Mock
37+
lateinit var mockInternalLogger: InternalLogger
38+
39+
@Mock
40+
lateinit var mockAgentSpanContext: AgentSpan.Context
41+
42+
@BeforeEach
43+
fun `set up`() {
44+
testedPropagation = DatadogPropagationAdapter(
45+
mockInternalLogger,
46+
mockAgentPropagation
47+
)
48+
}
49+
50+
@Test
51+
fun `M report an error W inject { unsupported DatadogSpanContext implementation provided }`() {
52+
// Given
53+
val carrier = Any()
54+
55+
// When
56+
testedPropagation.inject(UnsupportedDatadogSpanContextImplementation(), carrier) { _, _, _ -> }
57+
58+
// Then
59+
mockInternalLogger.verifyLog(
60+
InternalLogger.Level.ERROR,
61+
listOf(
62+
InternalLogger.Target.MAINTAINER,
63+
InternalLogger.Target.USER
64+
),
65+
"DatadogPropagationAdapter supports only DatadogSpanContextAdapter instancies for injection " +
66+
"but UnsupportedDatadogSpanContextImplementation is given"
67+
68+
)
69+
}
70+
71+
@Test
72+
fun `M delegate to AgentPropagation W inject `() {
73+
// Given
74+
val carrier = Any()
75+
val mockContext: DatadogSpanContextAdapter = mock {
76+
on { mock.delegate } doReturn mockAgentSpanContext
77+
}
78+
79+
// When
80+
val setter: (carrier: Any, key: String, value: String) -> Unit = { _, _, _ -> }
81+
testedPropagation.inject(mockContext, carrier, setter)
82+
83+
// Then
84+
verify(mockAgentPropagation).inject(eq(mockAgentSpanContext), any<Any>(), any())
85+
}
86+
87+
@Test
88+
fun `M delegate to AgentPropagation W extract `() {
89+
// Given
90+
val carrier = Any()
91+
val getter = { _: Any, _: (String, String) -> Boolean -> }
92+
// When
93+
testedPropagation.extract(carrier, getter)
94+
95+
// Then
96+
verify(mockAgentPropagation).extract(eq(carrier), any())
97+
}
98+
99+
private class UnsupportedDatadogSpanContextImplementation : DatadogSpanContext {
100+
override val traceId: DatadogTraceId
101+
get() = TODO("Not yet implemented")
102+
override val spanId: Long
103+
get() = TODO("Not yet implemented")
104+
override val samplingPriority: Int
105+
get() = TODO("Not yet implemented")
106+
override val tags: Map<String?, Any?>
107+
get() = TODO("Not yet implemented")
108+
109+
override fun setSamplingPriority(samplingPriority: Int): Boolean = TODO("Not yet implemented")
110+
override fun setMetric(key: CharSequence?, value: Double): Unit = TODO("Not yet implemented")
111+
}
112+
}

features/dd-sdk-android-trace/src/test/kotlin/com/datadog/android/trace/internal/DatadogScopeListenerAdapterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
package com.datadog.android.trace.internal
77

8-
import com.datadog.android.trace.api.scope.DataScopeListener
8+
import com.datadog.android.trace.api.scope.DatadogScopeListener
99
import org.junit.jupiter.api.Test
1010
import org.junit.jupiter.api.extension.ExtendWith
1111
import org.junit.jupiter.api.extension.Extensions
@@ -19,7 +19,7 @@ import org.mockito.kotlin.verify
1919
class DatadogScopeListenerAdapterTest {
2020

2121
@Mock
22-
lateinit var delegate: DataScopeListener
22+
lateinit var delegate: DatadogScopeListener
2323

2424
@Test
2525
fun `M delegate afterScopeClosed W afterScopeClosed is called`() {

0 commit comments

Comments
 (0)