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  }