minitor-go/alert_test.go

155 lines
3.2 KiB
Go
Raw Normal View History

2019-10-03 23:30:49 +00:00
package main
import (
"testing"
)
func TestAlertIsValid(t *testing.T) {
cases := []struct {
alert Alert
expected bool
name string
}{
{Alert{Command: CommandOrShell{Command: []string{"echo", "test"}}}, true, "Command only"},
{Alert{Command: CommandOrShell{ShellCommand: "echo test"}}, true, "CommandShell only"},
2019-10-03 23:30:49 +00:00
{Alert{}, false, "No commands"},
}
for _, c := range cases {
2024-11-14 19:35:26 +00:00
c := c
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
t.Run(c.name, func(t *testing.T) {
t.Parallel()
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
actual := c.alert.IsValid()
if actual != c.expected {
t.Errorf("expected=%t actual=%t", c.expected, actual)
}
})
2019-10-03 23:30:49 +00:00
}
}
func TestAlertSend(t *testing.T) {
cases := []struct {
alert Alert
notice AlertNotice
expectedOutput string
expectErr bool
name string
2020-02-20 01:31:04 +00:00
pyCompat bool
2019-10-03 23:30:49 +00:00
}{
{
Alert{Command: CommandOrShell{Command: []string{"echo", "{{.MonitorName}}"}}},
2019-10-03 23:30:49 +00:00
AlertNotice{MonitorName: "test"},
"test\n",
false,
"Command with template",
2020-02-20 01:31:04 +00:00
false,
2019-10-03 23:30:49 +00:00
},
{
Alert{Command: CommandOrShell{ShellCommand: "echo {{.MonitorName}}"}},
2019-10-03 23:30:49 +00:00
AlertNotice{MonitorName: "test"},
"test\n",
false,
"Command shell with template",
2020-02-20 01:31:04 +00:00
false,
2019-10-03 23:30:49 +00:00
},
{
Alert{Command: CommandOrShell{Command: []string{"echo", "{{.Bad}}"}}},
2019-10-03 23:30:49 +00:00
AlertNotice{MonitorName: "test"},
"",
true,
"Command with bad template",
2020-02-20 01:31:04 +00:00
false,
2019-10-03 23:30:49 +00:00
},
{
Alert{Command: CommandOrShell{ShellCommand: "echo {{.Bad}}"}},
2019-10-03 23:30:49 +00:00
AlertNotice{MonitorName: "test"},
"",
true,
"Command shell with bad template",
2020-02-20 01:31:04 +00:00
false,
2019-10-03 23:30:49 +00:00
},
// Test default log alert down
{
*NewLogAlert(),
AlertNotice{MonitorName: "Test", FailureCount: 1, IsUp: false},
"Test check has failed 1 times\n",
false,
"Default log alert down",
false,
},
// Test default log alert up
{
*NewLogAlert(),
AlertNotice{MonitorName: "Test", IsUp: true},
"Test has recovered\n",
false,
"Default log alert up",
false,
},
2019-10-03 23:30:49 +00:00
}
for _, c := range cases {
2024-11-14 19:35:26 +00:00
c := c
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
t.Run(c.name, func(t *testing.T) {
t.Parallel()
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
err := c.alert.BuildTemplates()
if err != nil {
t.Errorf("Send(%v output), error building templates: %v", c.name, err)
}
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
output, err := c.alert.Send(c.notice)
hasErr := (err != nil)
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
if output != c.expectedOutput {
t.Errorf("Send(%v output), expected=%v actual=%v", c.name, c.expectedOutput, output)
}
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
if hasErr != c.expectErr {
t.Errorf("Send(%v err), expected=%v actual=%v", c.name, "Err", err)
}
})
2019-10-03 23:30:49 +00:00
}
}
func TestAlertSendNoTemplates(t *testing.T) {
alert := Alert{}
notice := AlertNotice{}
2021-01-08 23:31:22 +00:00
2019-10-03 23:30:49 +00:00
output, err := alert.Send(notice)
if err == nil {
t.Errorf("Send(no template), expected=%v actual=%v", "Err", output)
}
}
func TestAlertBuildTemplate(t *testing.T) {
cases := []struct {
alert Alert
expectErr bool
name string
}{
{Alert{Command: CommandOrShell{Command: []string{"echo", "test"}}}, false, "Command only"},
{Alert{Command: CommandOrShell{ShellCommand: "echo test"}}, false, "CommandShell only"},
2019-10-03 23:30:49 +00:00
{Alert{}, true, "No commands"},
}
for _, c := range cases {
2024-11-14 19:35:26 +00:00
c := c
t.Run(c.name, func(t *testing.T) {
t.Parallel()
err := c.alert.BuildTemplates()
hasErr := (err != nil)
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
if hasErr != c.expectErr {
t.Errorf("IsValid(%v), expected=%t actual=%t", c.name, c.expectErr, err)
}
2021-01-08 23:31:22 +00:00
2024-11-14 19:35:26 +00:00
})
2019-10-03 23:30:49 +00:00
}
}