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  }