(t *testing.T)
| 131 | } |
| 132 | |
| 133 | func TestErrorInstrumentationMiddleware(t *testing.T) { |
| 134 | newRegistry := prometheus.NewRegistry() |
| 135 | prometheus.DefaultRegisterer = newRegistry |
| 136 | prometheus.DefaultGatherer = newRegistry |
| 137 | |
| 138 | var cfg Config |
| 139 | cfg.RegisterFlags(flag.NewFlagSet("", flag.ExitOnError)) |
| 140 | setAutoAssignedPorts(DefaultNetwork, &cfg) |
| 141 | |
| 142 | server, err := New(cfg) |
| 143 | require.NoError(t, err) |
| 144 | |
| 145 | fakeServer := FakeServer{} |
| 146 | RegisterFakeServerServer(server.GRPC, fakeServer) |
| 147 | |
| 148 | server.HTTP.HandleFunc("/succeed", func(http.ResponseWriter, *http.Request) { |
| 149 | }) |
| 150 | server.HTTP.HandleFunc("/error500", func(w http.ResponseWriter, _ *http.Request) { |
| 151 | w.WriteHeader(500) |
| 152 | }) |
| 153 | server.HTTP.HandleFunc("/sleep10", func(_ http.ResponseWriter, r *http.Request) { |
| 154 | _ = cancelableSleep(r.Context(), time.Second*10) |
| 155 | }) |
| 156 | server.HTTP.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { |
| 157 | w.WriteHeader(http.StatusNotFound) |
| 158 | }) |
| 159 | |
| 160 | go func() { |
| 161 | require.NoError(t, server.Run()) |
| 162 | }() |
| 163 | |
| 164 | conn, err := grpc.NewClient(server.GRPCListenAddr().String(), grpc.WithTransportCredentials(insecure.NewCredentials())) |
| 165 | require.NoError(t, err) |
| 166 | defer conn.Close() |
| 167 | |
| 168 | empty := emptypb.Empty{} |
| 169 | client := NewFakeServerClient(conn) |
| 170 | res, err := client.Succeed(context.Background(), &empty) |
| 171 | require.NoError(t, err) |
| 172 | empty.Reset() |
| 173 | require.EqualValues(t, &empty, res) |
| 174 | |
| 175 | res, err = client.FailWithError(context.Background(), &empty) |
| 176 | require.Nil(t, res) |
| 177 | require.Error(t, err) |
| 178 | |
| 179 | s, ok := status.FromError(err) |
| 180 | require.True(t, ok) |
| 181 | require.Equal(t, "test error", s.Message()) |
| 182 | |
| 183 | res, err = client.FailWithHTTPError(context.Background(), &FailWithHTTPErrorRequest{Code: http.StatusPaymentRequired}) |
| 184 | require.Nil(t, res) |
| 185 | errResp, ok := httpgrpc.HTTPResponseFromError(err) |
| 186 | require.True(t, ok) |
| 187 | require.Equal(t, int32(http.StatusPaymentRequired), errResp.Code) |
| 188 | require.Equal(t, "402", string(errResp.Body)) |
| 189 | |
| 190 | callThenCancel := func(f func(ctx context.Context) error) error { |
nothing calls this directly
no test coverage detected