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

Method TestConnectedMetric

internal/xds/clients/xdsclient/test/metrics_test.go:321–415  ·  view source on GitHub ↗

TestConnectedMetric verifies the "grpc.xds_client.connected" metric state transitions. It begins by ensuring no metrics are reported before connection is attempted. Then it establishes a connection by watching a valid resource and verifies the connected state pulses to 1. Finally, it stops the manag

(t *testing.T)

Source from the content-addressed store, hash-verified

319// and verifies the connected state pulses to 1. Finally, it stops the
320// management server and verifies the state drops back to 0.
321func (s) TestConnectedMetric(t *testing.T) {
322 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
323 defer cancel()
324
325 tmr := newTestMetricsReporter()
326 l, err := net.Listen("tcp", "localhost:0")
327 if err != nil {
328 t.Fatalf("net.Listen() failed: %v", err)
329 }
330
331 mgmtServer := e2e.StartManagementServer(t, e2e.ManagementServerOptions{Listener: l})
332 nodeID := uuid.New().String()
333
334 xdsClientConfig := xdsclient.Config{
335 Servers: []xdsclient.ServerConfig{{
336 ServerIdentifier: clients.ServerIdentifier{
337 ServerURI: mgmtServer.Address,
338 Extensions: grpctransport.ServerIdentifierExtension{ConfigName: "insecure"},
339 },
340 }},
341 Node: clients.Node{ID: nodeID},
342 TransportBuilder: grpctransport.NewBuilder(map[string]grpctransport.Config{
343 "insecure": {Credentials: insecure.NewBundle()},
344 }),
345 ResourceTypes: map[string]xdsclient.ResourceType{xdsresource.V3ListenerURL: listenerType},
346 Authorities: map[string]xdsclient.Authority{
347 "": {XDSServers: []xdsclient.ServerConfig{}},
348 },
349 MetricsReporter: tmr,
350 }
351 client, err := xdsclient.New(xdsClientConfig)
352 if err != nil {
353 t.Fatalf("Failed to create xDS client: %v", err)
354 }
355 defer client.Close()
356
357 tmr.triggerAsyncMetrics()
358 sCtx, sCancel := context.WithTimeout(ctx, defaultTestShortTimeout)
359 defer sCancel()
360 if err := tmr.waitForSpecificMetric(sCtx, &metrics.XDSClientConnected{ServerURI: mgmtServer.Address}); err == nil {
361 t.Fatal("XDSClientConnected metric reported before any watch was started")
362 }
363
364 const listenerName = "test-listener-resource"
365 resources := e2e.UpdateOptions{
366 NodeID: nodeID,
367 Listeners: []*v3listenerpb.Listener{e2e.DefaultClientListener(listenerName, "route-config")},
368 SkipValidation: true,
369 }
370 if err := mgmtServer.Update(ctx, resources); err != nil {
371 t.Fatalf("Failed to update management server: %v", err)
372 }
373 client.WatchResource(listenerType.TypeURL, listenerName, noopListenerWatcher{})
374
375 // Wait for the update to ensure we are connected.
376 if err := tmr.waitForMetric(ctx, &metrics.ResourceUpdateValid{ServerURI: mgmtServer.Address, ResourceType: "ListenerResource"}); err != nil {
377 t.Fatal(err)
378 }

Callers

nothing calls this directly

Calls 15

StartManagementServerFunction · 0.92
NewBuilderFunction · 0.92
NewBundleFunction · 0.92
NewFunction · 0.92
DefaultClientListenerFunction · 0.92
newTestMetricsReporterFunction · 0.85
triggerAsyncMetricsMethod · 0.80
waitForSpecificMetricMethod · 0.80
waitForMetricMethod · 0.80
numAsyncReportersMethod · 0.80
FatalfMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected