From ffbfe19e78ba825d838658a3f36636aacbc79c5a Mon Sep 17 00:00:00 2001 From: Sargun Dhillon Date: Sat, 5 Dec 2020 19:08:49 -0800 Subject: [PATCH] Add tests for opencensus (logger) fields --- trace/opencensus/opencensus_test.go | 61 +++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/trace/opencensus/opencensus_test.go b/trace/opencensus/opencensus_test.go index e976bfb6f..7e1a15f18 100644 --- a/trace/opencensus/opencensus_test.go +++ b/trace/opencensus/opencensus_test.go @@ -15,8 +15,69 @@ package opencensus import ( + "context" + "errors" + "sync" + "testing" + + "github.com/virtual-kubelet/virtual-kubelet/log" "github.com/virtual-kubelet/virtual-kubelet/trace" + octrace "go.opencensus.io/trace" + "gotest.tools/assert" + is "gotest.tools/assert/cmp" ) // ensure that Adapter implements trace.Tracer var _ trace.Tracer = (*Adapter)(nil) + +type fakeExporter struct { + sync.Mutex + spans []*octrace.SpanData +} + +func (f *fakeExporter) ExportSpan(s *octrace.SpanData) { + f.Lock() + defer f.Unlock() + f.spans = append(f.spans, s) +} + +func TestOpencensus(t *testing.T) { + t.Run("addField", setupTest(testAddField)) +} + +func setupTest(f func(t *testing.T, exporter *fakeExporter, l *logger, span *octrace.Span)) func(t *testing.T) { + return func(t *testing.T) { + fe := &fakeExporter{} + octrace.RegisterExporter(fe) + defer octrace.UnregisterExporter(fe) + ctx := context.Background() + _, span := octrace.StartSpan(ctx, t.Name(), octrace.WithSampler(octrace.AlwaysSample())) + l := &logger{ + s: span, + l: log.L, + a: []octrace.Attribute{}, + } + f(t, fe, l, span) + } +} + +func testAddField(t *testing.T, exporter *fakeExporter, l *logger, span *octrace.Span) { + assert.Assert(t, l.s.IsRecordingEvents()) + tmpErr := errors.New("test") + assert.Assert(t, l.s.IsRecordingEvents()) + l.WithField("key", "value"). + WithError(tmpErr). + WithFields(map[string]interface{}{"test1": "value1", "test2": "value2"}). + Info() + span.End() + + assert.Assert(t, + is.DeepEqual(exporter.spans[0].Annotations[0].Attributes, + map[string]interface{}{ + "key": "value", + "test1": "value1", + "test2": "value2", + "err": "test", + "level": "INFO", + })) +}