alertmanager/template/template_test.go

108 lines
2.3 KiB
Go

package template
import (
"testing"
"github.com/prometheus/common/model"
"github.com/stretchr/testify/require"
)
func TestPairNames(t *testing.T) {
pairs := Pairs{
{"name1", "value1"},
{"name2", "value2"},
{"name3", "value3"},
}
expected := []string{"name1", "name2", "name3"}
require.EqualValues(t, expected, pairs.Names())
}
func TestPairValues(t *testing.T) {
pairs := Pairs{
{"name1", "value1"},
{"name2", "value2"},
{"name3", "value3"},
}
expected := []string{"value1", "value2", "value3"}
require.EqualValues(t, expected, pairs.Values())
}
func TestKVSortedPairs(t *testing.T) {
kv := KV{"d": "dVal", "b": "bVal", "c": "cVal"}
expectedPairs := Pairs{
{"b", "bVal"},
{"c", "cVal"},
{"d", "dVal"},
}
for i, p := range kv.SortedPairs() {
require.EqualValues(t, p.Name, expectedPairs[i].Name)
require.EqualValues(t, p.Value, expectedPairs[i].Value)
}
// validates alertname always comes first
kv = KV{"d": "dVal", "b": "bVal", "c": "cVal", "alertname": "alert", "a": "aVal"}
expectedPairs = Pairs{
{"alertname", "alert"},
{"a", "aVal"},
{"b", "bVal"},
{"c", "cVal"},
{"d", "dVal"},
}
for i, p := range kv.SortedPairs() {
require.EqualValues(t, p.Name, expectedPairs[i].Name)
require.EqualValues(t, p.Value, expectedPairs[i].Value)
}
}
func TestKVRemove(t *testing.T) {
kv := KV{
"key1": "val1",
"key2": "val2",
"key3": "val3",
"key4": "val4",
}
kv = kv.Remove([]string{"key2", "key4"})
expected := []string{"key1", "key3"}
require.EqualValues(t, expected, kv.Names())
}
func TestAlertsFiring(t *testing.T) {
alerts := Alerts{
{Status: string(model.AlertFiring)},
{Status: string(model.AlertResolved)},
{Status: string(model.AlertFiring)},
{Status: string(model.AlertResolved)},
{Status: string(model.AlertResolved)},
}
for _, alert := range alerts.Firing() {
if alert.Status != string(model.AlertFiring) {
t.Errorf("unexpected status %q", alert.Status)
}
}
}
func TestAlertsResolved(t *testing.T) {
alerts := Alerts{
{Status: string(model.AlertFiring)},
{Status: string(model.AlertResolved)},
{Status: string(model.AlertFiring)},
{Status: string(model.AlertResolved)},
{Status: string(model.AlertResolved)},
}
for _, alert := range alerts.Resolved() {
if alert.Status != string(model.AlertResolved) {
t.Errorf("unexpected status %q", alert.Status)
}
}
}