mirror of
https://github.com/1f349/dendrite.git
synced 2025-02-06 06:36:24 +00:00
127 lines
3.9 KiB
Go
127 lines
3.9 KiB
Go
// Copyright (c) 2017 Uber Technologies, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package jaeger
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/opentracing/opentracing-go"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/uber/jaeger-lib/metrics"
|
|
"github.com/uber/jaeger-lib/metrics/testutils"
|
|
|
|
"github.com/uber/jaeger-client-go/internal/baggage"
|
|
)
|
|
|
|
func withTracerAndMetrics(f func(tracer *Tracer, metrics *Metrics, factory *metrics.LocalFactory)) {
|
|
factory := metrics.NewLocalFactory(0)
|
|
m := NewMetrics(factory, nil)
|
|
|
|
service := "DOOP"
|
|
tracer, closer := NewTracer(service, NewConstSampler(true), NewNullReporter())
|
|
defer closer.Close()
|
|
f(tracer.(*Tracer), m, factory)
|
|
}
|
|
|
|
func TestTruncateBaggage(t *testing.T) {
|
|
withTracerAndMetrics(func(tracer *Tracer, metrics *Metrics, factory *metrics.LocalFactory) {
|
|
setter := newBaggageSetter(baggage.NewDefaultRestrictionManager(5), metrics)
|
|
key := "key"
|
|
value := "01234567890"
|
|
expected := "01234"
|
|
|
|
parent := tracer.StartSpan("parent").(*Span)
|
|
parent.context = parent.context.WithBaggageItem(key, value)
|
|
span := tracer.StartSpan("child", opentracing.ChildOf(parent.Context())).(*Span)
|
|
|
|
setter.setBaggage(span, key, value)
|
|
assertBaggageFields(t, span, key, expected, true, true, false)
|
|
assert.Equal(t, expected, span.context.baggage[key])
|
|
|
|
testutils.AssertCounterMetrics(t, factory,
|
|
testutils.ExpectedMetric{
|
|
Name: "jaeger.baggage-truncate",
|
|
Value: 1,
|
|
},
|
|
testutils.ExpectedMetric{
|
|
Name: "jaeger.baggage-update",
|
|
Tags: map[string]string{"result": "ok"},
|
|
Value: 1,
|
|
},
|
|
)
|
|
})
|
|
}
|
|
|
|
type keyNotAllowedBaggageRestrictionManager struct{}
|
|
|
|
func (m *keyNotAllowedBaggageRestrictionManager) GetRestriction(service, key string) *baggage.Restriction {
|
|
return baggage.NewRestriction(false, 0)
|
|
}
|
|
|
|
func TestInvalidBaggage(t *testing.T) {
|
|
withTracerAndMetrics(func(tracer *Tracer, metrics *Metrics, factory *metrics.LocalFactory) {
|
|
setter := newBaggageSetter(&keyNotAllowedBaggageRestrictionManager{}, metrics)
|
|
key := "key"
|
|
value := "value"
|
|
|
|
span := tracer.StartSpan("span").(*Span)
|
|
|
|
setter.setBaggage(span, key, value)
|
|
assertBaggageFields(t, span, key, value, false, false, true)
|
|
assert.Empty(t, span.context.baggage[key])
|
|
|
|
testutils.AssertCounterMetrics(t, factory,
|
|
testutils.ExpectedMetric{
|
|
Name: "jaeger.baggage-update",
|
|
Tags: map[string]string{"result": "err"},
|
|
Value: 1,
|
|
},
|
|
)
|
|
})
|
|
}
|
|
|
|
func TestNotSampled(t *testing.T) {
|
|
withTracerAndMetrics(func(_ *Tracer, metrics *Metrics, factory *metrics.LocalFactory) {
|
|
tracer, closer := NewTracer("svc", NewConstSampler(false), NewNullReporter())
|
|
defer closer.Close()
|
|
|
|
setter := newBaggageSetter(baggage.NewDefaultRestrictionManager(10), metrics)
|
|
span := tracer.StartSpan("span").(*Span)
|
|
setter.setBaggage(span, "key", "value")
|
|
assert.Empty(t, span.logs, "No baggage fields should be created if span is not sampled")
|
|
})
|
|
}
|
|
|
|
func assertBaggageFields(t *testing.T, sp *Span, key, value string, override, truncated, invalid bool) {
|
|
require.Len(t, sp.logs, 1)
|
|
keys := map[string]struct{}{}
|
|
for _, field := range sp.logs[0].Fields {
|
|
keys[field.String()] = struct{}{}
|
|
}
|
|
assert.Contains(t, keys, "event:baggage")
|
|
assert.Contains(t, keys, "key:"+key)
|
|
assert.Contains(t, keys, "value:"+value)
|
|
if invalid {
|
|
assert.Contains(t, keys, "invalid:true")
|
|
}
|
|
if override {
|
|
assert.Contains(t, keys, "override:true")
|
|
}
|
|
if truncated {
|
|
assert.Contains(t, keys, "truncated:true")
|
|
}
|
|
}
|