Skip to content

Commit 8afaf2c

Browse files
committed
Fix gRPC testStableSemconv: handle stable RPC semconv in test assertions
Update gRPC test assertions to handle both old and stable RPC semantic conventions using ternary expressions with emitOldRpcSemconv()/emitStableRpcSemconv(). - Use equalTo(RPC_SYSTEM, emitOldRpcSemconv() ? "grpc" : null) for old attrs - Add equalTo(RPC_SYSTEM_NAME, emitStableRpcSemconv() ? "grpc" : null) for stable - Handle error.type attribute in stable mode for error test cases - Update RpcMetricsAdvice to conditionally include stable/old attribute keys
1 parent e21db4e commit 8afaf2c

4 files changed

Lines changed: 297 additions & 101 deletions

File tree

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcMetricsAdvice.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,47 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.rpc;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldRpcSemconv;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableRpcSemconv;
810
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TRANSPORT;
911
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE;
1012
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
1113
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;
12-
import static java.util.Arrays.asList;
1314

1415
import io.opentelemetry.api.common.AttributeKey;
1516
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
1617
import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
1718
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
1819
import io.opentelemetry.api.metrics.LongHistogramBuilder;
20+
import java.util.ArrayList;
21+
import java.util.Collections;
1922
import java.util.List;
2023

