fix grpc set metadata multi-value (#11308)
Co-authored-by: Lauri Tulmin <ltulmin@splunk.com>
This commit is contained in:
parent
0d9c9a70bb
commit
a47c406e57
|
@ -13,6 +13,8 @@ enum MetadataSetter implements TextMapSetter<Metadata> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void set(Metadata carrier, String key, String value) {
|
public void set(Metadata carrier, String key, String value) {
|
||||||
carrier.put(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER), value);
|
Metadata.Key<String> metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER);
|
||||||
|
carrier.removeAll(metadataKey);
|
||||||
|
carrier.put(metadataKey, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.grpc.v1_6;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import io.grpc.Metadata;
|
||||||
|
import io.opentelemetry.api.trace.Span;
|
||||||
|
import io.opentelemetry.api.trace.SpanContext;
|
||||||
|
import io.opentelemetry.api.trace.SpanId;
|
||||||
|
import io.opentelemetry.api.trace.TraceFlags;
|
||||||
|
import io.opentelemetry.api.trace.TraceId;
|
||||||
|
import io.opentelemetry.api.trace.TraceState;
|
||||||
|
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
|
||||||
|
import io.opentelemetry.context.Context;
|
||||||
|
import io.opentelemetry.context.propagation.TextMapGetter;
|
||||||
|
import io.opentelemetry.context.propagation.TextMapPropagator;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class MetadataSetterTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void overwriteTracingHeader() {
|
||||||
|
Metadata metadata = new Metadata();
|
||||||
|
TextMapPropagator propagator = W3CTraceContextPropagator.getInstance();
|
||||||
|
for (int i = 1; i <= 2; i++) {
|
||||||
|
Context context =
|
||||||
|
Context.root()
|
||||||
|
.with(
|
||||||
|
Span.wrap(
|
||||||
|
SpanContext.create(
|
||||||
|
TraceId.fromLongs(0, i),
|
||||||
|
SpanId.fromLong(i),
|
||||||
|
TraceFlags.getDefault(),
|
||||||
|
TraceState.getDefault())));
|
||||||
|
propagator.inject(context, metadata, MetadataSetter.INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(metadata.getAll(Metadata.Key.of("traceparent", Metadata.ASCII_STRING_MARSHALLER)))
|
||||||
|
.hasSize(1);
|
||||||
|
|
||||||
|
Context context =
|
||||||
|
propagator.extract(
|
||||||
|
Context.root(),
|
||||||
|
metadata,
|
||||||
|
new TextMapGetter<Metadata>() {
|
||||||
|
@Override
|
||||||
|
public Iterable<String> keys(Metadata metadata) {
|
||||||
|
return metadata.keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public String get(@Nullable Metadata metadata, String key) {
|
||||||
|
return metadata.get(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
SpanContext spanContext = Span.fromContext(context).getSpanContext();
|
||||||
|
assertThat(spanContext.getTraceId()).isEqualTo(TraceId.fromLongs(0, 2));
|
||||||
|
assertThat(spanContext.getSpanId()).isEqualTo(SpanId.fromLong(2));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue