@@ -16,8 +16,6 @@ import com.datadog.android.sdk.rules.HandledRequest
1616import com.datadog.android.sdk.rules.MockServerActivityTestRule
1717import com.datadog.android.sdk.utils.isLogsUrl
1818import com.datadog.android.sdk.utils.isTracesUrl
19- import com.datadog.android.trace.api.resolveMeta
20- import com.datadog.android.trace.api.resolveMetrics
2119import com.datadog.android.trace.api.span.DatadogSpan
2220import com.datadog.android.trace.internal.DatadogTracingToolkit
2321import com.datadog.tools.unit.assertj.JsonObjectAssert.Companion.assertThat
@@ -78,7 +76,7 @@ internal abstract class TracesTest {
7876 val json = sentSpansObjects.first { spanJson ->
7977 val leastSignificantTraceId = spanJson.get(TRACE_ID_KEY ).asString
8078 val mostSignificantTraceId = spanJson
81- .getAsJsonObject(" meta " )
79+ .getAsJsonObject(META_KEY )
8280 .getAsJsonPrimitive(MOST_SIGNIFICANT_64_BITS_TRACE_ID_KEY ).asString
8381
8482 leastSignificantTraceId == span.leastSignificant64BitsTraceId() &&
@@ -119,8 +117,6 @@ internal abstract class TracesTest {
119117 }
120118
121119 private fun assertMatches (jsonObject : JsonObject , span : DatadogSpan , context : DatadogContext ) {
122- val meta = span.resolveMeta(context)
123- val metrics = span.resolveMetrics()
124120 assertThat(jsonObject)
125121 .hasField(SERVICE_NAME_KEY , span.serviceName)
126122 .hasField(TRACE_ID_KEY , span.leastSignificant64BitsTraceId())
@@ -140,11 +136,42 @@ internal abstract class TracesTest {
140136 .hasField(DURATION_KEY , span.durationNano)
141137 .hasField(RESOURCE_KEY , span.resourceName.orEmpty())
142138 .hasField(OPERATION_NAME_KEY , span.operationName)
143- .hasField(META_KEY , meta)
144- .hasField(METRICS_KEY , metrics)
139+ .hasField(ERROR_KEY , 0L )
140+ .hasField(TYPE_KEY , DEFAULT_SPAN_TYPE )
141+
145142 val metaObject = jsonObject.getAsJsonObject(META_KEY )
146143 assertThat(metaObject)
147144 .hasField(MOST_SIGNIFICANT_64_BITS_TRACE_ID_KEY , span.mostSignificant64BitsTraceId())
145+ .hasField(VERSION_KEY , context.version)
146+ .hasField(VARIANT_KEY , context.variant)
147+ .hasField(DD_KEY ) {
148+ hasField(SOURCE_KEY , context.source)
149+ }
150+ .hasField(SPAN_KEY ) {
151+ hasField(SPAN_KIND_KEY , DEFAULT_SPAN_KIND )
152+ }
153+ .hasField(TRACER_KEY ) {
154+ hasField(TRACER_VERSION_KEY , context.sdkVersion)
155+ }
156+ .hasField(USR_KEY ) { isEmpty() }
157+ .hasField(DEVICE_KEY ) {
158+ hasField(DEVICE_NAME_KEY , context.deviceInfo.deviceName)
159+ hasField(DEVICE_MODEL_KEY , context.deviceInfo.deviceModel)
160+ hasField(DEVICE_BRAND_KEY , context.deviceInfo.deviceBrand)
161+ hasField(DEVICE_ARCHITECTURE_KEY , context.deviceInfo.architecture)
162+ }
163+ .hasField(OS_KEY ) {
164+ hasField(OS_NAME_KEY , context.deviceInfo.osName)
165+ hasField(OS_VERSION_KEY , context.deviceInfo.osVersion)
166+ hasField(OS_VERSION_MAJOR_KEY , context.deviceInfo.osMajorVersion)
167+ }
168+
169+ val metricsObject = jsonObject.getAsJsonObject(METRICS_KEY )
170+ assertThat(metricsObject).isNotNull
171+
172+ if (span.parentSpanId == 0L ) {
173+ assertThat(metricsObject).hasField(TOP_LEVEL_KEY , 1L )
174+ }
148175 }
149176
150177 private fun tracesPayloadToJsonArray (payload : String ): List <JsonElement > {
@@ -160,17 +187,81 @@ internal abstract class TracesTest {
160187 }
161188
162189 companion object {
163- const val START_TIMESTAMP_KEY = " start"
164- const val DURATION_KEY = " duration"
165- const val SERVICE_NAME_KEY = " service"
190+ // region SpanEvent
191+
166192 const val TRACE_ID_KEY = " trace_id"
167- const val MOST_SIGNIFICANT_64_BITS_TRACE_ID_KEY = " _dd.p.id"
168193 const val SPAN_ID_KEY = " span_id"
169194 const val PARENT_ID_KEY = " parent_id"
170195 const val RESOURCE_KEY = " resource"
171196 const val OPERATION_NAME_KEY = " name"
197+ const val SERVICE_NAME_KEY = " service"
198+ const val DURATION_KEY = " duration"
199+ const val START_TIMESTAMP_KEY = " start"
200+ const val ERROR_KEY = " error"
201+ const val TYPE_KEY = " type"
172202 const val META_KEY = " meta"
173203 const val METRICS_KEY = " metrics"
204+ const val DEFAULT_SPAN_TYPE = " custom"
205+
206+ // endregion
207+
208+ // region SpanEvent.Meta
209+
210+ const val VERSION_KEY = " version"
211+ const val DD_KEY = " _dd"
212+ const val SPAN_KEY = " span"
213+ const val TRACER_KEY = " tracer"
214+ const val USR_KEY = " usr"
215+ const val DEVICE_KEY = " device"
216+ const val OS_KEY = " os"
217+
218+ const val MOST_SIGNIFICANT_64_BITS_TRACE_ID_KEY = " _dd.p.id"
219+ const val VARIANT_KEY = " variant"
220+
221+ // endregion
222+
223+ // region SpanEvent.Dd
224+
225+ const val SOURCE_KEY = " source"
226+
227+ // endregion
228+
229+ // region SpanEvent.Span
230+
231+ const val SPAN_KIND_KEY = " kind"
232+ const val DEFAULT_SPAN_KIND = " client"
233+
234+ // endregion
235+
236+ // region SpanEvent.Tracer
237+
238+ const val TRACER_VERSION_KEY = " version"
239+
240+ // endregion
241+
242+ // region SpanEvent.Device
243+
244+ const val DEVICE_NAME_KEY = " name"
245+ const val DEVICE_MODEL_KEY = " model"
246+ const val DEVICE_BRAND_KEY = " brand"
247+ const val DEVICE_ARCHITECTURE_KEY = " architecture"
248+
249+ // endregion
250+
251+ // region SpanEvent.Os
252+
253+ const val OS_NAME_KEY = " name"
254+ const val OS_VERSION_KEY = " version"
255+ const val OS_VERSION_MAJOR_KEY = " version_major"
256+
257+ // endregion
258+
259+ // region SpanEvent.Metrics
260+
261+ const val TOP_LEVEL_KEY = " _top_level"
262+
263+ // endregion
264+
174265 internal val INITIAL_WAIT_MS = TimeUnit .SECONDS .toMillis(60 )
175266
176267 private const val TAG_STATUS = " status"
0 commit comments