(t *testing.T)
| 276 | } |
| 277 | |
| 278 | func TestHTTPInstrumentationMetrics(t *testing.T) { |
| 279 | reg := prometheus.NewRegistry() |
| 280 | prometheus.DefaultRegisterer = reg |
| 281 | prometheus.DefaultGatherer = reg |
| 282 | |
| 283 | var cfg Config |
| 284 | cfg.PerTenantInstrumentation = func(_ context.Context) *middleware.PerTenantConfig { |
| 285 | return &middleware.PerTenantConfig{ |
| 286 | TenantID: "test", |
| 287 | TotalCounter: true, |
| 288 | } |
| 289 | } |
| 290 | cfg.RegisterFlags(flag.NewFlagSet("", flag.ExitOnError)) |
| 291 | setAutoAssignedPorts(DefaultNetwork, &cfg) |
| 292 | |
| 293 | server, err := New(cfg) |
| 294 | require.NoError(t, err) |
| 295 | |
| 296 | server.HTTP.HandleFunc("/succeed", func(w http.ResponseWriter, _ *http.Request) { |
| 297 | _, _ = w.Write([]byte("OK")) |
| 298 | }) |
| 299 | server.HTTP.HandleFunc("/error500", func(w http.ResponseWriter, _ *http.Request) { |
| 300 | w.WriteHeader(500) |
| 301 | }) |
| 302 | server.HTTP.HandleFunc("/sleep10", func(_ http.ResponseWriter, r *http.Request) { |
| 303 | _, _ = io.Copy(io.Discard, r.Body) // Consume body, otherwise it's not counted. |
| 304 | _ = cancelableSleep(r.Context(), time.Second*10) |
| 305 | }) |
| 306 | |
| 307 | go func() { |
| 308 | require.NoError(t, server.Run()) |
| 309 | }() |
| 310 | |
| 311 | callThenCancel := func(f func(ctx context.Context) error) error { |
| 312 | ctx, cancel := context.WithCancel(context.Background()) |
| 313 | errChan := make(chan error, 1) |
| 314 | go func() { |
| 315 | errChan <- f(ctx) |
| 316 | }() |
| 317 | time.Sleep(50 * time.Millisecond) // allow the call to reach the handler |
| 318 | cancel() |
| 319 | return <-errChan |
| 320 | } |
| 321 | |
| 322 | // Now test the HTTP versions of the functions |
| 323 | { |
| 324 | req, err := http.NewRequest("GET", httpTarget(server, "/succeed"), nil) |
| 325 | require.NoError(t, err) |
| 326 | resp, err := http.DefaultClient.Do(req) |
| 327 | require.NoError(t, err) |
| 328 | body, err := io.ReadAll(resp.Body) |
| 329 | require.NoError(t, err) |
| 330 | require.Equal(t, "OK", string(body)) |
| 331 | } |
| 332 | { |
| 333 | req, err := http.NewRequest("GET", httpTarget(server, "/error500"), nil) |
| 334 | require.NoError(t, err) |
| 335 | _, err = http.DefaultClient.Do(req) |
nothing calls this directly
no test coverage detected