55
66package io .opentelemetry .opencensusshim ;
77
8+ import static io .opentelemetry .api .common .AttributeKey .stringKey ;
89import static org .mockito .ArgumentMatchers .any ;
910import static org .mockito .ArgumentMatchers .anyString ;
1011import static org .mockito .Mockito .never ;
1112import static org .mockito .Mockito .verify ;
1213import static org .mockito .Mockito .when ;
1314
15+ import io .opencensus .trace .AttributeValue ;
16+ import io .opencensus .trace .Link ;
17+ import io .opencensus .trace .SpanId ;
1418import io .opencensus .trace .Status ;
19+ import io .opencensus .trace .TraceId ;
20+ import io .opencensus .trace .TraceOptions ;
21+ import io .opencensus .trace .Tracestate ;
22+ import io .opentelemetry .api .common .Attributes ;
1523import io .opentelemetry .api .trace .Span ;
1624import io .opentelemetry .api .trace .SpanContext ;
1725import io .opentelemetry .api .trace .StatusCode ;
26+ import io .opentelemetry .api .trace .TraceFlags ;
27+ import io .opentelemetry .api .trace .TraceState ;
28+ import java .util .Collections ;
1829import org .junit .jupiter .api .Test ;
1930import org .junit .jupiter .api .extension .ExtendWith ;
2031import org .mockito .Mock ;
2637@ MockitoSettings (strictness = Strictness .LENIENT )
2738class OpenTelemetrySpanImplTest {
2839
40+ private static final String TRACE_ID = "0123456789abcdef0123456789abcdef" ;
41+ private static final String SPAN_ID = "fedcba9876543210" ;
42+
2943 @ Mock private Span otelSpan ;
3044
3145 private OpenTelemetrySpanImpl shimSpan () {
@@ -47,4 +61,35 @@ void setStatus_withoutDescription_setsCodeOnly() {
4761 verify (otelSpan ).setStatus (StatusCode .OK );
4862 verify (otelSpan , never ()).setStatus (any (StatusCode .class ), anyString ());
4963 }
64+
65+ @ Test
66+ void addLink_delegatesToOtelSpan () {
67+ shimSpan ().addLink (Link .fromSpanContext (ocSpanContext (), Link .Type .CHILD_LINKED_SPAN ));
68+
69+ verify (otelSpan ).addLink (expectedOtelSpanContext (), Attributes .empty ());
70+ }
71+
72+ @ Test
73+ void addLink_mapsAttributes () {
74+ shimSpan ()
75+ .addLink (
76+ Link .fromSpanContext (
77+ ocSpanContext (),
78+ Link .Type .PARENT_LINKED_SPAN ,
79+ Collections .singletonMap ("key" , AttributeValue .stringAttributeValue ("value" ))));
80+
81+ verify (otelSpan ).addLink (expectedOtelSpanContext (), Attributes .of (stringKey ("key" ), "value" ));
82+ }
83+
84+ private static io .opencensus .trace .SpanContext ocSpanContext () {
85+ return io .opencensus .trace .SpanContext .create (
86+ TraceId .fromLowerBase16 (TRACE_ID ),
87+ SpanId .fromLowerBase16 (SPAN_ID ),
88+ TraceOptions .DEFAULT ,
89+ Tracestate .builder ().build ());
90+ }
91+
92+ private static SpanContext expectedOtelSpanContext () {
93+ return SpanContext .create (TRACE_ID , SPAN_ID , TraceFlags .getDefault (), TraceState .getDefault ());
94+ }
5095}
0 commit comments