Skip to content

Commit 7c0e814

Browse files
committed
Add test
1 parent d69f077 commit 7c0e814

File tree

2 files changed

+98
-2
lines changed
  • instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi
  • testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal

2 files changed

+98
-2
lines changed

instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/TracerTest.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020
import io.opentelemetry.api.GlobalOpenTelemetry;
2121
import io.opentelemetry.api.common.Attributes;
2222
import io.opentelemetry.api.trace.Span;
23+
import io.opentelemetry.api.trace.SpanContext;
2324
import io.opentelemetry.api.trace.Tracer;
2425
import io.opentelemetry.context.Context;
2526
import io.opentelemetry.context.Scope;
2627
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
2728
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
2829
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
30+
import io.opentelemetry.sdk.trace.data.LinkData;
2931
import io.opentelemetry.sdk.trace.data.StatusData;
3032
import java.io.PrintWriter;
3133
import java.io.StringWriter;
@@ -322,4 +324,98 @@ void testTracerBuilder() {
322324
.hasInstrumentationScopeInfo(
323325
InstrumentationScopeInfo.builder("test").setVersion("1.2.3").build())));
324326
}
327+
328+
@Test
329+
@DisplayName("capture span link without attributes")
330+
void captureSpanLinkWithoutAttributes() {
331+
// When
332+
Tracer tracer = GlobalOpenTelemetry.getTracer("test");
333+
Span linkedSpan = tracer.spanBuilder("linked").startSpan();
334+
linkedSpan.end();
335+
SpanContext linkedSpanContext = linkedSpan.getSpanContext();
336+
337+
Span testSpan =
338+
tracer.spanBuilder("test").addLink(linkedSpanContext).startSpan();
339+
testSpan.end();
340+
341+
// Then
342+
testing.waitAndAssertTraces(
343+
trace ->
344+
trace.hasSpansSatisfyingExactly(
345+
span -> span.hasName("linked").hasNoParent().hasTotalAttributeCount(0)),
346+
trace ->
347+
trace.hasSpansSatisfyingExactly(
348+
span ->
349+
span.hasName("test")
350+
.hasNoParent()
351+
.hasTotalAttributeCount(0)
352+
.hasLinksSatisfying(
353+
links -> {
354+
assertThat(links).hasSize(1);
355+
LinkData link = links.get(0);
356+
// Compare SpanContext fields individually due to classloader isolation
357+
assertThat(link.getSpanContext().getTraceId())
358+
.isEqualTo(linkedSpanContext.getTraceId());
359+
assertThat(link.getSpanContext().getSpanId())
360+
.isEqualTo(linkedSpanContext.getSpanId());
361+
assertThat(link.getSpanContext().getTraceFlags().asByte())
362+
.isEqualTo(linkedSpanContext.getTraceFlags().asByte());
363+
assertThat(link.getSpanContext().isRemote())
364+
.isEqualTo(linkedSpanContext.isRemote());
365+
assertThat(link.getAttributes().size()).isEqualTo(0);
366+
})));
367+
} @Test
368+
@DisplayName("capture span link with attributes")
369+
void captureSpanLinkWithAttributes() {
370+
// When
371+
Tracer tracer = GlobalOpenTelemetry.getTracer("test");
372+
Span linkedSpan = tracer.spanBuilder("linked").startSpan();
373+
linkedSpan.end();
374+
SpanContext linkedSpanContext = linkedSpan.getSpanContext();
375+
376+
Attributes linkAttributes =
377+
Attributes.builder()
378+
.put("string", "1")
379+
.put("long", 2L)
380+
.put("double", 3.0)
381+
.put("boolean", true)
382+
.build();
383+
Span testSpan =
384+
tracer
385+
.spanBuilder("test")
386+
.addLink(linkedSpanContext, linkAttributes)
387+
.startSpan();
388+
testSpan.end();
389+
390+
// Then
391+
testing.waitAndAssertTraces(
392+
trace ->
393+
trace.hasSpansSatisfyingExactly(
394+
span -> span.hasName("linked").hasNoParent().hasTotalAttributeCount(0)),
395+
trace ->
396+
trace.hasSpansSatisfyingExactly(
397+
span ->
398+
span.hasName("test")
399+
.hasNoParent()
400+
.hasTotalAttributeCount(0)
401+
.hasLinksSatisfying(
402+
links -> {
403+
assertThat(links).hasSize(1);
404+
LinkData link = links.get(0);
405+
assertThat(link.getSpanContext().getTraceId())
406+
.isEqualTo(linkedSpanContext.getTraceId());
407+
assertThat(link.getSpanContext().getSpanId())
408+
.isEqualTo(linkedSpanContext.getSpanId());
409+
assertThat(link.getSpanContext().getTraceFlags().asByte())
410+
.isEqualTo(linkedSpanContext.getTraceFlags().asByte());
411+
assertThat(link.getSpanContext().isRemote())
412+
.isEqualTo(linkedSpanContext.isRemote());
413+
assertThat(link.getTotalAttributeCount()).isEqualTo(4);
414+
Attributes attrs = link.getAttributes();
415+
assertThat(attrs.get(stringKey("string"))).isEqualTo("1");
416+
assertThat(attrs.get(longKey("long"))).isEqualTo(2L);
417+
assertThat(attrs.get(doubleKey("double"))).isEqualTo(3.0);
418+
assertThat(attrs.get(booleanKey("boolean"))).isEqualTo(true);
419+
})));
420+
}
325421
}

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/TelemetryConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public static List<SpanData> getSpanData(Collection<ResourceSpans> allResourceSp
109109
SpanContext.create(
110110
traceId,
111111
bytesToHex(span.getSpanId().toByteArray()),
112-
TraceFlags.getDefault(),
112+
TraceFlags.fromByte((byte) span.getFlags()),
113113
extractTraceState(span.getTraceState())))
114114
// TODO is it ok to use default trace flags and default trace state here?
115115
.setParentSpanContext(
@@ -152,7 +152,7 @@ public static List<SpanData> getSpanData(Collection<ResourceSpans> allResourceSp
152152
SpanContext.create(
153153
bytesToHex(link.getTraceId().toByteArray()),
154154
bytesToHex(link.getSpanId().toByteArray()),
155-
TraceFlags.getDefault(),
155+
TraceFlags.fromByte((byte) link.getFlags()),
156156
extractTraceState(link.getTraceState())),
157157
fromProto(link.getAttributesList()),
158158
link.getDroppedAttributesCount() + link.getAttributesCount()))

0 commit comments

Comments
 (0)