@@ -16,9 +16,9 @@ package observabilitytest
1616
1717import (
1818 "context"
19+ "fmt"
1920 "reflect"
2021 "sort"
21- "testing"
2222 "time"
2323
2424 tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
@@ -42,16 +42,14 @@ var _ view.Exporter = (*nopMetricsExporter)(nil)
4242func (cme * nopMetricsExporter ) ExportView (vd * view.Data ) {}
4343
4444// SetupRecordedMetricsTest does setup the testing environment to check the metrics recorded by receivers, producers or exporters.
45- // The returned function should be deferred "defer SetupRecordedMetricsTest(t )()".
46- func SetupRecordedMetricsTest (t * testing. T ) func () {
45+ // The returned function should be deferred "defer SetupRecordedMetricsTest()()".
46+ func SetupRecordedMetricsTest () func () {
4747 // Register a nop metrics exporter for the OC library.
4848 nmp := new (nopMetricsExporter )
4949 view .RegisterExporter (nmp )
5050
5151 // Now for the stats exporter
52- if err := view .Register (observability .AllViews ... ); err != nil {
53- t .Fatalf ("Failed to register all views: %v" , err )
54- }
52+ view .Register (observability .AllViews ... )
5553
5654 return func () {
5755 view .UnregisterExporter (nmp )
@@ -62,8 +60,8 @@ func SetupRecordedMetricsTest(t *testing.T) func() {
6260// CheckRecordedMetricsForTraceExporter checks that the given TraceExporter records the correct set of metrics with the correct
6361// set of tags by sending few TraceData to the exporter. The exporter should be able to handle the requests correctly without
6462// dropping.
65- func CheckRecordedMetricsForTraceExporter (t * testing. T , te exporter.TraceExporter ) {
66- defer SetupRecordedMetricsTest (t )()
63+ func CheckRecordedMetricsForTraceExporter (te exporter.TraceExporter ) error {
64+ defer SetupRecordedMetricsTest ()()
6765
6866 now := time .Now ().UTC ()
6967 spans := []* tracepb.Span {
@@ -87,70 +85,64 @@ func CheckRecordedMetricsForTraceExporter(t *testing.T, te exporter.TraceExporte
8785 },
8886 },
8987 },
90- {
91- TraceId : []byte {0x20 , 0x21 , 0x22 , 0x23 , 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2A , 0x2B , 0x2C , 0x2D , 0x2E },
92- SpanId : []byte {0x38 , 0x39 , 0x3A , 0x3B , 0x3C , 0x3D , 0x3E , 0x3F },
93- ParentSpanId : []byte {0xF0 , 0xF1 , 0xF2 , 0xF3 , 0xF4 , 0xF5 , 0xF6 , 0xF7 },
94- Name : & tracepb.TruncatableString {Value : "LocalSpan" },
95- Kind : tracepb .Span_SPAN_KIND_UNSPECIFIED ,
96- StartTime : internal .TimeToTimestamp (now .Add (- 15 * time .Millisecond )),
97- EndTime : internal .TimeToTimestamp (now ),
98- Status : & tracepb.Status {Code : int32 (0 ), Message : "OK" },
99- Tracestate : & tracepb.Span_Tracestate {},
100- },
10188 }
10289 td := data.TraceData {Spans : spans }
10390 ctx := observability .ContextWithReceiverName (context .Background (), fakeReceiverName )
10491 const numBatches = 7
10592 for i := 0 ; i < numBatches ; i ++ {
10693 if err := te .ConsumeTraceData (ctx , td ); err != nil {
107- t . Fatalf ("Want nil got %v" , err )
94+ return fmt . Errorf ("Want nil got %v" , err )
10895 }
10996 }
11097
111- CheckValueViewExporterReceivedSpans (t , fakeReceiverName , te .TraceExportFormat (), int64 (numBatches * len (spans )))
112- CheckValueViewExporterDroppedSpans (t , fakeReceiverName , te .TraceExportFormat (), 0 )
98+ if err := CheckValueViewExporterReceivedSpans (fakeReceiverName , te .TraceExportFormat (), numBatches * len (spans )); err != nil {
99+ return err
100+ }
101+ if err := CheckValueViewExporterDroppedSpans (fakeReceiverName , te .TraceExportFormat (), 0 ); err != nil {
102+ return err
103+ }
104+ return nil
113105}
114106
115107// CheckValueViewExporterReceivedSpans checks that for the current exported value in the ViewExporterReceivedSpans
116108// for {TagKeyReceiver: receiverName, TagKeyExporter: exporterTagName} is equal to "value".
117- // In tests that this function is called it is required to also call SetupRecordedMetricsTest as first thing.
118- func CheckValueViewExporterReceivedSpans (t * testing. T , receiverName string , exporterTagName string , value int64 ) {
119- checkValueForView (t , observability .ViewExporterReceivedSpans .Name ,
120- wantsTagsForExporterView (receiverName , exporterTagName ), value )
109+ // When this function is called it is required to also call SetupRecordedMetricsTest as first thing.
110+ func CheckValueViewExporterReceivedSpans (receiverName string , exporterTagName string , value int ) error {
111+ return checkValueForView (observability .ViewExporterReceivedSpans .Name ,
112+ wantsTagsForExporterView (receiverName , exporterTagName ), int64 ( value ) )
121113}
122114
123115// CheckValueViewExporterDroppedSpans checks that for the current exported value in the ViewExporterDroppedSpans
124116// for {TagKeyReceiver: receiverName} is equal to "value".
125117// In tests that this function is called it is required to also call SetupRecordedMetricsTest as first thing.
126- func CheckValueViewExporterDroppedSpans (t * testing. T , receiverName string , exporterTagName string , value int64 ) {
127- checkValueForView (t , observability .ViewExporterDroppedSpans .Name ,
128- wantsTagsForExporterView (receiverName , exporterTagName ), value )
118+ func CheckValueViewExporterDroppedSpans (receiverName string , exporterTagName string , value int ) error {
119+ return checkValueForView (observability .ViewExporterDroppedSpans .Name ,
120+ wantsTagsForExporterView (receiverName , exporterTagName ), int64 ( value ) )
129121}
130122
131123// CheckValueViewReceiverReceivedSpans checks that for the current exported value in the ViewReceiverReceivedSpans
132124// for {TagKeyReceiver: receiverName, TagKeyExporter: exporterTagName} is equal to "value".
133125// In tests that this function is called it is required to also call SetupRecordedMetricsTest as first thing.
134- func CheckValueViewReceiverReceivedSpans (t * testing. T , receiverName string , value int64 ) {
135- checkValueForView (t , observability .ViewReceiverReceivedSpans .Name ,
136- wantsTagsForReceiverView (receiverName ), value )
126+ func CheckValueViewReceiverReceivedSpans (receiverName string , value int ) error {
127+ return checkValueForView (observability .ViewReceiverReceivedSpans .Name ,
128+ wantsTagsForReceiverView (receiverName ), int64 ( value ) )
137129}
138130
139131// CheckValueViewReceiverDroppedSpans checks that for the current exported value in the ViewReceiverDroppedSpans
140132// for {TagKeyReceiver: receiverName} is equal to "value".
141133// In tests that this function is called it is required to also call SetupRecordedMetricsTest as first thing.
142- func CheckValueViewReceiverDroppedSpans (t * testing. T , receiverName string , value int64 ) {
143- checkValueForView (t , observability .ViewReceiverDroppedSpans .Name ,
144- wantsTagsForReceiverView (receiverName ), value )
134+ func CheckValueViewReceiverDroppedSpans (receiverName string , value int ) error {
135+ return checkValueForView (observability .ViewReceiverDroppedSpans .Name ,
136+ wantsTagsForReceiverView (receiverName ), int64 ( value ) )
145137}
146138
147- func checkValueForView (t * testing. T , vName string , wantTags []tag.Tag , value int64 ) {
139+ func checkValueForView (vName string , wantTags []tag.Tag , value int64 ) error {
148140 // Make sure the tags slice is sorted by tag keys.
149141 sortTags (wantTags )
150142
151143 rows , err := view .RetrieveData (vName )
152144 if err != nil {
153- t . Fatalf ("Error retrieving view data for view Name %s" , vName )
145+ return fmt . Errorf ("Error retrieving view data for view Name %s" , vName )
154146 }
155147
156148 for _ , row := range rows {
@@ -159,13 +151,13 @@ func checkValueForView(t *testing.T, vName string, wantTags []tag.Tag, value int
159151 if reflect .DeepEqual (wantTags , row .Tags ) {
160152 sum := row .Data .(* view.SumData )
161153 if float64 (value ) != sum .Value {
162- t . Fatalf ( "Want %v got %v" , float64 (value ), sum .Value )
154+ return fmt . Errorf ( "Different recorded value: want %v got %v" , float64 (value ), sum .Value )
163155 }
164156 // We found the result
165- return
157+ return nil
166158 }
167159 }
168- t . Fatalf ("Could not find wantTags: %s in rows %v" , wantTags , rows )
160+ return fmt . Errorf ("Could not find wantTags: %s in rows %v" , wantTags , rows )
169161}
170162
171163func wantsTagsForExporterView (receiverName string , exporterTagName string ) []tag.Tag {
0 commit comments