driftctl/pkg/alerter/alerter_test.go

163 lines
3.3 KiB
Go

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{
&FakeAlert{"This is an alert", false},
},
},
expected: Alerts{
"fakeres.foobar": []Alert{
&FakeAlert{"This is an alert", false},
},
},
},
{
name: "TestWithMultipleAlerts",
alerts: Alerts{
"fakeres.foobar": []Alert{
&FakeAlert{"This is an alert", false},
&FakeAlert{"This is a second alert", true},
},
"fakeres.barfoo": []Alert{
&FakeAlert{"This is a third alert", true},
},
},
expected: Alerts{
"fakeres.foobar": []Alert{
&FakeAlert{"This is an alert", false},
&FakeAlert{"This is a second alert", true},
},
"fakeres.barfoo": []Alert{
&FakeAlert{"This is a third alert", 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)
}
}
if eq := reflect.DeepEqual(alerter.Retrieve(), c.expected); !eq {
t.Errorf("Got %+v, expected %+v", alerter.Retrieve(), c.expected)
}
})
}
}
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": {
&FakeAlert{"Should not be ignored", false},
},
"fakeres.foobar": {
&FakeAlert{"Should not be ignored", false},
},
"fakeres.barfoo": {
&FakeAlert{"Should not be ignored", false},
},
"other.resource": {
&FakeAlert{"Should not be ignored", false},
},
},
resource: &resource2.FakeResource{
Type: "fakeres",
Id: "foobar",
},
expected: false,
},
{
name: "TestShouldBeIgnoredWithAlertsOnWildcard",
alerts: Alerts{
"fakeres": {
&FakeAlert{"Should be ignored", true},
},
"other.foobaz": {
&FakeAlert{"Should be ignored", true},
},
"other.resource": {
&FakeAlert{"Should not be ignored", false},
},
},
resource: &resource2.FakeResource{
Type: "fakeres",
Id: "foobar",
},
expected: true,
},
{
name: "TestShouldBeIgnoredWithAlertsOnResource",
alerts: Alerts{
"fakeres": {
&FakeAlert{"Should be ignored", true},
},
"other.foobaz": {
&FakeAlert{"Should be ignored", true},
},
"other.resource": {
&FakeAlert{"Should not be ignored", false},
},
},
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)
}
})
}
}