Pulse/internal/alerts/default_normalization_test.go
2026-03-18 16:06:30 +00:00

191 lines
4.5 KiB
Go

package alerts
import "testing"
func TestNormalizeSnapshotDefaults(t *testing.T) {
tests := []struct {
name string
in SnapshotAlertConfig
want SnapshotAlertConfig
}{
{
name: "negative values clamp to zero",
in: SnapshotAlertConfig{
WarningDays: -1,
CriticalDays: -2,
WarningSizeGiB: -3,
CriticalSizeGiB: -4,
},
want: SnapshotAlertConfig{},
},
{
name: "warning values clamp down to critical",
in: SnapshotAlertConfig{
WarningDays: 10,
CriticalDays: 3,
WarningSizeGiB: 40,
CriticalSizeGiB: 8,
},
want: SnapshotAlertConfig{
WarningDays: 3,
CriticalDays: 3,
WarningSizeGiB: 8,
CriticalSizeGiB: 8,
},
},
{
name: "critical inherits warning when critical unset",
in: SnapshotAlertConfig{
WarningDays: 7,
CriticalDays: 0,
WarningSizeGiB: 12,
CriticalSizeGiB: 0,
},
want: SnapshotAlertConfig{
WarningDays: 7,
CriticalDays: 7,
WarningSizeGiB: 12,
CriticalSizeGiB: 12,
},
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
cfg := &AlertConfig{SnapshotDefaults: tc.in}
normalizeSnapshotDefaults(cfg)
got := cfg.SnapshotDefaults
if got != tc.want {
t.Fatalf("normalizeSnapshotDefaults() = %+v, want %+v", got, tc.want)
}
})
}
}
func TestNormalizeBackupDefaults(t *testing.T) {
falseValue := false
cfg := &AlertConfig{
BackupDefaults: BackupAlertConfig{
WarningDays: 10,
CriticalDays: 3,
AlertOrphaned: &falseValue,
IgnoreVMIDs: []string{
" 101 ",
"",
"101",
" 10* ",
" ",
"10*",
},
},
}
normalizeBackupDefaults(cfg)
if cfg.BackupDefaults.WarningDays != 3 {
t.Fatalf("WarningDays = %d, want 3", cfg.BackupDefaults.WarningDays)
}
if cfg.BackupDefaults.CriticalDays != 3 {
t.Fatalf("CriticalDays = %d, want 3", cfg.BackupDefaults.CriticalDays)
}
if cfg.BackupDefaults.AlertOrphaned == nil {
t.Fatal("AlertOrphaned should not be nil")
}
if *cfg.BackupDefaults.AlertOrphaned != false {
t.Fatalf("AlertOrphaned = %v, want false", *cfg.BackupDefaults.AlertOrphaned)
}
wantIgnore := []string{"101", "10*"}
if len(cfg.BackupDefaults.IgnoreVMIDs) != len(wantIgnore) {
t.Fatalf("IgnoreVMIDs length = %d, want %d (%v)", len(cfg.BackupDefaults.IgnoreVMIDs), len(wantIgnore), cfg.BackupDefaults.IgnoreVMIDs)
}
for i := range wantIgnore {
if cfg.BackupDefaults.IgnoreVMIDs[i] != wantIgnore[i] {
t.Fatalf("IgnoreVMIDs[%d] = %q, want %q", i, cfg.BackupDefaults.IgnoreVMIDs[i], wantIgnore[i])
}
}
}
func TestNormalizeBackupDefaultsSetsAlertOrphanedDefaultAndClampsNegativeDays(t *testing.T) {
cfg := &AlertConfig{
BackupDefaults: BackupAlertConfig{
WarningDays: -2,
CriticalDays: -1,
},
}
normalizeBackupDefaults(cfg)
if cfg.BackupDefaults.WarningDays != 0 {
t.Fatalf("WarningDays = %d, want 0", cfg.BackupDefaults.WarningDays)
}
if cfg.BackupDefaults.CriticalDays != 0 {
t.Fatalf("CriticalDays = %d, want 0", cfg.BackupDefaults.CriticalDays)
}
if cfg.BackupDefaults.AlertOrphaned == nil {
t.Fatal("AlertOrphaned should be defaulted to true")
}
if !*cfg.BackupDefaults.AlertOrphaned {
t.Fatalf("AlertOrphaned = %v, want true", *cfg.BackupDefaults.AlertOrphaned)
}
}
func TestBackupIgnoreVMID(t *testing.T) {
tests := []struct {
name string
vmID string
ignoreList []string
want bool
}{
{
name: "empty vmid returns false",
vmID: "",
ignoreList: []string{"101"},
want: false,
},
{
name: "exact match",
vmID: "101",
ignoreList: []string{"101"},
want: true,
},
{
name: "prefix wildcard match",
vmID: "10123",
ignoreList: []string{"101*"},
want: true,
},
{
name: "trim spaces before matching",
vmID: "200",
ignoreList: []string{" 200 "},
want: true,
},
{
name: "star only pattern does not match everything",
vmID: "101",
ignoreList: []string{"*"},
want: false,
},
{
name: "blank entries ignored",
vmID: "101",
ignoreList: []string{" ", ""},
want: false,
},
{
name: "no match",
vmID: "999",
ignoreList: []string{"101", "10*"},
want: false,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
if got := backupIgnoreVMID(tc.vmID, tc.ignoreList); got != tc.want {
t.Fatalf("backupIgnoreVMID(%q, %v) = %v, want %v", tc.vmID, tc.ignoreList, got, tc.want)
}
})
}
}