github.com/xmidt-org/webpa-common@v1.11.9/tracing/spanned_test.go (about) 1 package tracing 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestSpans(t *testing.T) { 11 var ( 12 assert = assert.New(t) 13 spanner = NewSpanner() 14 testSpans = []Span{ 15 spanner.Start("first")(nil), 16 spanner.Start("second")(errors.New("expected error")), 17 spanner.Start("third")(errors.New("another expected error")), 18 } 19 20 testData = []struct { 21 container interface{} 22 expectedSpans []Span 23 expectedOk bool 24 }{ 25 {nil, nil, false}, 26 {"this is not a container", nil, false}, 27 {testSpans[0], []Span{testSpans[0]}, true}, 28 {testSpans, testSpans, true}, 29 {NopMergeable(testSpans), testSpans, true}, 30 {NopMergeable{}, NopMergeable{}, true}, 31 } 32 ) 33 34 for _, record := range testData { 35 t.Logf("%#v", record) 36 37 actual, ok := Spans(record.container) 38 assert.Equal(record.expectedSpans, actual) 39 assert.Equal(record.expectedOk, ok) 40 } 41 } 42 43 func TestMergeSpans(t *testing.T) { 44 var ( 45 assert = assert.New(t) 46 spanner = NewSpanner() 47 testSpans = []Span{ 48 spanner.Start("first")(nil), 49 spanner.Start("second")(errors.New("expected error")), 50 spanner.Start("third")(errors.New("another expected error")), 51 spanner.Start("fourth")(nil), 52 spanner.Start("fifth")(errors.New("yet another expected error")), 53 } 54 55 emptyContainer = NopMergeable{} 56 nonEmptyContainer = NopMergeable(testSpans[3:]) 57 58 nonMergeable = "this is not mergeable" 59 60 testData = []struct { 61 originalContainer interface{} 62 spans []interface{} 63 expectedContainer interface{} 64 expectedOk bool 65 }{ 66 {nil, nil, nil, false}, 67 68 {emptyContainer, nil, emptyContainer, false}, 69 {emptyContainer, []interface{}{"none", "of", "these", "are", "spans"}, emptyContainer, false}, 70 {emptyContainer, []interface{}{testSpans[0]}, NopMergeable{testSpans[0]}, true}, 71 {emptyContainer, []interface{}{testSpans}, NopMergeable(testSpans), true}, 72 73 { 74 emptyContainer, 75 []interface{}{testSpans[0], testSpans[1:3], nonEmptyContainer}, 76 append( 77 append(NopMergeable{testSpans[0]}, testSpans[1:3]...), testSpans[3:]..., 78 ), 79 true, 80 }, 81 82 {nonEmptyContainer, nil, nonEmptyContainer, false}, 83 {nonEmptyContainer, []interface{}{"none", "of", "these", "are", "spans"}, nonEmptyContainer, false}, 84 {nonEmptyContainer, []interface{}{testSpans[0]}, append(NopMergeable(testSpans[3:]), testSpans[0]), true}, 85 {nonEmptyContainer, []interface{}{testSpans}, append(NopMergeable(testSpans[3:]), testSpans...), true}, 86 {nonEmptyContainer, []interface{}{nonEmptyContainer}, append(NopMergeable(testSpans[3:]), testSpans[3:]...), true}, 87 88 {nonMergeable, nil, nonMergeable, false}, 89 {nonMergeable, []interface{}{"none", "of", "these", "are", "spans"}, nonMergeable, false}, 90 {nonMergeable, []interface{}{testSpans[0]}, nonMergeable, false}, 91 {nonMergeable, []interface{}{testSpans}, nonMergeable, false}, 92 {nonMergeable, []interface{}{nonEmptyContainer}, nonMergeable, false}, 93 } 94 ) 95 96 for _, record := range testData { 97 t.Logf("%#v", record) 98 99 actual, ok := MergeSpans(record.originalContainer, record.spans...) 100 assert.Equal(record.expectedContainer, actual) 101 assert.Equal(record.expectedOk, ok) 102 } 103 }