From 318f38d4c5203be41ae64c3b76182a963ae84769 Mon Sep 17 00:00:00 2001 From: Kanika Rana <46766610+ranakan19@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:19:12 -0500 Subject: [PATCH] tests: wait for metrics server to be up before testing (#378) --- pkg/metrics/metrics_test.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/metrics/metrics_test.go b/pkg/metrics/metrics_test.go index 57ed71e9..f8ae3057 100644 --- a/pkg/metrics/metrics_test.go +++ b/pkg/metrics/metrics_test.go @@ -7,6 +7,7 @@ import ( clientmodel "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "io" "net/http" "strings" "testing" @@ -63,6 +64,30 @@ func TestMetricsServer(t *testing.T) { testMetrics := NewProxyMetrics(reg) server := testMetrics.StartMetricsServer() require.NotNil(t, server) + // Wait up to N seconds for the Metrics server to start + ready := false + sec := 10 + for i := 0; i < sec; i++ { + req, err := http.NewRequest("GET", "http://localhost:8082/metrics", nil) + require.NoError(t, err) + require.NotNil(t, req) + resp, err := http.DefaultClient.Do(req) + if err != nil { + time.Sleep(time.Second) + continue + } + _, _ = io.Copy(io.Discard, resp.Body) + _ = resp.Body.Close() + if resp.StatusCode != http.StatusOK { + // The server may be running but still not fully ready to accept requests + time.Sleep(time.Second) + continue + } + // Server is up and running! + ready = true + break + } + require.True(t, ready, "Metrics Server is not ready after %d seconds", sec) defer func() { _ = server.Close() }()