(t *testing.T)
| 29 | ) |
| 30 | |
| 31 | func 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 |
nothing calls this directly
no test coverage detected