github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/tracing/tracer_test.go (about) 1 package tracing_test 2 3 import ( 4 "context" 5 6 "github.com/pf-qiu/concourse/v6/tracing" 7 "github.com/pf-qiu/concourse/v6/tracing/tracingfakes" 8 "go.opentelemetry.io/otel/api/global" 9 "go.opentelemetry.io/otel/api/trace" 10 "go.opentelemetry.io/otel/label" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Tracer", func() { 17 18 var ( 19 fakeSpan *tracingfakes.FakeSpan 20 ) 21 22 BeforeEach(func() { 23 fakeTracer := new(tracingfakes.FakeTracer) 24 fakeProvider := new(tracingfakes.FakeProvider) 25 fakeSpan = new(tracingfakes.FakeSpan) 26 27 fakeProvider.TracerReturns(fakeTracer) 28 29 fakeTracer.StartReturns( 30 context.Background(), 31 fakeSpan, 32 ) 33 34 global.SetTraceProvider(fakeProvider) 35 tracing.Configured = true 36 }) 37 38 Describe("StartSpan", func() { 39 40 var ( 41 ctx context.Context 42 span trace.Span 43 44 component = "a" 45 attrs = tracing.Attrs{} 46 ) 47 48 JustBeforeEach(func() { 49 _, span = tracing.StartSpan(ctx, component, attrs) 50 }) 51 52 It("creates a span", func() { 53 Expect(span).ToNot(BeNil()) 54 }) 55 56 Context("with attributes", func() { 57 58 BeforeEach(func() { 59 attrs = tracing.Attrs{ 60 "foo": "bar", 61 "zaz": "caz", 62 } 63 }) 64 65 It("sets the attributes passed in", func() { 66 Expect(fakeSpan.SetAttributesCallCount()).To(Equal(1)) 67 68 attrs := fakeSpan.SetAttributesArgsForCall(0) 69 Expect(attrs).To(ConsistOf([]label.KeyValue{ 70 label.String("foo", "bar"), 71 label.String("zaz", "caz"), 72 })) 73 }) 74 }) 75 76 }) 77 78 Describe("Prepare", func() { 79 BeforeEach(func() { 80 tracing.Configured = false 81 }) 82 83 It("configures tracing if jaeger flags are provided", func() { 84 c := tracing.Config{ 85 Jaeger: tracing.Jaeger{ 86 Endpoint: "http://jaeger:14268/api/traces", 87 }, 88 } 89 c.Prepare() 90 Expect(tracing.Configured).To(BeTrue()) 91 }) 92 93 It("configures tracing if otlp flags are provided", func() { 94 c := tracing.Config{ 95 OTLP: tracing.OTLP{ 96 Address: "ingest.example.com:443", 97 Headers: map[string]string{"access-token": "mytoken"}, 98 }, 99 } 100 c.Prepare() 101 Expect(tracing.Configured).To(BeTrue()) 102 }) 103 104 It("does not configure tracing if no flags are provided", func() { 105 c := tracing.Config{} 106 c.Prepare() 107 Expect(tracing.Configured).To(BeFalse()) 108 }) 109 }) 110 })