MCPcopy
hub / github.com/grpc/grpc-go / TestRelayContextCollisionMetrics

Method TestRelayContextCollisionMetrics

stats/opentelemetry/e2e_test.go:2349–2400  ·  view source on GitHub ↗

TestRelayContextCollisionMetrics verifies that when an application acts as both a server and a client using the same context, the client metrics do not inherit or overwrite the server's telemetry metadata (e.g., grpc.method).

(t *testing.T)

Source from the content-addressed store, hash-verified

2347// both a server and a client using the same context, the client metrics do not
2348// inherit or overwrite the server's telemetry metadata (e.g., grpc.method).
2349func (s) TestRelayContextCollisionMetrics(t *testing.T) {
2350 backendMetricsOpts, _ := defaultMetricsOptions(t, nil)
2351 backendServer := setupStubServer(t, backendMetricsOpts, nil)
2352 backendServer.EmptyCallF = func(_ context.Context, _ *testpb.Empty) (*testpb.Empty, error) {
2353 return nil, status.Error(codes.Unimplemented, "EmptyCall not implemented")
2354 }
2355 defer backendServer.Stop()
2356
2357 relayMetricsOpts, relayMetricsReader := defaultMetricsOptions(t, nil)
2358 otelOpts := opentelemetry.Options{MetricsOptions: *relayMetricsOpts}
2359
2360 relayServer := &stubserver.StubServer{
2361 UnaryCallF: func(ctx context.Context, _ *testpb.SimpleRequest) (*testpb.SimpleResponse, error) {
2362 relayCC, err := grpc.NewClient(
2363 backendServer.Address,
2364 grpc.WithTransportCredentials(insecure.NewCredentials()),
2365 opentelemetry.DialOption(otelOpts),
2366 )
2367 if err != nil {
2368 return nil, fmt.Errorf("failed to create relay client: %v", err)
2369 }
2370 defer relayCC.Close()
2371 client := testgrpc.NewTestServiceClient(relayCC)
2372 _, err = client.EmptyCall(ctx, &testpb.Empty{})
2373 if status.Code(err) != codes.Unimplemented {
2374 t.Errorf("Expected Unimplemented error, got: %v", err)
2375 }
2376 return &testpb.SimpleResponse{}, nil
2377 },
2378 }
2379 if err := relayServer.Start([]grpc.ServerOption{opentelemetry.ServerOption(otelOpts)}, opentelemetry.DialOption(otelOpts)); err != nil {
2380 t.Fatalf("Failed to start relay server: %v", err)
2381 }
2382 defer relayServer.Stop()
2383
2384 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
2385 defer cancel()
2386
2387 if _, err := relayServer.Client.UnaryCall(ctx, &testpb.SimpleRequest{}); err != nil {
2388 t.Fatalf("Unexpected UnaryCall error: %v", err)
2389 }
2390
2391 // Verify Server Metric Identity is retained.
2392 if err := checkMetricWithMethod(ctx, relayMetricsReader, "grpc.server.call.started", "grpc.testing.TestService/UnaryCall"); err != nil {
2393 t.Fatal(err)
2394 }
2395
2396 // Verify Client Metric Identity correctly resolved to "grpc.testing.TestService/EmptyCall".
2397 if err := checkMetricWithMethod(ctx, relayMetricsReader, "grpc.client.attempt.started", "grpc.testing.TestService/EmptyCall"); err != nil {
2398 t.Fatal(err)
2399 }
2400}
2401
2402// TestRelayContextCollisionTracing verifies that span context is correctly
2403// propagated from incoming server requests to outgoing client requests without

Callers

nothing calls this directly

Calls 15

EmptyCallMethod · 0.95
StartMethod · 0.95
StopMethod · 0.95
ErrorFunction · 0.92
NewClientFunction · 0.92
WithTransportCredentialsFunction · 0.92
NewCredentialsFunction · 0.92
DialOptionFunction · 0.92
CodeFunction · 0.92
ServerOptionFunction · 0.92
defaultMetricsOptionsFunction · 0.85
setupStubServerFunction · 0.85

Tested by

no test coverage detected