mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-01-14 02:33:21 +02:00
parent
86a51dc049
commit
97f8401153
@ -25,6 +25,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
### Changed
|
||||
|
||||
- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5892)
|
||||
- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5911)
|
||||
|
||||
<!-- Released section -->
|
||||
<!-- Don't change this section unless doing release -->
|
||||
|
@ -198,7 +198,12 @@ func (c *client) exportContext(parent context.Context) (context.Context, context
|
||||
}
|
||||
|
||||
if c.metadata.Len() > 0 {
|
||||
ctx = metadata.NewOutgoingContext(ctx, c.metadata)
|
||||
md := c.metadata
|
||||
if outMD, ok := metadata.FromOutgoingContext(ctx); ok {
|
||||
md = metadata.Join(md, outMD)
|
||||
}
|
||||
|
||||
ctx = metadata.NewOutgoingContext(ctx, md)
|
||||
}
|
||||
|
||||
return ctx, cancel
|
||||
|
@ -25,6 +25,7 @@ import (
|
||||
"google.golang.org/protobuf/types/known/durationpb"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/sdk/log"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||
collogpb "go.opentelemetry.io/proto/otlp/collector/logs/v1"
|
||||
cpb "go.opentelemetry.io/proto/otlp/common/v1"
|
||||
@ -561,3 +562,39 @@ func TestClient(t *testing.T) {
|
||||
assert.ErrorContains(t, errs[0], want)
|
||||
})
|
||||
}
|
||||
|
||||
func TestConfig(t *testing.T) {
|
||||
factoryFunc := func(rCh <-chan exportResult, o ...Option) (log.Exporter, *grpcCollector) {
|
||||
coll, err := newGRPCCollector("", rCh)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx := context.Background()
|
||||
opts := append([]Option{
|
||||
WithEndpoint(coll.listener.Addr().String()),
|
||||
WithInsecure(),
|
||||
}, o...)
|
||||
exp, err := New(ctx, opts...)
|
||||
require.NoError(t, err)
|
||||
return exp, coll
|
||||
}
|
||||
|
||||
t.Run("WithHeaders", func(t *testing.T) {
|
||||
key := "my-custom-header"
|
||||
headers := map[string]string{key: "custom-value"}
|
||||
exp, coll := factoryFunc(nil, WithHeaders(headers))
|
||||
t.Cleanup(coll.srv.Stop)
|
||||
|
||||
ctx := context.Background()
|
||||
additionalKey := "additional-custom-header"
|
||||
ctx = metadata.AppendToOutgoingContext(ctx, additionalKey, "additional-value")
|
||||
require.NoError(t, exp.Export(ctx, make([]log.Record, 1)))
|
||||
// Ensure everything is flushed.
|
||||
require.NoError(t, exp.Shutdown(ctx))
|
||||
|
||||
got := metadata.Join(coll.headers)
|
||||
require.Regexp(t, "OTel Go OTLP over gRPC logs exporter/[01]\\..*", got)
|
||||
require.Contains(t, got, key)
|
||||
require.Contains(t, got, additionalKey)
|
||||
assert.Equal(t, []string{headers[key]}, got[key])
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user