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

Function TestHTTPInstrumentationMetrics

server/server_test.go:278–486  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

276}
277
278func 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)

Callers

nothing calls this directly

Calls 15

RegisterFlagsMethod · 0.95
setAutoAssignedPortsFunction · 0.85
cancelableSleepFunction · 0.85
httpTargetFunction · 0.85
CopyMethod · 0.80
RunMethod · 0.80
NewFunction · 0.70
SleepMethod · 0.65
WriteMethod · 0.45
WriteHeaderMethod · 0.45
ContextMethod · 0.45
DoMethod · 0.45

Tested by

no test coverage detected