Alerting: Add rule conversion package (#100224)
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package prom
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
prommodel "github.com/prometheus/common/model"
|
||||
"github.com/stretchr/testify/require"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestPrometheusRulesFileYAML(t *testing.T) {
|
||||
interval := prommodel.Duration(5 * time.Minute)
|
||||
alertFor := prommodel.Duration(10 * time.Minute)
|
||||
keepFiring := prommodel.Duration(15 * time.Minute)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
input PrometheusRulesFile
|
||||
expectedYAML string
|
||||
}{
|
||||
{
|
||||
name: "simple alert rule and a recording rule",
|
||||
input: PrometheusRulesFile{
|
||||
Groups: []PrometheusRuleGroup{
|
||||
{
|
||||
Name: "test_group",
|
||||
Interval: interval,
|
||||
Rules: []PrometheusRule{
|
||||
{
|
||||
Alert: "alert-1",
|
||||
Expr: "vector(0) > 90",
|
||||
For: &alertFor,
|
||||
KeepFiringFor: &keepFiring,
|
||||
Labels: map[string]string{
|
||||
"team": "alerting",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"summary": "some summary",
|
||||
"description": "some description",
|
||||
},
|
||||
},
|
||||
{
|
||||
Record: "vector(1)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedYAML: `
|
||||
groups:
|
||||
- name: test_group
|
||||
interval: 5m
|
||||
rules:
|
||||
- alert: alert-1
|
||||
expr: vector(0) > 90
|
||||
for: 10m
|
||||
keep_firing_for: 15m
|
||||
labels:
|
||||
team: alerting
|
||||
annotations:
|
||||
description: some description
|
||||
summary: some summary
|
||||
- record: vector(1)
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "empty rules file",
|
||||
input: PrometheusRulesFile{
|
||||
Groups: []PrometheusRuleGroup{},
|
||||
},
|
||||
expectedYAML: `groups: []`,
|
||||
},
|
||||
{
|
||||
name: "empty group",
|
||||
input: PrometheusRulesFile{
|
||||
Groups: []PrometheusRuleGroup{
|
||||
{
|
||||
Name: "empty_group",
|
||||
Interval: interval,
|
||||
Rules: []PrometheusRule{},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedYAML: `
|
||||
groups:
|
||||
- name: empty_group
|
||||
interval: 5m
|
||||
rules: []`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
yamlData, err := yaml.Marshal(tt.input)
|
||||
require.NoError(t, err, "Failed to marshal to YAML")
|
||||
require.YAMLEq(t, tt.expectedYAML, string(yamlData))
|
||||
|
||||
var parsed PrometheusRulesFile
|
||||
err = yaml.Unmarshal(yamlData, &parsed)
|
||||
require.NoError(t, err, "Failed to unmarshal from YAML")
|
||||
|
||||
require.Equal(t, tt.input, parsed)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user