From 81e368dbb5b3b87c2051ad990f9cdaffa56af301 Mon Sep 17 00:00:00 2001 From: Alexander Weaver Date: Wed, 18 May 2022 10:17:08 -0500 Subject: [PATCH] Fix flaky test. Sort records and only test the important fields (#49120) --- pkg/tests/api/alerting/api_prometheus_test.go | 119 ++++++------------ 1 file changed, 38 insertions(+), 81 deletions(-) diff --git a/pkg/tests/api/alerting/api_prometheus_test.go b/pkg/tests/api/alerting/api_prometheus_test.go index 27bacda2206..d1557f7ebe5 100644 --- a/pkg/tests/api/alerting/api_prometheus_test.go +++ b/pkg/tests/api/alerting/api_prometheus_test.go @@ -7,6 +7,7 @@ import ( "fmt" "io/ioutil" "net/http" + "sort" "testing" "time" @@ -671,58 +672,16 @@ func TestPrometheusRulesPermissions(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - require.JSONEq(t, ` -{ - "status": "success", - "data": { - "groups": [{ - "name": "arulegroup", - "file": "folder1", - "rules": [{ - "state": "inactive", - "name": "rule under folder folder1", - "query": "[{\"refId\":\"A\",\"queryType\":\"\",\"relativeTimeRange\":{\"from\":18000,\"to\":10800},\"datasourceUid\":\"-100\",\"model\":{\"expression\":\"2 + 3 \\u003e 1\",\"intervalMs\":1000,\"maxDataPoints\":43200,\"type\":\"math\"}}]", - "duration": 120, - "annotations": { - "annotation1": "val1" - }, - "labels": { - "label1": "val1" - }, - "health": "ok", - "type": "alerting", - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }], - "interval": 60, - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }, - { - "name": "arulegroup", - "file": "folder2", - "rules": [{ - "state": "inactive", - "name": "rule under folder folder2", - "query": "[{\"refId\":\"A\",\"queryType\":\"\",\"relativeTimeRange\":{\"from\":18000,\"to\":10800},\"datasourceUid\":\"-100\",\"model\":{\"expression\":\"2 + 3 \\u003e 1\",\"intervalMs\":1000,\"maxDataPoints\":43200,\"type\":\"math\"}}]", - "duration": 120, - "annotations": { - "annotation1": "val1" - }, - "labels": { - "label1": "val1" - }, - "health": "ok", - "type": "alerting", - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }], - "interval": 60, - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }] - } -}`, string(b)) + body := asJson(t, b) + // Sort, for test consistency. + sort.Slice(body.Data.Groups, func(i, j int) bool { return body.Data.Groups[i].File < body.Data.Groups[j].File }) + require.Equal(t, "success", body.Status) + // The request should see both groups, and all rules underneath. + require.Len(t, body.Data.Groups, 2) + require.Len(t, body.Data.Groups[0].Rules, 1) + require.Len(t, body.Data.Groups[1].Rules, 1) + require.Equal(t, "folder1", body.Data.Groups[0].File) + require.Equal(t, "folder2", body.Data.Groups[1].File) } // remove permissions from folder2 @@ -743,35 +702,11 @@ func TestPrometheusRulesPermissions(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - require.JSONEq(t, ` -{ - "status": "success", - "data": { - "groups": [{ - "name": "arulegroup", - "file": "folder1", - "rules": [{ - "state": "inactive", - "name": "rule under folder folder1", - "query": "[{\"refId\":\"A\",\"queryType\":\"\",\"relativeTimeRange\":{\"from\":18000,\"to\":10800},\"datasourceUid\":\"-100\",\"model\":{\"expression\":\"2 + 3 \\u003e 1\",\"intervalMs\":1000,\"maxDataPoints\":43200,\"type\":\"math\"}}]", - "duration": 120, - "annotations": { - "annotation1": "val1" - }, - "labels": { - "label1": "val1" - }, - "health": "ok", - "type": "alerting", - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }], - "interval": 60, - "lastEvaluation": "0001-01-01T00:00:00Z", - "evaluationTime": 0 - }] - } -}`, string(b)) + body := asJson(t, b) + require.Equal(t, "success", body.Status) + require.Len(t, body.Data.Groups, 1) + require.Len(t, body.Data.Groups[0].Rules, 1) + require.Equal(t, "folder1", body.Data.Groups[0].File) } // remove permissions from folder1 @@ -840,3 +775,25 @@ func removeFolderPermission(t *testing.T, store *acdb.AccessControlStore, orgID, }, nil) } } + +func asJson(t *testing.T, blob []byte) rulesResponse { + t.Helper() + var r rulesResponse + require.NoError(t, json.Unmarshal(blob, &r)) + return r +} + +type rulesResponse struct { + Status string + Data rulesData +} + +type rulesData struct { + Groups []groupData +} + +type groupData struct { + Name string + File string + Rules []interface{} +}