mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Fix incorrect propagation of org ID in rule endpionts (#54603)
This commit is contained in:
parent
20589f76f4
commit
b8d1474609
@ -255,6 +255,7 @@ func (srv *ProvisioningSrv) RouteRouteGetAlertRule(c *models.ReqContext, UID str
|
|||||||
|
|
||||||
func (srv *ProvisioningSrv) RoutePostAlertRule(c *models.ReqContext, ar definitions.ProvisionedAlertRule) response.Response {
|
func (srv *ProvisioningSrv) RoutePostAlertRule(c *models.ReqContext, ar definitions.ProvisionedAlertRule) response.Response {
|
||||||
upstreamModel, err := ar.UpstreamModel()
|
upstreamModel, err := ar.UpstreamModel()
|
||||||
|
upstreamModel.OrgID = c.OrgID
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResp(http.StatusBadRequest, err, "")
|
ErrResp(http.StatusBadRequest, err, "")
|
||||||
}
|
}
|
||||||
@ -271,10 +272,9 @@ func (srv *ProvisioningSrv) RoutePostAlertRule(c *models.ReqContext, ar definiti
|
|||||||
}
|
}
|
||||||
return ErrResp(http.StatusInternalServerError, err, "")
|
return ErrResp(http.StatusInternalServerError, err, "")
|
||||||
}
|
}
|
||||||
ar.ID = createdAlertRule.ID
|
|
||||||
ar.UID = createdAlertRule.UID
|
resp := definitions.NewAlertRule(createdAlertRule, alerting_models.ProvenanceAPI)
|
||||||
ar.Updated = createdAlertRule.Updated
|
return response.JSON(http.StatusCreated, resp)
|
||||||
return response.JSON(http.StatusCreated, ar)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *ProvisioningSrv) RoutePutAlertRule(c *models.ReqContext, ar definitions.ProvisionedAlertRule, UID string) response.Response {
|
func (srv *ProvisioningSrv) RoutePutAlertRule(c *models.ReqContext, ar definitions.ProvisionedAlertRule, UID string) response.Response {
|
||||||
@ -282,6 +282,7 @@ func (srv *ProvisioningSrv) RoutePutAlertRule(c *models.ReqContext, ar definitio
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResp(http.StatusBadRequest, err, "")
|
ErrResp(http.StatusBadRequest, err, "")
|
||||||
}
|
}
|
||||||
|
updated.OrgID = c.OrgID
|
||||||
updated.UID = UID
|
updated.UID = UID
|
||||||
updatedAlertRule, err := srv.alertRules.UpdateAlertRule(c.Req.Context(), updated, alerting_models.ProvenanceAPI)
|
updatedAlertRule, err := srv.alertRules.UpdateAlertRule(c.Req.Context(), updated, alerting_models.ProvenanceAPI)
|
||||||
if errors.Is(err, alerting_models.ErrAlertRuleNotFound) {
|
if errors.Is(err, alerting_models.ErrAlertRuleNotFound) {
|
||||||
@ -296,8 +297,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRule(c *models.ReqContext, ar definitio
|
|||||||
}
|
}
|
||||||
return ErrResp(http.StatusInternalServerError, err, "")
|
return ErrResp(http.StatusInternalServerError, err, "")
|
||||||
}
|
}
|
||||||
ar.Updated = updatedAlertRule.Updated
|
|
||||||
return response.JSON(http.StatusOK, ar)
|
resp := definitions.NewAlertRule(updatedAlertRule, alerting_models.ProvenanceAPI)
|
||||||
|
return response.JSON(http.StatusOK, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *ProvisioningSrv) RouteDeleteAlertRule(c *models.ReqContext, UID string) response.Response {
|
func (srv *ProvisioningSrv) RouteDeleteAlertRule(c *models.ReqContext, UID string) response.Response {
|
||||||
|
@ -257,6 +257,38 @@ func TestProvisioningApi(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("exist in non-default orgs", func(t *testing.T) {
|
||||||
|
t.Run("POST sets expected fields", func(t *testing.T) {
|
||||||
|
sut := createProvisioningSrvSut(t)
|
||||||
|
rc := createTestRequestCtx()
|
||||||
|
rc.OrgID = 3
|
||||||
|
rule := createTestAlertRule("rule", 1)
|
||||||
|
|
||||||
|
response := sut.RoutePostAlertRule(&rc, rule)
|
||||||
|
|
||||||
|
require.Equal(t, 201, response.Status())
|
||||||
|
created := deserializeRule(t, response.Body())
|
||||||
|
require.Equal(t, int64(3), created.OrgID)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("PUT sets expected fields", func(t *testing.T) {
|
||||||
|
sut := createProvisioningSrvSut(t)
|
||||||
|
uid := t.Name()
|
||||||
|
rule := createTestAlertRule("rule", 1)
|
||||||
|
rule.UID = uid
|
||||||
|
insertRuleInOrg(t, sut, rule, 3)
|
||||||
|
rc := createTestRequestCtx()
|
||||||
|
rc.OrgID = 3
|
||||||
|
rule.OrgID = 1 // Set the org back to something wrong, we should still prefer the value from the req context.
|
||||||
|
|
||||||
|
response := sut.RoutePutAlertRule(&rc, rule, rule.UID)
|
||||||
|
|
||||||
|
require.Equal(t, 200, response.Status())
|
||||||
|
created := deserializeRule(t, response.Body())
|
||||||
|
require.Equal(t, int64(3), created.OrgID)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("are missing, PUT returns 404", func(t *testing.T) {
|
t.Run("are missing, PUT returns 404", func(t *testing.T) {
|
||||||
sut := createProvisioningSrvSut(t)
|
sut := createProvisioningSrvSut(t)
|
||||||
rc := createTestRequestCtx()
|
rc := createTestRequestCtx()
|
||||||
@ -543,13 +575,27 @@ func createTestAlertRule(title string, orgID int64) definitions.ProvisionedAlert
|
|||||||
}
|
}
|
||||||
|
|
||||||
func insertRule(t *testing.T, srv ProvisioningSrv, rule definitions.ProvisionedAlertRule) {
|
func insertRule(t *testing.T, srv ProvisioningSrv, rule definitions.ProvisionedAlertRule) {
|
||||||
|
insertRuleInOrg(t, srv, rule, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func insertRuleInOrg(t *testing.T, srv ProvisioningSrv, rule definitions.ProvisionedAlertRule, orgID int64) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
rc := createTestRequestCtx()
|
rc := createTestRequestCtx()
|
||||||
|
rc.OrgID = orgID
|
||||||
resp := srv.RoutePostAlertRule(&rc, rule)
|
resp := srv.RoutePostAlertRule(&rc, rule)
|
||||||
require.Equal(t, 201, resp.Status())
|
require.Equal(t, 201, resp.Status())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deserializeRule(t *testing.T, data []byte) definitions.ProvisionedAlertRule {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
var rule definitions.ProvisionedAlertRule
|
||||||
|
err := json.Unmarshal(data, &rule)
|
||||||
|
require.NoError(t, err)
|
||||||
|
return rule
|
||||||
|
}
|
||||||
|
|
||||||
var testConfig = `
|
var testConfig = `
|
||||||
{
|
{
|
||||||
"template_files": {
|
"template_files": {
|
||||||
|
Loading…
Reference in New Issue
Block a user