@@ -316,6 +316,118 @@ func TestEventsOverLimit(t *testing.T) {
316316 }
317317}
318318
319+ func TestAddLinks (t * testing.T ) {
320+ span := startSpan ()
321+ k1v1 := key .New ("key1" ).String ("value1" )
322+ k2v2 := key .New ("key2" ).String ("value2" )
323+
324+ sc1 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x1 }, SpanID : 0x3 }
325+ sc2 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x2 }, SpanID : 0x3 }
326+
327+ link1 := apitrace.Link {SpanContext : sc1 , Attributes : []core.KeyValue {k1v1 }}
328+ link2 := apitrace.Link {SpanContext : sc2 , Attributes : []core.KeyValue {k2v2 }}
329+ span .AddLink (link1 )
330+ span .AddLink (link2 )
331+
332+ got , err := endSpan (span )
333+ if err != nil {
334+ t .Fatal (err )
335+ }
336+
337+ want := & SpanData {
338+ SpanContext : core.SpanContext {
339+ TraceID : tid ,
340+ TraceOptions : 0x1 ,
341+ },
342+ ParentSpanID : sid ,
343+ Name : "span0" ,
344+ HasRemoteParent : true ,
345+ Links : []apitrace.Link {
346+ {SpanContext : sc1 , Attributes : []core.KeyValue {k1v1 }},
347+ {SpanContext : sc2 , Attributes : []core.KeyValue {k2v2 }},
348+ },
349+ }
350+ if diff := cmp .Diff (got , want , cmp .AllowUnexported (Event {})); diff != "" {
351+ t .Errorf ("AddLink: -got +want %s" , diff )
352+ }
353+ }
354+
355+ func TestLinks (t * testing.T ) {
356+ span := startSpan ()
357+ k1v1 := key .New ("key1" ).String ("value1" )
358+ k2v2 := key .New ("key2" ).String ("value2" )
359+ k3v3 := key .New ("key3" ).String ("value3" )
360+
361+ sc1 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x1 }, SpanID : 0x3 }
362+ sc2 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x2 }, SpanID : 0x3 }
363+
364+ span .Link (sc1 , key .New ("key1" ).String ("value1" ))
365+ span .Link (sc2 ,
366+ key .New ("key2" ).String ("value2" ),
367+ key .New ("key3" ).String ("value3" ),
368+ )
369+ got , err := endSpan (span )
370+ if err != nil {
371+ t .Fatal (err )
372+ }
373+
374+ want := & SpanData {
375+ SpanContext : core.SpanContext {
376+ TraceID : tid ,
377+ TraceOptions : 0x1 ,
378+ },
379+ ParentSpanID : sid ,
380+ Name : "span0" ,
381+ HasRemoteParent : true ,
382+ Links : []apitrace.Link {
383+ {SpanContext : sc1 , Attributes : []core.KeyValue {k1v1 }},
384+ {SpanContext : sc2 , Attributes : []core.KeyValue {k2v2 , k3v3 }},
385+ },
386+ }
387+ if diff := cmp .Diff (got , want , cmp .AllowUnexported (Event {})); diff != "" {
388+ t .Errorf ("Link: -got +want %s" , diff )
389+ }
390+ }
391+
392+ func TestLinksOverLimit (t * testing.T ) {
393+ cfg := Config {MaxLinksPerSpan : 2 }
394+ ApplyConfig (cfg )
395+ sc1 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x1 }, SpanID : 0x3 }
396+ sc2 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x2 }, SpanID : 0x3 }
397+ sc3 := core.SpanContext {TraceID : core.TraceID {High : 0x1 , Low : 0x3 }, SpanID : 0x3 }
398+
399+ span := startSpan ()
400+ k2v2 := key .New ("key2" ).String ("value2" )
401+ k3v3 := key .New ("key3" ).String ("value3" )
402+
403+ span .Link (sc1 , key .New ("key1" ).String ("value1" ))
404+ span .Link (sc2 , key .New ("key2" ).String ("value2" ))
405+ span .Link (sc3 , key .New ("key3" ).String ("value3" ))
406+
407+ got , err := endSpan (span )
408+ if err != nil {
409+ t .Fatal (err )
410+ }
411+
412+ want := & SpanData {
413+ SpanContext : core.SpanContext {
414+ TraceID : tid ,
415+ TraceOptions : 0x1 ,
416+ },
417+ ParentSpanID : sid ,
418+ Name : "span0" ,
419+ Links : []apitrace.Link {
420+ {SpanContext : sc2 , Attributes : []core.KeyValue {k2v2 }},
421+ {SpanContext : sc3 , Attributes : []core.KeyValue {k3v3 }},
422+ },
423+ DroppedLinkCount : 1 ,
424+ HasRemoteParent : true ,
425+ }
426+ if diff := cmp .Diff (got , want , cmp .AllowUnexported (Event {})); diff != "" {
427+ t .Errorf ("Link over limit: -got +want %s" , diff )
428+ }
429+ }
430+
319431func TestSetSpanName (t * testing.T ) {
320432 want := "SpanName-1"
321433 _ , span := apitrace .GlobalTracer ().Start (context .Background (), want ,
0 commit comments