From ed10eebb4882f13aca75bbdb5d52f6cbe0c03605 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 27 Apr 2023 09:47:49 +0100 Subject: [PATCH] [v9.5.x] Alerting: Fix misleading status code in provisioning API (#67358) Alerting: Fix misleading status code in provisioning API (#67331) Fixes #66249 (cherry picked from commit dfc99cdd19a5a46f8ac47fae81d306965304d1d5) Co-authored-by: Uwe Sommerlatt --- pkg/services/ngalert/api/api_provisioning.go | 3 +++ pkg/services/ngalert/api/api_provisioning_test.go | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/pkg/services/ngalert/api/api_provisioning.go b/pkg/services/ngalert/api/api_provisioning.go index be67dc59488..3785c421d20 100644 --- a/pkg/services/ngalert/api/api_provisioning.go +++ b/pkg/services/ngalert/api/api_provisioning.go @@ -266,6 +266,9 @@ func (srv *ProvisioningSrv) RouteGetAlertRules(c *contextmodel.ReqContext) respo func (srv *ProvisioningSrv) RouteRouteGetAlertRule(c *contextmodel.ReqContext, UID string) response.Response { rule, provenace, err := srv.alertRules.GetAlertRule(c.Req.Context(), c.OrgID, UID) if err != nil { + if errors.Is(err, alerting_models.ErrAlertRuleNotFound) { + return response.Empty(http.StatusNotFound) + } return ErrResp(http.StatusInternalServerError, err, "") } return response.JSON(http.StatusOK, ProvisionedAlertRuleFromAlertRule(rule, provenace)) diff --git a/pkg/services/ngalert/api/api_provisioning_test.go b/pkg/services/ngalert/api/api_provisioning_test.go index a31e4cc4ab6..4e27bdd271e 100644 --- a/pkg/services/ngalert/api/api_provisioning_test.go +++ b/pkg/services/ngalert/api/api_provisioning_test.go @@ -307,6 +307,14 @@ func TestProvisioningApi(t *testing.T) { require.Equal(t, 404, response.Status()) }) + t.Run("are missing, GET returns 404", func(t *testing.T) { + sut := createProvisioningSrvSut(t) + rc := createTestRequestCtx() + response := sut.RouteRouteGetAlertRule(&rc, "does not exist") + + require.Equal(t, 404, response.Status()) + }) + t.Run("have reached the rule quota, POST returns 403", func(t *testing.T) { env := createTestEnv(t) quotas := provisioning.MockQuotaChecker{}