Skip to content

Commit 3b053c6

Browse files
authored
Merge branch 'main' into deprecate-otelkit
2 parents 1837301 + b98e46d commit 3b053c6

File tree

5 files changed

+69
-15
lines changed

5 files changed

+69
-15
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
1212

1313
- Add `NewMiddleware` function in `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp`. (#2964)
1414
- Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068, #3108)
15-
- The `go.opentelemetry.io/contrib/exporters/autoexport` package to provide configuration of trace exporters with useful defaults and envar support. (#2753)
15+
- The `go.opentelemetry.io/contrib/exporters/autoexport` package to provide configuration of trace exporters with useful defaults and envar support. (#2753, #4100)
1616

1717
### Fixed
1818

exporters/autoexport/exporter.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ func NewSpanExporter(ctx context.Context, opts ...Option) (trace.SpanExporter, e
9090
// environment variable.
9191
// nil is returned if no exporter is defined for the environment variable.
9292
func makeExporterFromEnv(ctx context.Context) (trace.SpanExporter, error) {
93-
expType, defined := os.LookupEnv(otelTracesExportersEnvKey)
94-
if !defined {
93+
expType := os.Getenv(otelTracesExportersEnvKey)
94+
if expType == "" {
9595
return nil, nil
9696
}
9797
return spanExporter(ctx, expType)

exporters/autoexport/exporter_test.go

+56-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package autoexport
1616

1717
import (
1818
"context"
19+
"reflect"
1920
"testing"
2021

2122
"github.com/stretchr/testify/assert"
@@ -26,7 +27,7 @@ import (
2627

2728
func TestOTLPExporterReturnedWhenNoEnvOrFallbackExporterConfigured(t *testing.T) {
2829
exporter, err := NewSpanExporter(context.Background())
29-
assert.Nil(t, err)
30+
assert.NoError(t, err)
3031
assert.NotNil(t, exporter)
3132
assert.IsType(t, &otlptrace.Exporter{}, exporter)
3233
}
@@ -37,7 +38,7 @@ func TestFallbackExporterReturnedWhenNoEnvExporterConfigured(t *testing.T) {
3738
context.Background(),
3839
WithFallbackSpanExporter(testExporter),
3940
)
40-
assert.Nil(t, err)
41+
assert.NoError(t, err)
4142
assert.Equal(t, testExporter, exporter)
4243
}
4344

@@ -49,8 +50,59 @@ func TestEnvExporterIsPreferredOverFallbackExporter(t *testing.T) {
4950
context.Background(),
5051
WithFallbackSpanExporter(testExporter),
5152
)
52-
assert.Nil(t, err)
53-
assert.IsType(t, &otlptrace.Exporter{}, exporter)
53+
assert.NoError(t, err)
54+
assertOTLPHTTPExporter(t, exporter)
55+
}
56+
57+
func TestEnvExporterOTLPOverHTTP(t *testing.T) {
58+
t.Setenv("OTEL_TRACES_EXPORTER", "otlp")
59+
t.Setenv("OTEL_EXPORTER_OTLP_PROTOCOL", "http/protobuf")
60+
61+
exporter, err := NewSpanExporter(context.Background())
62+
assert.NoError(t, err)
63+
assertOTLPHTTPExporter(t, exporter)
64+
}
65+
66+
func TestEnvExporterOTLPOverGRPC(t *testing.T) {
67+
t.Setenv("OTEL_TRACES_EXPORTER", "otlp")
68+
t.Setenv("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")
69+
70+
exporter, err := NewSpanExporter(context.Background())
71+
assert.NoError(t, err)
72+
assertOTLPGRPCExporter(t, exporter)
73+
}
74+
75+
func TestEnvExporterOTLPInvalidProtocol(t *testing.T) {
76+
t.Setenv("OTEL_TRACES_EXPORTER", "otlp")
77+
t.Setenv("OTEL_EXPORTER_OTLP_PROTOCOL", "invalid")
78+
79+
exporter, err := NewSpanExporter(context.Background())
80+
assert.Error(t, err)
81+
assert.Nil(t, exporter)
82+
}
83+
84+
func assertOTLPHTTPExporter(t *testing.T, got trace.SpanExporter) {
85+
t.Helper()
86+
87+
if !assert.IsType(t, &otlptrace.Exporter{}, got) {
88+
return
89+
}
90+
91+
// Implementation detail hack. This may break when bumping OTLP exporter modules as it uses unexported API.
92+
clientType := reflect.Indirect(reflect.ValueOf(got)).FieldByName("client").Elem().Type().String()
93+
assert.Equal(t, "*otlptracehttp.client", clientType)
94+
}
95+
96+
func assertOTLPGRPCExporter(t *testing.T, got trace.SpanExporter) {
97+
t.Helper()
98+
99+
if !assert.IsType(t, &otlptrace.Exporter{}, got) {
100+
return
101+
}
102+
103+
// Implementation detail hack. This may break when bumping OTLP exporter modules as it uses unexported API.
104+
clientType := reflect.Indirect(reflect.ValueOf(got)).FieldByName("client").Elem().Type().String()
105+
assert.Equal(t, "*otlptracegrpc.client", clientType)
54106
}
55107

56108
type testExporter struct{}

exporters/autoexport/registry.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,11 @@ func spanExporter(ctx context.Context, name string) (trace.SpanExporter, error)
130130

131131
// buildOTLPExporter creates an OTLP exporter using the environment variable
132132
// OTEL_EXPORTER_OTLP_PROTOCOL to determine the exporter protocol.
133+
// Defaults to http/protobuf protocol.
133134
func buildOTLPExporter(ctx context.Context) (trace.SpanExporter, error) {
134-
proto := "grpc"
135-
if protoStr, ok := os.LookupEnv(otelExporterOTLPProtoEnvKey); ok {
136-
proto = protoStr
135+
proto := os.Getenv(otelExporterOTLPProtoEnvKey)
136+
if proto == "" {
137+
proto = "http/protobuf"
137138
}
138139

139140
switch proto {

exporters/autoexport/registry_test.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func TestRegistryIsConcurrentSafe(t *testing.T) {
7575
defer wg.Done()
7676
assert.NotPanics(t, func() {
7777
exp, err := r.load(context.Background(), exporterName)
78-
assert.Nil(t, err, "missing exporter in registry")
78+
assert.NoError(t, err, "missing exporter in registry")
7979
assert.IsType(t, &stdouttrace.Exporter{}, exp)
8080
})
8181
}()
@@ -86,12 +86,13 @@ func TestRegistryIsConcurrentSafe(t *testing.T) {
8686
func TestSubsequentCallsToGetExporterReturnsNewInstances(t *testing.T) {
8787
const exporterType = "otlp"
8888
exp1, err := spanExporter(context.Background(), exporterType)
89-
assert.Nil(t, err)
90-
assert.IsType(t, &otlptrace.Exporter{}, exp1)
89+
assert.NoError(t, err)
90+
assertOTLPHTTPExporter(t, exp1)
9191

9292
exp2, err := spanExporter(context.Background(), exporterType)
93-
assert.Nil(t, err)
94-
assert.IsType(t, &otlptrace.Exporter{}, exp2)
93+
assert.NoError(t, err)
94+
assertOTLPHTTPExporter(t, exp2)
95+
9596
assert.NotSame(t, exp1, exp2)
9697
}
9798

0 commit comments

Comments
 (0)