ipld-eth-server/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan_test.go
2018-09-11 16:30:29 -05:00

174 lines
4.5 KiB
Go

package mocktracer
import (
"errors"
"testing"
"time"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
"github.com/stretchr/testify/assert"
)
// basicSpan returns a span with no configuration, having the set operation name.
func basicSpan(operationName string) *mockspan {
return newSpan(&mocktracer{}, operationName, &ddtrace.StartSpanConfig{})
}
func TestNewSpan(t *testing.T) {
t.Run("basic", func(t *testing.T) {
s := basicSpan("http.request")
assert := assert.New(t)
assert.Equal("http.request", s.name)
assert.False(s.startTime.IsZero())
assert.Zero(s.parentID)
assert.NotNil(s.context)
assert.NotZero(s.context.spanID)
assert.Equal(s.context.spanID, s.context.traceID)
})
t.Run("options", func(t *testing.T) {
tr := new(mocktracer)
startTime := time.Now()
tags := map[string]interface{}{"k": "v", "k1": "v1"}
opts := &ddtrace.StartSpanConfig{
StartTime: startTime,
Tags: tags,
}
s := newSpan(tr, "http.request", opts)
assert := assert.New(t)
assert.Equal(tr, s.tracer)
assert.Equal("http.request", s.name)
assert.Equal(startTime, s.startTime)
assert.Equal(tags, s.tags)
})
t.Run("parent", func(t *testing.T) {
baggage := map[string]string{"A": "B", "C": "D"}
parentctx := &spanContext{spanID: 1, traceID: 2, baggage: baggage}
opts := &ddtrace.StartSpanConfig{Parent: parentctx}
s := newSpan(&mocktracer{}, "http.request", opts)
assert := assert.New(t)
assert.NotNil(s.context)
assert.Equal(uint64(1), s.parentID)
assert.Equal(uint64(2), s.context.traceID)
assert.Equal(baggage, s.context.baggage)
})
}
func TestSpanSetTag(t *testing.T) {
s := basicSpan("http.request")
s.SetTag("a", "b")
s.SetTag("c", "d")
assert := assert.New(t)
assert.Len(s.Tags(), 3)
assert.Equal("http.request", s.Tag(ext.ResourceName))
assert.Equal("b", s.Tag("a"))
assert.Equal("d", s.Tag("c"))
}
func TestSpanSetTagPriority(t *testing.T) {
assert := assert.New(t)
s := basicSpan("http.request")
assert.False(s.context.hasSamplingPriority())
s.SetTag(ext.SamplingPriority, -1)
assert.True(s.context.hasSamplingPriority())
assert.Equal(-1, s.context.samplingPriority())
}
func TestSpanTagImmutability(t *testing.T) {
s := basicSpan("http.request")
s.SetTag("a", "b")
tags := s.Tags()
tags["a"] = 123
tags["b"] = 456
assert := assert.New(t)
assert.Equal("b", s.tags["a"])
assert.Zero(s.tags["b"])
}
func TestSpanStartTime(t *testing.T) {
startTime := time.Now()
s := newSpan(&mocktracer{}, "http.request", &ddtrace.StartSpanConfig{StartTime: startTime})
assert := assert.New(t)
assert.Equal(startTime, s.startTime)
assert.Equal(startTime, s.StartTime())
}
func TestSpanFinishTime(t *testing.T) {
s := basicSpan("http.request")
finishTime := time.Now()
s.Finish(tracer.FinishTime(finishTime))
assert := assert.New(t)
assert.Equal(finishTime, s.finishTime)
assert.Equal(finishTime, s.FinishTime())
}
func TestSpanOperationName(t *testing.T) {
t.Run("default", func(t *testing.T) {
s := basicSpan("http.request")
assert.Equal(t, "http.request", s.name)
assert.Equal(t, "http.request", s.OperationName())
})
t.Run("default", func(t *testing.T) {
s := basicSpan("http.request")
s.SetOperationName("db.query")
assert.Equal(t, "db.query", s.name)
assert.Equal(t, "db.query", s.OperationName())
})
}
func TestSpanBaggageFunctions(t *testing.T) {
t.Run("SetBaggageItem", func(t *testing.T) {
s := basicSpan("http.request")
s.SetBaggageItem("a", "b")
assert.Equal(t, "b", s.context.baggage["a"])
})
t.Run("BaggageItem", func(t *testing.T) {
s := basicSpan("http.request")
s.SetBaggageItem("a", "b")
assert.Equal(t, "b", s.BaggageItem("a"))
})
}
func TestSpanContext(t *testing.T) {
t.Run("Context", func(t *testing.T) {
s := basicSpan("http.request")
assert.Equal(t, s.context, s.Context())
})
t.Run("IDs", func(t *testing.T) {
parent := basicSpan("http.request")
child := newSpan(&mocktracer{}, "db.query", &ddtrace.StartSpanConfig{
Parent: parent.Context(),
})
assert := assert.New(t)
assert.Equal(parent.SpanID(), child.ParentID())
assert.Equal(parent.TraceID(), child.TraceID())
assert.NotZero(child.SpanID())
})
}
func TestSpanFinish(t *testing.T) {
s := basicSpan("http.request")
want := errors.New("some error")
s.Finish(tracer.WithError(want))
assert := assert.New(t)
assert.False(s.FinishTime().IsZero())
assert.True(s.FinishTime().Before(time.Now()))
assert.Equal(want, s.Tag(ext.Error))
}