From 3697075b8f08bbd838f8db56d6568c8119d61c69 Mon Sep 17 00:00:00 2001 From: Krasi Georgiev Date: Tue, 17 Oct 2017 12:22:59 +0300 Subject: [PATCH] validates that the recording name to include only allowed characters. (#3305) --- pkg/rulefmt/rulefmt.go | 3 +++ pkg/rulefmt/rulefmt_test.go | 4 ++++ pkg/rulefmt/testdata/invalid_record_name.bad.yaml | 5 +++++ 3 files changed, 12 insertions(+) create mode 100644 pkg/rulefmt/testdata/invalid_record_name.bad.yaml diff --git a/pkg/rulefmt/rulefmt.go b/pkg/rulefmt/rulefmt.go index bc08bc0319..b76137283c 100644 --- a/pkg/rulefmt/rulefmt.go +++ b/pkg/rulefmt/rulefmt.go @@ -127,6 +127,9 @@ func (r *Rule) Validate() (errs []error) { if r.For != 0 { errs = append(errs, errors.Errorf("invalid field 'for' in recording rule")) } + if !model.IsValidMetricName(model.LabelValue(r.Record)) { + errs = append(errs, errors.Errorf("invalid recording rule name: %s", r.Record)) + } } for k, v := range r.Labels { diff --git a/pkg/rulefmt/rulefmt_test.go b/pkg/rulefmt/rulefmt_test.go index 358a98377a..0104d57517 100644 --- a/pkg/rulefmt/rulefmt_test.go +++ b/pkg/rulefmt/rulefmt_test.go @@ -61,6 +61,10 @@ func TestParseFileFailure(t *testing.T) { filename: "bad_annotation.bad.yaml", errMsg: "invalid annotation name", }, + { + filename: "invalid_record_name.bad.yaml", + errMsg: "invalid recording rule name", + }, } for _, c := range table { diff --git a/pkg/rulefmt/testdata/invalid_record_name.bad.yaml b/pkg/rulefmt/testdata/invalid_record_name.bad.yaml new file mode 100644 index 0000000000..bda5f4970b --- /dev/null +++ b/pkg/rulefmt/testdata/invalid_record_name.bad.yaml @@ -0,0 +1,5 @@ +groups: + - name: yolo + rules: + - record: strawberry{flavor="sweet"} + expr: 1 \ No newline at end of file