Fix flaky test. Sort records and only test the important fields (#49120)

This commit is contained in:
Alexander Weaver
2022-05-18 10:17:08 -05:00
committed by GitHub
parent eecee16b66
commit 81e368dbb5

View File

@ -7,6 +7,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"sort"
"testing" "testing"
"time" "time"
@ -671,58 +672,16 @@ func TestPrometheusRulesPermissions(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode) require.Equal(t, 200, resp.StatusCode)
require.JSONEq(t, ` body := asJson(t, b)
{ // Sort, for test consistency.
"status": "success", sort.Slice(body.Data.Groups, func(i, j int) bool { return body.Data.Groups[i].File < body.Data.Groups[j].File })
"data": { require.Equal(t, "success", body.Status)
"groups": [{ // The request should see both groups, and all rules underneath.
"name": "arulegroup", require.Len(t, body.Data.Groups, 2)
"file": "folder1", require.Len(t, body.Data.Groups[0].Rules, 1)
"rules": [{ require.Len(t, body.Data.Groups[1].Rules, 1)
"state": "inactive", require.Equal(t, "folder1", body.Data.Groups[0].File)
"name": "rule under folder folder1", require.Equal(t, "folder2", body.Data.Groups[1].File)
"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))
} }
// remove permissions from folder2 // remove permissions from folder2
@ -743,35 +702,11 @@ func TestPrometheusRulesPermissions(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode) require.Equal(t, 200, resp.StatusCode)
require.JSONEq(t, ` body := asJson(t, b)
{ require.Equal(t, "success", body.Status)
"status": "success", require.Len(t, body.Data.Groups, 1)
"data": { require.Len(t, body.Data.Groups[0].Rules, 1)
"groups": [{ require.Equal(t, "folder1", body.Data.Groups[0].File)
"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))
} }
// remove permissions from folder1 // remove permissions from folder1
@ -840,3 +775,25 @@ func removeFolderPermission(t *testing.T, store *acdb.AccessControlStore, orgID,
}, nil) }, 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{}
}