diff --git a/tracer.go b/tracer.go index 9a627bed..09e761e2 100644 --- a/tracer.go +++ b/tracer.go @@ -326,10 +326,7 @@ func (t *Tracer) startSpanWithOptions( } sp.observer = t.observer.OnStartSpan(sp, operationName, options) - if tagsTotalLength := len(options.Tags) + len(internalTags); tagsTotalLength > 0 { - if sp.tags == nil || cap(sp.tags) < tagsTotalLength { - sp.tags = make([]Tag, 0, tagsTotalLength) - } + if len(options.Tags)+len(internalTags) > 0 { sp.tags = append(sp.tags, internalTags...) for k, v := range options.Tags { sp.setTagInternal(k, v, false) diff --git a/tracer_test.go b/tracer_test.go index 7328e4da..af780b87 100644 --- a/tracer_test.go +++ b/tracer_test.go @@ -101,10 +101,42 @@ func (s *tracerSuite) TestBeginRootSpan() { func (s *tracerSuite) TestStartRootSpanWithOptions() { ts := time.Now() - sp := s.tracer.StartSpan("get_address", opentracing.StartTime(ts)) + t := opentracing.Tags{ + "testTag1": "test tag 1", + "testTag2": "test tag 2", + "testTag3": "test tag 3", + } + sp := s.tracer.StartSpan("get_address", opentracing.StartTime(ts), t) ss := sp.(*Span) + s.Equal("get_address", ss.operationName) s.Equal(ts, ss.startTime) + et := opentracing.Tags{ + SamplerTypeTagKey: SamplerTypeConst, + SamplerParamTagKey: true, + "testTag1": "test tag 1", + "testTag2": "test tag 2", + "testTag3": "test tag 3", + } + s.Equal(et, ss.Tags()) +} + +func (s *tracerSuite) TestStartRootSpanWithDebugHeader() { + h := http.Header{} + h.Add(JaegerDebugHeader, "x") + ctx, err := s.tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(h)) + require.NoError(s.T(), err) + + sp := s.tracer.StartSpan("get_address", opentracing.ChildOf(ctx)) + ss := sp.(*Span) + + s.Equal("get_address", ss.operationName) + et := opentracing.Tags{ + JaegerDebugHeader: "x", + SamplerTypeTagKey: SamplerTypeConst, + SamplerParamTagKey: true, + } + s.Equal(et, ss.Tags()) } func (s *tracerSuite) TestStartChildSpan() {