2124
final class RpcMetricsAdvice {
2225

2326
// copied from RpcIncubatingAttributes
2427
private static final AttributeKey<Long> RPC_GRPC_STATUS_CODE =
2528
AttributeKey.longKey("rpc.grpc.status_code");
26-
private static final List<AttributeKey<?>> RPC_METRICS_ATTRIBUTE_KEYS =
27-
asList(
28-
RpcCommonAttributesExtractor.RPC_SYSTEM,
29-
RpcCommonAttributesExtractor.RPC_SERVICE,
30-
RpcCommonAttributesExtractor.RPC_METHOD,
31-
RPC_GRPC_STATUS_CODE,
32-
NETWORK_TYPE,
33-
NETWORK_TRANSPORT,
34-
SERVER_ADDRESS,
35-
SERVER_PORT);
29+
30+
private static final List<AttributeKey<?>> RPC_METRICS_ATTRIBUTE_KEYS;
31+
32+
static {
33+
List<AttributeKey<?>> keys = new ArrayList<>();
34+
if (emitOldRpcSemconv()) {
35+
keys.add(RpcCommonAttributesExtractor.RPC_SYSTEM);
36+
keys.add(RpcCommonAttributesExtractor.RPC_SERVICE);
37+
}
38+
if (emitStableRpcSemconv()) {
39+
keys.add(RpcCommonAttributesExtractor.RPC_SYSTEM_NAME);
40+
}
41+
keys.add(RpcCommonAttributesExtractor.RPC_METHOD);
42+
keys.add(RPC_GRPC_STATUS_CODE);
43+
keys.add(NETWORK_TYPE);
44+
keys.add(NETWORK_TRANSPORT);
45+
keys.add(SERVER_ADDRESS);
46+
keys.add(SERVER_PORT);
47+
RPC_METRICS_ATTRIBUTE_KEYS = Collections.unmodifiableList(keys);
48+
}
3649

3750
static void applyClientDurationAdvice(DoubleHistogramBuilder builder) {
3851
if (!(builder instanceof ExtendedDoubleHistogramBuilder)) {

instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.javaagent.instrumentation.armeria.grpc.v1_14;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldRpcSemconv;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableRpcSemconv;
810
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
911
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
1012
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;
@@ -31,6 +33,9 @@
3133

3234
class ArmeriaGrpcTest {
3335

36+
private static final io.opentelemetry.api.common.AttributeKey<String> RPC_SYSTEM_NAME =
37+
io.opentelemetry.api.common.AttributeKey.stringKey("rpc.system.name");
38+
3439
@RegisterExtension
3540
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
3641

@@ -78,9 +83,10 @@ void grpcInstrumentation() {
7883
.hasKind(SpanKind.CLIENT)
7984
.hasParent(trace.getSpan(0))
8085
.hasAttributesSatisfyingExactly(
81-
equalTo(RPC_SYSTEM, "grpc"),
82-
equalTo(RPC_SERVICE, "example.Greeter"),
83-
equalTo(RPC_METHOD, "SayHello"),
86+
equalTo(RPC_SYSTEM, emitOldRpcSemconv() ? "grpc" : null),
87+
equalTo(RPC_SYSTEM_NAME, emitStableRpcSemconv() ? "grpc" : null),
88+
equalTo(RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null),
89+
equalTo(RPC_METHOD, emitOldRpcSemconv() ? "SayHello" : null),
8490
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
8591
equalTo(SERVER_ADDRESS, "127.0.0.1"),
8692
equalTo(SERVER_PORT, (long) server.httpPort()))
@@ -101,9 +107,10 @@ void grpcInstrumentation() {
101107
.hasKind(SpanKind.SERVER)
102108
.hasParent(trace.getSpan(1))
103109
.hasAttributesSatisfyingExactly(
104-
equalTo(RPC_SYSTEM, "grpc"),
105-
equalTo(RPC_SERVICE, "example.Greeter"),
106-
equalTo(RPC_METHOD, "SayHello"),
110+
equalTo(RPC_SYSTEM, emitOldRpcSemconv() ? "grpc" : null),
111+
equalTo(RPC_SYSTEM_NAME, emitStableRpcSemconv() ? "grpc" : null),
112+
equalTo(RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null),
113+
equalTo(RPC_METHOD, emitOldRpcSemconv() ? "SayHello" : null),
107114
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
108115
equalTo(SERVER_ADDRESS, "127.0.0.1"),
109116
equalTo(SERVER_PORT, server.httpPort()))

instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.instrumentation.grpc.v1_6;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldRpcSemconv;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableRpcSemconv;
810
import static io.opentelemetry.instrumentation.grpc.v1_6.AbstractGrpcTest.addExtraClientAttributes;
911
import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.GRPC_RECEIVED_MESSAGE_COUNT;
1012
import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.GRPC_SENT_MESSAGE_COUNT;
@@ -57,6 +59,9 @@
5759
@SuppressWarnings("deprecation") // using deprecated semconv
5860
public abstract class AbstractGrpcStreamingTest {
5961

62+
private static final io.opentelemetry.api.common.AttributeKey<String> RPC_SYSTEM_NAME =
63+
io.opentelemetry.api.common.AttributeKey.stringKey("rpc.system.name");
64+
6065
protected abstract ServerBuilder<?> configureServer(ServerBuilder<?> server);
6166

6267
protected abstract ManagedChannelBuilder<?> configureClient(ManagedChannelBuilder<?> client);
@@ -243,9 +248,14 @@ public void onCompleted() {
243248
experimentalSatisfies(
244249
GRPC_SENT_MESSAGE_COUNT,
245250
v -> assertThat(v).isGreaterThan(0)),
246-
equalTo(RPC_SYSTEM, "grpc"),
247-
equalTo(RPC_SERVICE, "example.Greeter"),
248-
equalTo(RPC_METHOD, "Conversation"),
251+
equalTo(RPC_SYSTEM, emitOldRpcSemconv() ? "grpc" : null),
252+
equalTo(
253+
RPC_SYSTEM_NAME, emitStableRpcSemconv() ? "grpc" : null),
254+
equalTo(
255+
RPC_SERVICE,
256+
emitOldRpcSemconv() ? "example.Greeter" : null),
257+
equalTo(
258+
RPC_METHOD, emitOldRpcSemconv() ? "Conversation" : null),
249259
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
250260
equalTo(SERVER_ADDRESS, "localhost"),
251261
equalTo(SERVER_PORT, (long) server.getPort())))
@@ -263,9 +273,11 @@ public void onCompleted() {
263273
v -> assertThat(v).isGreaterThan(0)),
264274
experimentalSatisfies(
265275
GRPC_SENT_MESSAGE_COUNT, v -> assertThat(v).isGreaterThan(0)),
266-
equalTo(RPC_SYSTEM, "grpc"),
267-
equalTo(RPC_SERVICE, "example.Greeter"),
268-
equalTo(RPC_METHOD, "Conversation"),
276+
equalTo(RPC_SYSTEM, emitOldRpcSemconv() ? "grpc" : null),
277+
equalTo(RPC_SYSTEM_NAME, emitStableRpcSemconv() ? "grpc" : null),
278+
equalTo(
279+
RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null),
280+
equalTo(RPC_METHOD, emitOldRpcSemconv() ? "Conversation" : null),
269281
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
270282
equalTo(SERVER_ADDRESS, "localhost"),
271283
equalTo(SERVER_PORT, server.getPort()),
@@ -300,9 +312,18 @@ public void onCompleted() {
300312
point ->
301313
point.hasAttributesSatisfying(
302314
equalTo(SERVER_ADDRESS, "localhost"),
303-
equalTo(RPC_METHOD, "Conversation"),
304-
equalTo(RPC_SERVICE, "example.Greeter"),
305-
equalTo(RPC_SYSTEM, "grpc"),
315+
equalTo(
316+
RPC_METHOD,
317+
emitOldRpcSemconv() ? "Conversation" : null),
318+
equalTo(
319+
RPC_SERVICE,
320+
emitOldRpcSemconv() ? "example.Greeter" : null),
321+
equalTo(
322+
RPC_SYSTEM,
323+
emitOldRpcSemconv() ? "grpc" : null),
324+
equalTo(
325+
RPC_SYSTEM_NAME,
326+
emitStableRpcSemconv() ? "grpc" : null),
306327
equalTo(
307328
RPC_GRPC_STATUS_CODE,
308329
(long) Status.Code.OK.value()))))));
@@ -322,9 +343,18 @@ public void onCompleted() {
322343
point.hasAttributesSatisfying(
323344
equalTo(SERVER_ADDRESS, "localhost"),
324345
equalTo(SERVER_PORT, server.getPort()),
325-
equalTo(RPC_METHOD, "Conversation"),
326-
equalTo(RPC_SERVICE, "example.Greeter"),
327-
equalTo(RPC_SYSTEM, "grpc"),
346+
equalTo(
347+
RPC_METHOD,
348+
emitOldRpcSemconv() ? "Conversation" : null),
349+
equalTo(
350+
RPC_SERVICE,
351+
emitOldRpcSemconv() ? "example.Greeter" : null),
352+
equalTo(
353+
RPC_SYSTEM,
354+
emitOldRpcSemconv() ? "grpc" : null),
355+
equalTo(
356+
RPC_SYSTEM_NAME,
357+
emitStableRpcSemconv() ? "grpc" : null),
328358
equalTo(
329359
RPC_GRPC_STATUS_CODE,
330360
(long) Status.Code.OK.value()))))));

0 commit comments

Comments
 (0)