You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.6 KiB
Go
142 lines
4.6 KiB
Go
package tracing
|
|
|
|
// Tests for tracing initialization, config parsing, and helper wrappers.
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestNewTracer_Disabled ensures new tracer disabled behavior is handled correctly.
|
|
func TestNewTracer_Disabled(t *testing.T) {
|
|
cfg := DefaultConfig()
|
|
cfg.Enabled = false
|
|
|
|
tracer, err := NewTracer(cfg)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, tracer)
|
|
|
|
ctx, span := tracer.StartSpan(context.Background(), "test")
|
|
require.NotNil(t, ctx)
|
|
require.NotNil(t, span)
|
|
require.NotPanics(t, func() {
|
|
span.SetAttribute("k", "v")
|
|
span.RecordError(errors.New("boom"))
|
|
span.End()
|
|
})
|
|
}
|
|
|
|
// TestNewTracer_Enabled ensures new tracer enabled behavior is handled correctly.
|
|
func TestNewTracer_Enabled(t *testing.T) {
|
|
cfg := DefaultConfig()
|
|
cfg.Enabled = true
|
|
|
|
tracer, err := NewTracer(cfg)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, tracer)
|
|
require.NoError(t, tracer.Shutdown(context.Background()))
|
|
}
|
|
|
|
// TestShutdown_Disabled ensures shutdown disabled behavior is handled correctly.
|
|
func TestShutdown_Disabled(t *testing.T) {
|
|
tracer, err := NewTracer(DefaultConfig())
|
|
require.NoError(t, err)
|
|
|
|
err = tracer.Shutdown(context.Background())
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// TestTraceServiceOperation ensures trace service operation behavior is handled correctly.
|
|
func TestTraceServiceOperation(t *testing.T) {
|
|
tracer, err := NewTracer(DefaultConfig())
|
|
require.NoError(t, err)
|
|
|
|
expected := errors.New("boom")
|
|
err = TraceServiceOperation(context.Background(), tracer, "svc", "op", func(ctx context.Context) error {
|
|
return expected
|
|
})
|
|
require.Equal(t, expected, err)
|
|
}
|
|
|
|
// TestTraceDatabaseOperation ensures trace database operation behavior is handled correctly.
|
|
func TestTraceDatabaseOperation(t *testing.T) {
|
|
tracer, err := NewTracer(DefaultConfig())
|
|
require.NoError(t, err)
|
|
|
|
called := false
|
|
err = TraceDatabaseOperation(context.Background(), tracer, "select", "users", func(ctx context.Context) error {
|
|
called = true
|
|
return nil
|
|
})
|
|
require.NoError(t, err)
|
|
require.True(t, called)
|
|
}
|
|
|
|
// TestConfigFromEnvDefaults ensures config from env defaults behavior is handled correctly.
|
|
func TestConfigFromEnvDefaults(t *testing.T) {
|
|
t.Setenv("TRACING_ENABLED", "")
|
|
t.Setenv("TRACING_SERVICE_NAME", "")
|
|
t.Setenv("TRACING_SERVICE_VERSION", "")
|
|
t.Setenv("TRACING_ENVIRONMENT", "")
|
|
t.Setenv("TRACING_OTLP_ENDPOINT", "")
|
|
t.Setenv("TRACING_JAEGER_ENDPOINT", "")
|
|
t.Setenv("TRACING_SAMPLE_RATE", "")
|
|
|
|
cfg := ConfigFromEnv()
|
|
def := DefaultConfig()
|
|
|
|
require.Equal(t, def, cfg)
|
|
}
|
|
|
|
// TestConfigFromEnvOverrides ensures config from env overrides behavior is handled correctly.
|
|
func TestConfigFromEnvOverrides(t *testing.T) {
|
|
t.Setenv("TRACING_ENABLED", "true")
|
|
t.Setenv("TRACING_SERVICE_NAME", "gateway")
|
|
t.Setenv("TRACING_SERVICE_VERSION", "1.2.3")
|
|
t.Setenv("TRACING_ENVIRONMENT", "production")
|
|
t.Setenv("TRACING_OTLP_ENDPOINT", "https://otel-collector:4318/v1/traces")
|
|
t.Setenv("TRACING_JAEGER_ENDPOINT", "http://jaeger:14268/api/traces")
|
|
t.Setenv("TRACING_SAMPLE_RATE", "0.25")
|
|
|
|
cfg := ConfigFromEnv()
|
|
require.True(t, cfg.Enabled)
|
|
require.Equal(t, "gateway", cfg.ServiceName)
|
|
require.Equal(t, "1.2.3", cfg.ServiceVersion)
|
|
require.Equal(t, "production", cfg.Environment)
|
|
require.Equal(t, "https://otel-collector:4318/v1/traces", cfg.OTLPEndpoint)
|
|
require.Equal(t, "http://jaeger:14268/api/traces", cfg.JaegerEndpoint)
|
|
require.Equal(t, 0.25, cfg.SampleRate)
|
|
}
|
|
|
|
// TestConfigFromEnvInvalidSampleRate ensures config from env invalid sample rate behavior is handled correctly.
|
|
func TestConfigFromEnvInvalidSampleRate(t *testing.T) {
|
|
t.Setenv("TRACING_SAMPLE_RATE", "not-a-float")
|
|
|
|
cfg := ConfigFromEnv()
|
|
require.Equal(t, DefaultConfig().SampleRate, cfg.SampleRate)
|
|
}
|
|
|
|
// TestConfigFromEnvLegacyEndpointFallback ensures config from env legacy endpoint
|
|
// fallback behavior is handled correctly.
|
|
func TestConfigFromEnvLegacyEndpointFallback(t *testing.T) {
|
|
t.Setenv("TRACING_OTLP_ENDPOINT", "")
|
|
t.Setenv("TRACING_JAEGER_ENDPOINT", "http://legacy:14268/api/traces")
|
|
|
|
cfg := ConfigFromEnv()
|
|
require.Equal(t, "http://legacy:14268/api/traces", cfg.OTLPEndpoint)
|
|
require.Equal(t, "http://legacy:14268/api/traces", cfg.JaegerEndpoint)
|
|
}
|
|
|
|
// TestConfigFromEnvEndpointPrecedence ensures config from env endpoint precedence behavior is handled correctly.
|
|
func TestConfigFromEnvEndpointPrecedence(t *testing.T) {
|
|
t.Setenv("TRACING_OTLP_ENDPOINT", "https://collector:4318/v1/traces")
|
|
t.Setenv("TRACING_JAEGER_ENDPOINT", "http://legacy:14268/api/traces")
|
|
|
|
cfg := ConfigFromEnv()
|
|
require.Equal(t, "https://collector:4318/v1/traces", cfg.OTLPEndpoint)
|
|
require.Equal(t, "http://legacy:14268/api/traces", cfg.JaegerEndpoint)
|
|
}
|