From 44c3c5f269ac2ff3c0bc691064467b37bbf5703f Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 27 Apr 2023 09:41:38 +0100 Subject: [PATCH] [v9.4.x] Alerting: Fix misleading status code in provisioning API (#67357) 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 297200cfa9a..499d1720685 100644 --- a/pkg/services/ngalert/api/api_provisioning.go +++ b/pkg/services/ngalert/api/api_provisioning.go @@ -265,6 +265,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, definitions.NewAlertRule(rule, provenace)) diff --git a/pkg/services/ngalert/api/api_provisioning_test.go b/pkg/services/ngalert/api/api_provisioning_test.go index 4b63f046706..9a2d5d3061d 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{}