From 88be09420c1f24f3e0654bcdc74d70dea78a6449 Mon Sep 17 00:00:00 2001 From: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:47:34 +0200 Subject: [PATCH] Chore: Fix test to retry fetching provisioned dashboard until is in place (#85408) Retry fetching provisioned dashboard until is in place --- .../api/dashboards/api_dashboards_test.go | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/pkg/tests/api/dashboards/api_dashboards_test.go b/pkg/tests/api/dashboards/api_dashboards_test.go index 8245e1f7692..9ac5da995a2 100644 --- a/pkg/tests/api/dashboards/api_dashboards_test.go +++ b/pkg/tests/api/dashboards/api_dashboards_test.go @@ -11,6 +11,7 @@ import ( "os" "path/filepath" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -33,6 +34,7 @@ import ( "github.com/grafana/grafana/pkg/tests/testinfra" "github.com/grafana/grafana/pkg/tests/testsuite" "github.com/grafana/grafana/pkg/util" + "github.com/grafana/grafana/pkg/util/retryer" ) func TestMain(m *testing.M) { @@ -172,21 +174,37 @@ providers: t.Run("when provisioned directory is not empty, dashboard should be created", func(t *testing.T) { title := "Grafana Dev Overview & Home" - u := fmt.Sprintf("http://admin:admin@%s/api/search?query=%s", grafanaListedAddr, url.QueryEscape(title)) - // nolint:gosec - resp, err := http.Get(u) - require.NoError(t, err) - assert.Equal(t, http.StatusOK, resp.StatusCode) - t.Cleanup(func() { - err := resp.Body.Close() - require.NoError(t, err) - }) - b, err := io.ReadAll(resp.Body) - require.NoError(t, err) dashboardList := &model.HitList{} - err = json.Unmarshal(b, dashboardList) + + retry := 0 + retries := 5 + // retry until the provisioned dashboard is ready + err := retryer.Retry(func() (retryer.RetrySignal, error) { + retry++ + u := fmt.Sprintf("http://admin:admin@%s/api/search?query=%s", grafanaListedAddr, url.QueryEscape(title)) + // nolint:gosec + resp, err := http.Get(u) + require.NoError(t, err) + assert.Equal(t, http.StatusOK, resp.StatusCode) + t.Cleanup(func() { + err := resp.Body.Close() + require.NoError(t, err) + }) + b, err := io.ReadAll(resp.Body) + require.NoError(t, err) + err = json.Unmarshal(b, dashboardList) + require.NoError(t, err) + if dashboardList.Len() == 0 { + if retry >= retries { + return retryer.FuncError, fmt.Errorf("max retries exceeded") + } + t.Log("Dashboard is not ready", "retry", retry) + return retryer.FuncFailure, nil + } + return retryer.FuncComplete, nil + }, retries, time.Millisecond*time.Duration(10), time.Second) require.NoError(t, err) - assert.Equal(t, 1, dashboardList.Len()) + var dashboardUID string var dashboardID int64 for _, d := range *dashboardList {