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

Method TestRLSDefaultTargetPickMetric

balancer/rls/metrics_test.go:170–275  ·  view source on GitHub ↗

TestRLSDefaultTargetPickMetric tests RLS Metrics in the case an RLS Balancer falls back to the default target for an RPC. This should emit a "grpc.lb.rls.default_target_picks" with certain labels and cache metrics with certain labels.

(t *testing.T)

Source from the content-addressed store, hash-verified

168// "grpc.lb.rls.default_target_picks" with certain labels and cache metrics with
169// certain labels.
170func (s) TestRLSDefaultTargetPickMetric(t *testing.T) {
171 // Overwrite the uuid random number generator to be deterministic.
172 uuid.SetRand(rand.New(rand.NewSource(1)))
173 defer uuid.SetRand(nil)
174
175 rlsServer, _ := rlstest.SetupFakeRLSServer(t, nil)
176 // Build RLS service config with a default target.
177 rlsConfig := buildBasicRLSConfigWithChildPolicy(t, t.Name(), rlsServer.Address)
178 backend := &stubserver.StubServer{
179 EmptyCallF: func(context.Context, *testpb.Empty) (*testpb.Empty, error) {
180 return &testpb.Empty{}, nil
181 },
182 }
183 if err := backend.StartServer(); err != nil {
184 t.Fatalf("Failed to start backend: %v", err)
185 }
186 t.Logf("Started TestService backend at: %q", backend.Address)
187 defer backend.Stop()
188 rlsConfig.RouteLookupConfig.DefaultTarget = backend.Address
189
190 r := startManualResolverWithConfig(t, rlsConfig)
191 reader := metric.NewManualReader()
192 provider := metric.NewMeterProvider(metric.WithReader(reader))
193 mo := opentelemetry.MetricsOptions{
194 MeterProvider: provider,
195 Metrics: opentelemetry.DefaultMetrics().Add("grpc.lb.rls.cache_entries", "grpc.lb.rls.cache_size", "grpc.lb.rls.default_target_picks", "grpc.lb.rls.target_picks", "grpc.lb.rls.failed_picks"),
196 OptionalLabels: []string{"grpc.client.call.custom"},
197 }
198 grpcTarget := r.Scheme() + ":///"
199 cc, err := grpc.NewClient(grpcTarget, grpc.WithResolvers(r), grpc.WithTransportCredentials(insecure.NewCredentials()), opentelemetry.DialOption(opentelemetry.Options{MetricsOptions: mo}))
200 if err != nil {
201 t.Fatalf("Failed to dial local test server: %v", err)
202 }
203 defer cc.Close()
204
205 wantMetrics := []metricdata.Metrics{
206 {
207 Name: "grpc.lb.rls.default_target_picks",
208 Description: "EXPERIMENTAL. Number of LB picks sent to the default target.",
209 Unit: "{pick}",
210 Data: metricdata.Sum[int64]{
211 DataPoints: []metricdata.DataPoint[int64]{
212 {
213 Attributes: attribute.NewSet(attribute.String("grpc.target", grpcTarget), attribute.String("grpc.lb.rls.server_target", rlsServer.Address), attribute.String("grpc.lb.rls.data_plane_target", backend.Address), attribute.String("grpc.lb.pick_result", "complete"), attribute.String("grpc.client.call.custom", "default-target-pick-custom")),
214 Value: 1,
215 },
216 },
217 Temporality: metricdata.CumulativeTemporality,
218 IsMonotonic: true,
219 },
220 },
221 // Receives a RLS Response with target information, so a single cache
222 // entry with a certain size.
223 {
224 Name: "grpc.lb.rls.cache_entries",
225 Description: "EXPERIMENTAL. Number of entries in the RLS cache.",
226 Unit: "{entry}",
227 Data: metricdata.Gauge[int64]{

Callers

nothing calls this directly

Calls 15

StartServerMethod · 0.95
StopMethod · 0.95
EmptyCallMethod · 0.95
DefaultMetricsFunction · 0.92
NewClientFunction · 0.92
WithResolversFunction · 0.92
WithTransportCredentialsFunction · 0.92
NewCredentialsFunction · 0.92
DialOptionFunction · 0.92
metricsDataFromReaderFunction · 0.70

Tested by

no test coverage detected