TestTelemetryLabels tests that telemetry labels from CDS make their way to the stats handler. The stats handler sets the mutable context value that the cluster impl picker will write telemetry labels to, and then the stats handler asserts that subsequent HandleRPC calls from the RPC lifecycle contai
(t *testing.T)
| 55 | // handler asserts that subsequent HandleRPC calls from the RPC lifecycle |
| 56 | // contain telemetry labels that it can see. |
| 57 | func (s) TestTelemetryLabels(t *testing.T) { |
| 58 | managementServer, nodeID, _, xdsResolver := setup.ManagementServerAndResolver(t) |
| 59 | |
| 60 | server := stubserver.StartTestService(t, nil) |
| 61 | defer server.Stop() |
| 62 | |
| 63 | const xdsServiceName = "my-service-client-side-xds" |
| 64 | resources := e2e.DefaultClientResources(e2e.ResourceParams{ |
| 65 | DialTarget: xdsServiceName, |
| 66 | NodeID: nodeID, |
| 67 | Host: "localhost", |
| 68 | Port: testutils.ParsePort(t, server.Address), |
| 69 | SecLevel: e2e.SecurityLevelNone, |
| 70 | }) |
| 71 | |
| 72 | resources.Clusters[0].Metadata = &v3corepb.Metadata{ |
| 73 | FilterMetadata: map[string]*structpb.Struct{ |
| 74 | "com.google.csm.telemetry_labels": { |
| 75 | Fields: map[string]*structpb.Value{ |
| 76 | serviceNameKey: structpb.NewStringValue(serviceNameValue), |
| 77 | serviceNamespaceKey: structpb.NewStringValue(serviceNamespaceValue), |
| 78 | }, |
| 79 | }, |
| 80 | }, |
| 81 | } |
| 82 | |
| 83 | ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 84 | defer cancel() |
| 85 | if err := managementServer.Update(ctx, resources); err != nil { |
| 86 | t.Fatal(err) |
| 87 | } |
| 88 | |
| 89 | fsh := &fakeStatsHandler{ |
| 90 | t: t, |
| 91 | } |
| 92 | |
| 93 | cc, err := grpc.NewClient(fmt.Sprintf("xds:///%s", xdsServiceName), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithResolvers(xdsResolver), grpc.WithStatsHandler(fsh)) |
| 94 | if err != nil { |
| 95 | t.Fatalf("failed to create a new client to local test server: %v", err) |
| 96 | } |
| 97 | defer cc.Close() |
| 98 | |
| 99 | client := testgrpc.NewTestServiceClient(cc) |
| 100 | if _, err := client.EmptyCall(ctx, &testpb.Empty{}, grpc.WaitForReady(true)); err != nil { |
| 101 | t.Fatalf("rpc EmptyCall() failed: %v", err) |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | type fakeStatsHandler struct { |
| 106 | labels map[string]string |
nothing calls this directly
no test coverage detected