From 9e25ab21341cb94c9f5794f47de608c104bda827 Mon Sep 17 00:00:00 2001 From: Saswata Mukherjee Date: Thu, 3 Feb 2022 09:06:13 +0530 Subject: [PATCH] Add other matchtype testcase Signed-off-by: Saswata Mukherjee --- pkg/api/query/v1.go | 2 +- pkg/rules/rules.go | 2 +- pkg/rules/rules_test.go | 109 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/pkg/api/query/v1.go b/pkg/api/query/v1.go index 5ac8bbad32..5da44c7a2d 100644 --- a/pkg/api/query/v1.go +++ b/pkg/api/query/v1.go @@ -788,7 +788,7 @@ func NewRulesHandler(client rules.UnaryClient, enablePartialResponse bool) func( } if err := r.ParseForm(); err != nil { - return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Errorf("error parsing request form='%v'", typeParam)} + return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Errorf("error parsing request form='%v'", MatcherParam)} } // TODO(bwplotka): Allow exactly the same functionality as query API: passing replica, dedup and partial response as HTTP params as well. diff --git a/pkg/rules/rules.go b/pkg/rules/rules.go index cfcc3508a9..dbe99cfd48 100644 --- a/pkg/rules/rules.go +++ b/pkg/rules/rules.go @@ -82,7 +82,7 @@ func (rr *GRPCClient) Rules(ctx context.Context, req *rulespb.RulesRequest) (*ru // filterRules filters rules in a group according to given matcherSets. func filterRules(ruleGroups []*rulespb.RuleGroup, matcherSets [][]*labels.Matcher) []*rulespb.RuleGroup { - if len(matcherSets) == 0 || len(ruleGroups) == 0 { + if len(matcherSets) == 0 { return ruleGroups } diff --git a/pkg/rules/rules_test.go b/pkg/rules/rules_test.go index 16daa33429..5e2f90fe59 100644 --- a/pkg/rules/rules_test.go +++ b/pkg/rules/rules_test.go @@ -1307,6 +1307,115 @@ func TestFilterRules(t *testing.T) { }, }, }, + { + name: "multiple group with templated labels and non templated matcher", + matcherSets: [][]*labels.Matcher{{&labels.Matcher{Name: "templatedlabel", Value: "foo", Type: labels.MatchEqual}}}, + groups: []*rulespb.RuleGroup{ + { + Name: "a", + Rules: []*rulespb.Rule{ + rulespb.NewAlertingRule(&rulespb.Alert{ + Name: "a1a", + Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "templatedlabel", Value: "{{ $externalURL }}"}, + }}, + }), + }, + }, + { + Name: "b", + Rules: []*rulespb.Rule{ + rulespb.NewAlertingRule(&rulespb.Alert{ + Name: "a1b", + Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "templated", Value: "{{ $externalURL }}"}, + }}, + }), + }, + }, + }, + want: []*rulespb.RuleGroup{ + { + Name: "a", + Rules: []*rulespb.Rule{}, + }, + { + Name: "b", + Rules: []*rulespb.Rule{}, + }, + }, + }, + { + name: "multiple group with regex matcher", + matcherSets: [][]*labels.Matcher{{labels.MustNewMatcher(labels.MatchRegexp, "label", "f.*")}}, + groups: []*rulespb.RuleGroup{ + { + Name: "a", + Rules: []*rulespb.Rule{ + rulespb.NewAlertingRule(&rulespb.Alert{ + Name: "a1a", + Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + rulespb.NewRecordingRule(&rulespb.RecordingRule{ + Name: "r1a", Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + rulespb.NewRecordingRule(&rulespb.RecordingRule{ + Name: "r1b", Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "otherlabel", Value: "bar"}, + }}, + }), + }, + }, + { + Name: "b", + Rules: []*rulespb.Rule{ + rulespb.NewAlertingRule(&rulespb.Alert{ + Name: "a1b", + Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "some", Value: "label"}, + }}, + }), + rulespb.NewRecordingRule(&rulespb.RecordingRule{ + Name: "r1b", Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + }, + }, + }, + want: []*rulespb.RuleGroup{ + { + Name: "a", + Rules: []*rulespb.Rule{ + rulespb.NewAlertingRule(&rulespb.Alert{ + Name: "a1a", + Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + rulespb.NewRecordingRule(&rulespb.RecordingRule{ + Name: "r1a", Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + }, + }, + { + Name: "b", + Rules: []*rulespb.Rule{ + rulespb.NewRecordingRule(&rulespb.RecordingRule{ + Name: "r1b", Labels: labelpb.ZLabelSet{Labels: []labelpb.ZLabel{ + {Name: "label", Value: "foo"}, + }}, + }), + }, + }, + }, + }, } { t.Run(tc.name, func(t *testing.T) { testutil.Equals(t, tc.want, filterRules(tc.groups, tc.matcherSets))