[v10.2.x] Chore: Fix test to retry fetching provisioned dashboard until is in place (#88936)

Chore: Fix test to retry fetching provisioned dashboard until is in place (#85408)

Retry fetching provisioned dashboard until is in place

(cherry picked from commit 88be09420c)

Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
This commit is contained in:
grafana-delivery-bot[bot]
2024-06-07 19:52:56 +03:00
committed by GitHub
co-authored by Sofia Papagiannaki
parent 0bf424bdb7
commit 94db365865
+31 -13
View File
@@ -11,6 +11,7 @@ import (
"os"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -31,6 +32,7 @@ import (
"github.com/grafana/grafana/pkg/services/user/userimpl"
"github.com/grafana/grafana/pkg/tests/testinfra"
"github.com/grafana/grafana/pkg/util"
"github.com/grafana/grafana/pkg/util/retryer"
)
func TestIntegrationDashboardQuota(t *testing.T) {
@@ -164,21 +166,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 {