driftctl/pkg/alerter/alerter_test.go

211 lines
4.0 KiB
Go
Raw Normal View History

2020-12-16 12:02:02 +00:00
package alerter
import (
"reflect"
"testing"
"github.com/cloudskiff/driftctl/pkg/resource"
resource2 "github.com/cloudskiff/driftctl/test/resource"
)
func TestAlerter_Alert(t *testing.T) {
cases := []struct {
name string
alerts Alerts
expected Alerts
}{
{
name: "TestNoAlerts",
alerts: nil,
expected: Alerts{},
},
{
name: "TestWithSingleAlert",
alerts: Alerts{
"fakeres.foobar": []Alert{
{
Message: "This is an alert",
ShouldIgnoreResource: false,
},
},
},
expected: Alerts{
"fakeres.foobar": []Alert{
{
Message: "This is an alert",
ShouldIgnoreResource: false,
},
},
},
},
{
name: "TestWithMultipleAlerts",
alerts: Alerts{
"fakeres.foobar": []Alert{
{
Message: "This is an alert",
ShouldIgnoreResource: false,
},
{
Message: "This is a second alert",
ShouldIgnoreResource: true,
},
},
"fakeres.barfoo": []Alert{
{
Message: "This is a third alert",
ShouldIgnoreResource: true,
},
},
},
expected: Alerts{
"fakeres.foobar": []Alert{
{
Message: "This is an alert",
ShouldIgnoreResource: false,
},
{
Message: "This is a second alert",
ShouldIgnoreResource: true,
},
},
"fakeres.barfoo": []Alert{
{
Message: "This is a third alert",
ShouldIgnoreResource: true,
},
},
},
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
alerter := NewAlerter()
for k, v := range c.alerts {
for _, a := range v {
alerter.SendAlert(k, a)
}
}
2021-01-11 16:33:23 +00:00
if eq := reflect.DeepEqual(alerter.Retrieve(), c.expected); !eq {
t.Errorf("Got %+v, expected %+v", alerter.Retrieve(), c.expected)
2020-12-16 12:02:02 +00:00
}
})
}
}
func TestAlerter_IgnoreResources(t *testing.T) {
cases := []struct {
name string
alerts Alerts
resource resource.Resource
expected bool
}{
{
name: "TestNoAlerts",
alerts: Alerts{},
resource: &resource2.FakeResource{
Type: "fakeres",
Id: "foobar",
},
expected: false,
},
{
name: "TestShouldNotBeIgnoredWithAlerts",
alerts: Alerts{
"fakeres": {
{
Message: "Should not be ignored",
},
},
"fakeres.foobar": {
{
Message: "Should not be ignored",
},
},
"fakeres.barfoo": {
{
Message: "Should not be ignored",
},
},
"other.resource": {
{
Message: "Should not be ignored",
},
},
},
resource: &resource2.FakeResource{
Type: "fakeres",
Id: "foobar",
},
expected: false,
},
{
name: "TestShouldBeIgnoredWithAlertsOnWildcard",
alerts: Alerts{
"fakeres": {
{
Message: "Should be ignored",
ShouldIgnoreResource: true,
},
},
"other.foobaz": {
{
Message: "Should be ignored",
ShouldIgnoreResource: true,
},
},
"other.resource": {
{
Message: "Should not be ignored",
},
},
},
resource: &resource2.FakeResource{
Type: "fakeres",
Id: "foobar",
},
expected: true,
},
{
name: "TestShouldBeIgnoredWithAlertsOnResource",
alerts: Alerts{
"fakeres": {
{
Message: "Should be ignored",
ShouldIgnoreResource: true,
},
},
"other.foobaz": {
{
Message: "Should be ignored",
ShouldIgnoreResource: true,
},
},
"other.resource": {
{
Message: "Should not be ignored",
},
},
},
resource: &resource2.FakeResource{
Type: "other",
Id: "foobaz",
},
expected: true,
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
alerter := NewAlerter()
alerter.SetAlerts(c.alerts)
if got := alerter.IsResourceIgnored(c.resource); got != c.expected {
t.Errorf("Got %+v, expected %+v", got, c.expected)
}
})
}
}