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  })