Files
zeekay 964c02f168 feat(telemetry): traces go to o11y over ZAP
The OTLP exporters pull gRPC and protobuf — otlptracehttp as much as
otlptracegrpc, since they share otlpconfig. luxfi/trace v1.4.0 exports the ZAP
span exporter directly, so each service keeps its own TracerProvider and
resource attributes and only the transport changes: a JSON SpanBatch inside a
ZAP envelope, read by o11y/pkg/zapreceiver.

ZAP takes host:port, so a URL scheme is trimmed rather than passed through — it
has no meaning on this wire.

otlp is now zero in go.mod.
2026-07-26 20:38:03 -07:00

90 lines
2.1 KiB
Go

package otel
import (
"fmt"
"os"
"reflect"
"sort"
"testing"
"go.opentelemetry.io/contrib/propagators/autoprop"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"github.com/hanzoai/functions/pkg/utils/loggerfactory"
)
func TestGetPropogater(t *testing.T) {
if OtelPropagaters != "OTEL_PROPAGATORS" {
t.Errorf("Expected OTEL_PROPAGATORS to be set, got %s", OtelPropagaters)
}
// tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace, and none
tests := []struct {
propogaterEnv string
propogaters []string
}{
{
"none",
[]string{},
},
{
"tracecontext,baggage",
[]string{"baggage", "traceparent", "tracestate"},
},
{
"jaeger",
[]string{"uber-trace-id"},
},
{
"baggage,tracecontext",
[]string{"baggage", "traceparent", "tracestate"},
},
{
"jaeger,baggage",
[]string{"baggage", "uber-trace-id"},
},
}
for _, tt := range tests {
os.Setenv(OtelPropagaters, tt.propogaterEnv)
propFields := autoprop.NewTextMapPropagator().Fields()
sort.Strings(propFields)
if !reflect.DeepEqual(propFields, tt.propogaters) {
t.Errorf("Expected %s, got %s", tt.propogaters, propFields)
}
}
}
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 := t.Context()
tests := []struct {
oltpEndpoint string
oltpInsecure string
wantExporter sdktrace.SpanExporter
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)
}
}
}