From 4dc0d490254f0948074baf82a0ce4b3f5efdfdd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Philippe=20Qu=C3=A9m=C3=A9ner?= Date: Fri, 16 Sep 2022 18:54:00 +0200 Subject: [PATCH] Alerting: make sure that rules in rule group are nil if not provided (#55301) --- .../definitions/provisioning_alert_rules.go | 15 ++++---- .../provisioning_alert_rules_test.go | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules_test.go diff --git a/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules.go b/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules.go index 91866fba2e9..c24a53a5910 100644 --- a/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules.go +++ b/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules.go @@ -191,20 +191,19 @@ type AlertRuleGroup struct { } func (a *AlertRuleGroup) ToModel() (models.AlertRuleGroup, error) { - rules := make([]models.AlertRule, 0, len(a.Rules)) + ruleGroup := models.AlertRuleGroup{ + Title: a.Title, + FolderUID: a.FolderUID, + Interval: a.Interval, + } for i := range a.Rules { converted, err := a.Rules[i].UpstreamModel() if err != nil { return models.AlertRuleGroup{}, err } - rules = append(rules, converted) + ruleGroup.Rules = append(ruleGroup.Rules, converted) } - return models.AlertRuleGroup{ - Title: a.Title, - FolderUID: a.FolderUID, - Interval: a.Interval, - Rules: rules, - }, nil + return ruleGroup, nil } func NewAlertRuleGroupFromModel(d models.AlertRuleGroup) AlertRuleGroup { diff --git a/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules_test.go b/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules_test.go new file mode 100644 index 00000000000..fd8845e41c4 --- /dev/null +++ b/pkg/services/ngalert/api/tooling/definitions/provisioning_alert_rules_test.go @@ -0,0 +1,35 @@ +package definitions + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestToModel(t *testing.T) { + t.Run("if no rules are provided the rule field should be nil", func(t *testing.T) { + ruleGroup := AlertRuleGroup{ + Title: "123", + FolderUID: "123", + Interval: 10, + } + tm, err := ruleGroup.ToModel() + require.NoError(t, err) + require.Nil(t, tm.Rules) + }) + t.Run("if rules are provided the rule field should be not nil", func(t *testing.T) { + ruleGroup := AlertRuleGroup{ + Title: "123", + FolderUID: "123", + Interval: 10, + Rules: []ProvisionedAlertRule{ + { + UID: "1", + }, + }, + } + tm, err := ruleGroup.ToModel() + require.NoError(t, err) + require.Len(t, tm.Rules, 1) + }) +}