From 4e1dacf2d1ffc4848a19aebd243ddd1e9e4da6e0 Mon Sep 17 00:00:00 2001 From: Howie Date: Sat, 16 Oct 2021 02:24:55 +0800 Subject: [PATCH] fix issue #9432(uses reference to loop iterator variable ) (#9483) --- pkg/rulefmt/rulefmt.go | 2 +- pkg/rulefmt/rulefmt_test.go | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pkg/rulefmt/rulefmt.go b/pkg/rulefmt/rulefmt.go index 62cd6de092..13fd07c225 100644 --- a/pkg/rulefmt/rulefmt.go +++ b/pkg/rulefmt/rulefmt.go @@ -83,7 +83,7 @@ func (g *RuleGroups) Validate(node ruleGroups) (errs []error) { set[g.Name] = struct{}{} for i, r := range g.Rules { - for _, node := range r.Validate() { + for _, node := range g.Rules[i].Validate() { var ruleName yaml.Node if r.Alert.Value != "" { ruleName = r.Alert diff --git a/pkg/rulefmt/rulefmt_test.go b/pkg/rulefmt/rulefmt_test.go index 6f5ce51ed7..719c01cbd5 100644 --- a/pkg/rulefmt/rulefmt_test.go +++ b/pkg/rulefmt/rulefmt_test.go @@ -156,5 +156,31 @@ groups: passed := (tst.shouldPass && len(errs) == 0) || (!tst.shouldPass && len(errs) > 0) require.True(t, passed, "Rule validation failed, rule=\n"+tst.ruleString) } - +} + +func TestUniqueErrorNodes(t *testing.T) { + group := ` +groups: +- name: example + rules: + - alert: InstanceDown + expr: up ===== 0 + for: 5m + labels: + severity: "page" + annotations: + summary: "Instance {{ $labels.instance }} down" + - alert: InstanceUp + expr: up ===== 1 + for: 5m + labels: + severity: "page" + annotations: + summary: "Instance {{ $labels.instance }} up" +` + _, errs := Parse([]byte(group)) + require.Len(t, errs, 2, "Expected two errors") + err0 := errs[0].(*Error).Err.node + err1 := errs[1].(*Error).Err.node + require.NotEqual(t, err0, err1, "Error nodes should not be the same") }