The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/services/ngalert/ngalert_test.go

73 lines
3.0 KiB

package ngalert
import (
"testing"
"time"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/setting"
"github.com/stretchr/testify/require"
)
func TestGetRuleDefaultIntervalSeconds(t *testing.T) {
testCases := []struct {
desc string
alertingMinIntervalCfg time.Duration
// the expected default rule interval (applied if a rule interval is missing)
expDefaultInterval time.Duration
// the expected minimum rule interval (enforced if a rule interval is lower than this value; it is used also for computing the default rule interval)
expMinInterval time.Duration
}{
{
desc: "negative min rule interval",
alertingMinIntervalCfg: -1,
expDefaultInterval: time.Duration(defaultIntervalSeconds) * time.Second, // 60s
expMinInterval: defaultBaseIntervalSeconds, // 10s
},
{
desc: "zero min rule interval",
alertingMinIntervalCfg: 0,
expDefaultInterval: time.Duration(defaultIntervalSeconds) * time.Second, // 60s
expMinInterval: defaultBaseIntervalSeconds, // 10s
},
{
desc: "min rule interval not divided exactly by the scheduler interval",
alertingMinIntervalCfg: 1,
expDefaultInterval: time.Duration(defaultIntervalSeconds) * time.Second, // 60s
expMinInterval: defaultBaseIntervalSeconds, // 10s
},
{
desc: "min rule interval equals base scheduler interval",
alertingMinIntervalCfg: defaultBaseIntervalSeconds, // 10s
expDefaultInterval: time.Duration(defaultIntervalSeconds) * time.Second, // 60s
expMinInterval: defaultBaseIntervalSeconds, // 10s
},
{
desc: "valid min rule interval less than default rule interval",
alertingMinIntervalCfg: time.Duration(defaultIntervalSeconds-defaultBaseIntervalSeconds) * time.Second, // 50s
expDefaultInterval: time.Duration(defaultIntervalSeconds) * time.Second, // 60s
expMinInterval: time.Duration(defaultIntervalSeconds-defaultBaseIntervalSeconds) * time.Second, // 50s
},
{
desc: "valid min rule interval greater than default rule interval",
alertingMinIntervalCfg: time.Duration(defaultIntervalSeconds+defaultBaseIntervalSeconds) * time.Second, // 70s
expDefaultInterval: time.Duration(defaultIntervalSeconds+defaultBaseIntervalSeconds) * time.Second, // 70s
expMinInterval: time.Duration(defaultIntervalSeconds+defaultBaseIntervalSeconds) * time.Second, // 70s
},
}
for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
alertNG := AlertNG{
Log: log.New("test"),
Cfg: &setting.Cfg{
UnifiedAlerting: setting.UnifiedAlertingSettings{
MinInterval: tc.alertingMinIntervalCfg,
},
},
}
require.Equal(t, tc.expDefaultInterval, alertNG.getRuleDefaultInterval())
require.Equal(t, tc.expMinInterval, alertNG.getRuleMinInterval())
})
}
}