* Samplers: Check PR/helm values for supported types * Propagators: Check PR/helm values for supported types * Added tracing support via fission CLI * Use parentbased_traceidratio as default sampler with 0.1 ratio Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
182 lines
4.4 KiB
Go
182 lines
4.4 KiB
Go
package otel
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"go.opentelemetry.io/contrib/propagators/jaeger"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
|
"go.opentelemetry.io/otel/propagation"
|
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
|
|
"github.com/fission/fission/pkg/utils/loggerfactory"
|
|
)
|
|
|
|
func TestGetPropogater(t *testing.T) {
|
|
if OtelPropogaters != "OTEL_PROPOGATORS" {
|
|
t.Errorf("Expected OTEL_PROPOGATORS to be set, got %s", OtelPropogaters)
|
|
}
|
|
tests := []struct {
|
|
propogaterEnv string
|
|
propogaters []propagation.TextMapPropagator
|
|
}{
|
|
{
|
|
"",
|
|
[]propagation.TextMapPropagator{propagation.TraceContext{}, propagation.Baggage{}},
|
|
},
|
|
{
|
|
"tracecontext,baggage",
|
|
[]propagation.TextMapPropagator{propagation.TraceContext{}, propagation.Baggage{}},
|
|
},
|
|
{
|
|
"jaeger",
|
|
[]propagation.TextMapPropagator{jaeger.Jaeger{}},
|
|
},
|
|
{
|
|
"baggage,tracecontext",
|
|
[]propagation.TextMapPropagator{propagation.Baggage{}, propagation.TraceContext{}},
|
|
},
|
|
{
|
|
"jaeger,baggage",
|
|
[]propagation.TextMapPropagator{jaeger.Jaeger{}, propagation.Baggage{}},
|
|
},
|
|
}
|
|
logger := loggerfactory.GetLogger()
|
|
for _, tt := range tests {
|
|
os.Setenv(OtelPropogaters, tt.propogaterEnv)
|
|
prop := GetPropogater(logger)
|
|
if prop == nil {
|
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
|
}
|
|
if len(prop) != len(tt.propogaters) {
|
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
|
}
|
|
if !reflect.DeepEqual(prop, tt.propogaters) {
|
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetSampler(t *testing.T) {
|
|
if OtelTracesSampler != "OTEL_TRACES_SAMPLER" {
|
|
t.Errorf("Expected OTEL_TRACES_SAMPLER to be set, got %s", OtelTracesSampler)
|
|
}
|
|
if OtelTracesSamplerArg != "OTEL_TRACES_SAMPLER_ARG" {
|
|
t.Errorf("Expected OTEL_TRACES_SAMPLER_ARG to be set, got %s", OtelTracesSamplerArg)
|
|
}
|
|
if OtelPropogaters != "OTEL_PROPOGATORS" {
|
|
t.Errorf("Expected OTEL_PROPOGATORS to be set, got %s", OtelPropogaters)
|
|
}
|
|
tests := []struct {
|
|
sampler string
|
|
samplerArg string
|
|
wantSampler sdktrace.Sampler
|
|
wantError error
|
|
}{
|
|
{
|
|
"",
|
|
"",
|
|
sdktrace.ParentBased(sdktrace.AlwaysSample()),
|
|
nil,
|
|
},
|
|
{
|
|
"always_on",
|
|
"",
|
|
sdktrace.AlwaysSample(),
|
|
nil,
|
|
},
|
|
{
|
|
"always_off",
|
|
"",
|
|
sdktrace.NeverSample(),
|
|
nil,
|
|
},
|
|
{
|
|
"parentbased_always_on",
|
|
"",
|
|
sdktrace.ParentBased(sdktrace.AlwaysSample()),
|
|
nil,
|
|
},
|
|
{
|
|
"parentbased_always_off",
|
|
"",
|
|
sdktrace.ParentBased(sdktrace.NeverSample()),
|
|
nil,
|
|
},
|
|
{
|
|
"traceidratio",
|
|
"0.5",
|
|
sdktrace.TraceIDRatioBased(0.5),
|
|
nil,
|
|
},
|
|
{
|
|
"traceidratio",
|
|
"",
|
|
nil,
|
|
errors.New("invalid sampler arg: strconv.ParseFloat: parsing \"\": invalid syntax"),
|
|
},
|
|
{
|
|
"parentbased_traceidratio",
|
|
"",
|
|
nil,
|
|
errors.New("invalid sampler arg: strconv.ParseFloat: parsing \"\": invalid syntax"),
|
|
},
|
|
{
|
|
"parentbased_traceidratio",
|
|
"0.01",
|
|
sdktrace.ParentBased(sdktrace.TraceIDRatioBased(0.01)),
|
|
nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
os.Setenv(OtelTracesSampler, tt.sampler)
|
|
os.Setenv(OtelTracesSamplerArg, tt.samplerArg)
|
|
gotSampler, gotError := GetSampler()
|
|
if !reflect.DeepEqual(gotSampler, tt.wantSampler) {
|
|
t.Errorf("GetSampler() gotSampler = %#v, want %#v", gotSampler, tt.wantSampler)
|
|
}
|
|
if fmt.Sprintf("%s", gotError) != fmt.Sprintf("%s", tt.wantError) {
|
|
t.Errorf("GetSampler() gotError = %#v, want %#v", gotError, tt.wantError)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetTraceExporter(t *testing.T) {
|
|
if OtelEndpointEnvVar != "OTEL_EXPORTER_OTLP_ENDPOINT" {
|
|
t.Errorf("Expected OTEL_EXPORTER_OTLP_ENDPOINT to be set, got %s", OtelEndpointEnvVar)
|
|
}
|
|
if OtelInsecureEnvVar != "OTEL_EXPORTER_OTLP_INSECURE" {
|
|
t.Errorf("Expected OTEL_EXPORTER_OTLP_INSECURE to be set, got %s", OtelInsecureEnvVar)
|
|
}
|
|
logger := loggerfactory.GetLogger()
|
|
ctx := context.Background()
|
|
tests := []struct {
|
|
oltpEndpoint string
|
|
oltpInsecure string
|
|
wantExporter *otlptrace.Exporter
|
|
wantError error
|
|
}{
|
|
{
|
|
"",
|
|
"",
|
|
nil,
|
|
nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
os.Setenv(OtelEndpointEnvVar, tt.oltpEndpoint)
|
|
os.Setenv(OtelInsecureEnvVar, tt.oltpInsecure)
|
|
exporter, err := getTraceExporter(ctx, logger)
|
|
if !reflect.DeepEqual(exporter, tt.wantExporter) {
|
|
t.Errorf("getTraceExporter() exporter = %#v, want %#v", exporter, tt.wantExporter)
|
|
}
|
|
if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tt.wantError) {
|
|
t.Errorf("getTraceExporter() err = %#v, want %#v", err, tt.wantError)
|
|
}
|
|
}
|
|
}
|