diff --git a/rules/origin.go b/rules/origin.go index 7957777ab9..996538767d 100644 --- a/rules/origin.go +++ b/rules/origin.go @@ -15,6 +15,7 @@ package rules import ( "context" + "fmt" "github.com/prometheus/prometheus/model/labels" ) @@ -43,7 +44,7 @@ func NewRuleDetail(r Rule) RuleDetail { case *RecordingRule: kind = KindRecording default: - kind = "unknown" + panic(fmt.Sprintf(`unknown rule type "%T"`, r)) } return RuleDetail{ diff --git a/rules/origin_test.go b/rules/origin_test.go new file mode 100644 index 0000000000..0ea6548151 --- /dev/null +++ b/rules/origin_test.go @@ -0,0 +1,37 @@ +package rules + +import ( + "context" + "net/url" + "testing" + "time" + + "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/promql" + "github.com/prometheus/prometheus/promql/parser" + "github.com/stretchr/testify/require" +) + +type unknownRule struct{} + +func (u unknownRule) Name() string { return "" } +func (u unknownRule) Labels() labels.Labels { return nil } +func (u unknownRule) Eval(ctx context.Context, time time.Time, queryFunc QueryFunc, url *url.URL, i int) (promql.Vector, error) { + return nil, nil +} +func (u unknownRule) String() string { return "" } +func (u unknownRule) Query() parser.Expr { return nil } +func (u unknownRule) SetLastError(err error) {} +func (u unknownRule) LastError() error { return nil } +func (u unknownRule) SetHealth(health RuleHealth) {} +func (u unknownRule) Health() RuleHealth { return "" } +func (u unknownRule) SetEvaluationDuration(duration time.Duration) {} +func (u unknownRule) GetEvaluationDuration() time.Duration { return 0 } +func (u unknownRule) SetEvaluationTimestamp(time time.Time) {} +func (u unknownRule) GetEvaluationTimestamp() time.Time { return time.Time{} } + +func TestNewRuleDetailPanics(t *testing.T) { + require.PanicsWithValue(t, `unknown rule type "rules.unknownRule"`, func() { + NewRuleDetail(unknownRule{}) + }) +}