github.com/grafana/pyroscope@v1.18.0/pkg/metrics/ruler_test.go (about) 1 package metrics 2 3 import ( 4 "testing" 5 6 "github.com/prometheus/prometheus/model/labels" 7 "github.com/stretchr/testify/assert" 8 9 settingsv1 "github.com/grafana/pyroscope/api/gen/proto/go/settings/v1" 10 typesv1 "github.com/grafana/pyroscope/api/gen/proto/go/types/v1" 11 "github.com/grafana/pyroscope/pkg/model" 12 "github.com/grafana/pyroscope/pkg/validation" 13 ) 14 15 var ( 16 defaultRecordingRulesProto = []*settingsv1.RecordingRule{{ 17 Id: "some-id", 18 MetricName: "profiles_recorded_default_recording_rule", 19 Matchers: []string{"{__profile_type__=\"any-profile-type\"}"}, 20 }} 21 22 defaultRecordingRules = []*model.RecordingRule{{ 23 ExternalLabels: labels.New(labels.Label{ 24 Name: "__name__", 25 Value: "profiles_recorded_default_recording_rule", 26 }, labels.Label{ 27 Name: "profiles_rule_id", 28 Value: "some-id", 29 }), 30 Matchers: []*labels.Matcher{{ 31 Type: labels.MatchEqual, 32 Name: "__profile_type__", 33 Value: "any-profile-type", 34 }}, 35 }} 36 37 overriddenRecordingRulesProto = []*settingsv1.RecordingRule{{ 38 Id: "another-id", 39 MetricName: "profiles_recorded_rule", 40 Matchers: []string{"{__profile_type__=\"any-profile-type\", matcher1!=\"value\"}"}, 41 GroupBy: []string{"group_by_label"}, 42 ExternalLabels: []*typesv1.LabelPair{{Name: "foo", Value: "bar"}}, 43 }} 44 45 overriddenRecordingRules = []*model.RecordingRule{{ 46 Matchers: []*labels.Matcher{ 47 {Type: labels.MatchEqual, Name: "__profile_type__", Value: "any-profile-type"}, 48 {Type: labels.MatchNotEqual, Name: "matcher1", Value: "value"}, 49 }, 50 GroupBy: []string{"group_by_label"}, 51 ExternalLabels: labels.New( 52 labels.Label{Name: "__name__", Value: "profiles_recorded_rule"}, 53 labels.Label{Name: "foo", Value: "bar"}, 54 labels.Label{Name: "profiles_rule_id", Value: "another-id"}, 55 ), 56 }} 57 ) 58 59 func Test_Ruler_happyPath(t *testing.T) { 60 overrides := newOverrides(t) 61 62 ruler := NewStaticRulerFromOverrides(overrides) 63 64 rules := ruler.RecordingRules("non-configured-tenant") 65 assert.Equal(t, defaultRecordingRules, rules) 66 67 rules = ruler.RecordingRules("tenant-override") 68 assert.Equal(t, overriddenRecordingRules, rules) 69 } 70 71 func newOverrides(t *testing.T) *validation.Overrides { 72 t.Helper() 73 return validation.MockOverrides(func(defaults *validation.Limits, tenantLimits map[string]*validation.Limits) { 74 defaults.RecordingRules = defaultRecordingRulesProto 75 l := validation.MockDefaultLimits() 76 l.RecordingRules = overriddenRecordingRulesProto 77 tenantLimits["tenant-override"] = l 78 }) 79 }