MCPcopy
hub / github.com/grafana/dskit / TestGrpcStats

Function TestGrpcStats

middleware/grpc_stats_test.go:31–134  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

29)
30
31func TestGrpcStats(t *testing.T) {
32 reg := prometheus.NewRegistry()
33
34 received := promauto.With(reg).NewHistogramVec(prometheus.HistogramOpts{
35 Name: "received_payload_bytes",
36 Help: "Size of received gRPC messages",
37 Buckets: BodySizeBuckets,
38 }, []string{"method", "route"})
39
40 sent := promauto.With(reg).NewHistogramVec(prometheus.HistogramOpts{
41 Name: "sent_payload_bytes",
42 Help: "Size of sent gRPC",
43 Buckets: BodySizeBuckets,
44 }, []string{"method", "route"})
45
46 inflightRequests := promauto.With(reg).NewGaugeVec(prometheus.GaugeOpts{
47 Name: "inflight_requests",
48 Help: "Current number of inflight requests.",
49 }, []string{"method", "route"})
50
51 stats := NewStatsHandler(reg, received, sent, inflightRequests, true)
52
53 serv := grpc.NewServer(grpc.StatsHandler(stats), grpc.MaxRecvMsgSize(10e6))
54 defer serv.GracefulStop()
55
56 listener, err := net.Listen("tcp", "localhost:0")
57 require.NoError(t, err)
58
59 grpc_health_v1.RegisterHealthServer(serv, health.NewServer())
60
61 go func() {
62 require.NoError(t, serv.Serve(listener))
63 }()
64
65 closed := false
66 conn, err := grpc.NewClient(listener.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
67 require.NoError(t, err)
68 defer func() {
69 if !closed {
70 require.NoError(t, conn.Close())
71 }
72 }()
73
74 hc := grpc_health_v1.NewHealthClient(conn)
75
76 // First request (empty).
77 resp, err := hc.Check(context.Background(), &grpc_health_v1.HealthCheckRequest{})
78 require.NoError(t, err)
79 require.Equal(t, grpc_health_v1.HealthCheckResponse_SERVING, resp.Status)
80
81 // Second request, with large service name. This returns error, which doesn't count as "payload".
82 _, err = hc.Check(context.Background(), &grpc_health_v1.HealthCheckRequest{
83 Service: generateString(8 * 1024 * 1024),
84 })
85 require.EqualError(t, err, "rpc error: code = NotFound desc = unknown service")
86
87 err = testutil.GatherAndCompare(reg, bytes.NewBufferString(`
88 # HELP received_payload_bytes Size of received gRPC messages

Callers

nothing calls this directly

Calls 7

NewStatsHandlerFunction · 0.85
generateStringFunction · 0.85
WithMethod · 0.80
StringMethod · 0.65
CloseMethod · 0.65
CheckMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected