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.
162 lines
4.8 KiB
162 lines
4.8 KiB
package notify
|
|
|
|
import (
|
|
"github.com/analogj/scrutiny/webapp/backend/pkg"
|
|
"github.com/analogj/scrutiny/webapp/backend/pkg/models"
|
|
"github.com/analogj/scrutiny/webapp/backend/pkg/models/measurements"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func TestShouldNotify_MustSkipPassingDevices(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusPassed,
|
|
}
|
|
smartAttrs := measurements.Smart{}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesAll
|
|
|
|
//assert
|
|
require.False(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyLevelFail_FailingSmartDevice(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesAll
|
|
|
|
//assert
|
|
require.True(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyLevelFailSmart_FailingSmartDevice(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{}
|
|
notifyLevel := pkg.NotifyLevelFailSmart
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesAll
|
|
|
|
//assert
|
|
require.True(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyLevelFailScrutiny_FailingSmartDevice(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{}
|
|
notifyLevel := pkg.NotifyLevelFailScrutiny
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesAll
|
|
|
|
//assert
|
|
require.False(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyFilterAttributesCritical_WithCriticalAttrs(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{Attributes: map[string]measurements.SmartAttribute{
|
|
"5": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusFailedSmart,
|
|
},
|
|
}}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesCritical
|
|
|
|
//assert
|
|
require.True(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyFilterAttributesCritical_WithMultipleCriticalAttrs(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{Attributes: map[string]measurements.SmartAttribute{
|
|
"5": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusPassed,
|
|
},
|
|
"10": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusFailedScrutiny,
|
|
},
|
|
}}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesCritical
|
|
|
|
//assert
|
|
require.True(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyFilterAttributesCritical_WithNoCriticalAttrs(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{Attributes: map[string]measurements.SmartAttribute{
|
|
"1": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusFailedSmart,
|
|
},
|
|
}}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesCritical
|
|
|
|
//assert
|
|
require.False(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyFilterAttributesCritical_WithNoFailingCriticalAttrs(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{Attributes: map[string]measurements.SmartAttribute{
|
|
"5": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusPassed,
|
|
},
|
|
}}
|
|
notifyLevel := pkg.NotifyLevelFail
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesCritical
|
|
|
|
//assert
|
|
require.False(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|
|
|
|
func TestShouldNotify_NotifyFilterAttributesCritical_NotifyLevelFailSmart_WithCriticalAttrsFailingScrutiny(t *testing.T) {
|
|
t.Parallel()
|
|
//setup
|
|
device := models.Device{
|
|
DeviceStatus: pkg.DeviceStatusFailedSmart,
|
|
}
|
|
smartAttrs := measurements.Smart{Attributes: map[string]measurements.SmartAttribute{
|
|
"5": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusPassed,
|
|
},
|
|
"10": &measurements.SmartAtaAttribute{
|
|
Status: pkg.AttributeStatusFailedScrutiny,
|
|
},
|
|
}}
|
|
notifyLevel := pkg.NotifyLevelFailSmart
|
|
notifyFilterAttributes := pkg.NotifyFilterAttributesCritical
|
|
|
|
//assert
|
|
require.False(t, ShouldNotify(device, smartAttrs, notifyLevel, notifyFilterAttributes))
|
|
}
|