Alerting: Make pagination token empty if an invalid token is passed (#99644)

Reset token to empty if invalid
This commit is contained in:
Fayzal Ghantiwala 2025-01-28 11:54:11 +00:00 committed by GitHub
parent 1cc9f8f0c2
commit f8e7e9e024
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 3 deletions

View File

@ -334,6 +334,11 @@ func PrepareRuleGroupStatuses(log log.Logger, manager state.AlertInstanceManager
maxGroups := getInt64WithDefault(opts.Query, "group_limit", -1) maxGroups := getInt64WithDefault(opts.Query, "group_limit", -1)
nextToken := opts.Query.Get("group_next_token") nextToken := opts.Query.Get("group_next_token")
if nextToken != "" {
if _, err := base64.URLEncoding.DecodeString(nextToken); err != nil {
nextToken = ""
}
}
groupedRules := getGroupedRules(log, ruleList, ruleNamesSet, opts.Namespaces) groupedRules := getGroupedRules(log, ruleList, ruleNamesSet, opts.Namespaces)
rulesTotals := make(map[string]int64, len(groupedRules)) rulesTotals := make(map[string]int64, len(groupedRules))

View File

@ -790,8 +790,8 @@ func TestRouteGetRuleStatuses(t *testing.T) {
} }
}) })
t.Run("bad token should return no results", func(t *testing.T) { t.Run("bad token should return first group_limit results", func(t *testing.T) {
r, err := http.NewRequest("GET", "/api/v1/rules?group_limit=10&group_next_token=foobar", nil) r, err := http.NewRequest("GET", "/api/v1/rules?group_limit=1&group_next_token=foobar", nil)
require.NoError(t, err) require.NoError(t, err)
c.Context = &web.Context{Req: r} c.Context = &web.Context{Req: r}
@ -801,7 +801,14 @@ func TestRouteGetRuleStatuses(t *testing.T) {
result := &apimodels.RuleResponse{} result := &apimodels.RuleResponse{}
require.NoError(t, json.Unmarshal(resp.Body(), result)) require.NoError(t, json.Unmarshal(resp.Body(), result))
require.Len(t, result.Data.RuleGroups, 0) require.Len(t, result.Data.RuleGroups, 1)
require.Len(t, result.Data.Totals, 0)
require.NotEmpty(t, result.Data.NextToken)
folder, err := api.store.GetNamespaceByUID(context.Background(), "namespace_0", orgID, user)
require.NoError(t, err)
require.Equal(t, folder.Fullpath, result.Data.RuleGroups[0].File)
require.Equal(t, "rule_group_0", result.Data.RuleGroups[0].Name)
}) })
t.Run("should return nothing when using group_limit=0", func(t *testing.T) { t.Run("should return nothing when using group_limit=0", func(t *testing.T) {