[release-11.4.6] Alerting: Provisioning API returns 403 on quota exceeded for rule group PUT (#106484)

Alerting: Provisioning API returns 403 on quota exceeded for rule group PUT (#106409)

(cherry picked from commit 1df888c517)
This commit is contained in:
Vadim Stepanov
2025-06-10 15:21:41 +01:00
committed by GitHub
parent 3112d75a5b
commit 49f3fa91b3
2 changed files with 24 additions and 0 deletions
@@ -513,6 +513,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRuleGroup(c *contextmodel.ReqContext, a
if errors.Is(err, store.ErrOptimisticLock) {
return ErrResp(http.StatusConflict, err, "")
}
if errors.Is(err, alerting_models.ErrQuotaReached) {
return ErrResp(http.StatusForbidden, err, "")
}
if err != nil {
return response.ErrOrFallback(http.StatusInternalServerError, "", err)
}
@@ -573,6 +573,27 @@ func TestProvisioningApi(t *testing.T) {
})
})
t.Run("have reached the rule quota, PUT returns 403", func(t *testing.T) {
env := createTestEnv(t, testConfig)
quotas := provisioning.MockQuotaChecker{}
quotas.EXPECT().LimitExceeded()
env.quotas = &quotas
sut := createProvisioningSrvSutFromEnv(t, &env)
group := definitions.AlertRuleGroup{
Title: "test rule group",
Interval: 60,
Rules: []definitions.ProvisionedAlertRule{
createTestAlertRule("test-alert-rule", 1),
},
}
group.Rules[0].UID = "" // The rule is only created if UID is empty.
rc := createTestRequestCtx()
response := sut.RoutePutAlertRuleGroup(&rc, group, "folder-uid", group.Title)
require.Equal(t, 403, response.Status())
})
t.Run("exports", func(t *testing.T) {
t.Run("alert rule group", func(t *testing.T) {
t.Run("are present, GET returns 200", func(t *testing.T) {