Pulse/internal/monitoring/storage_backup_preserve_test.go

129 lines
3.1 KiB
Go

package monitoring
import (
"slices"
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/models"
)
func TestPreserveFailedStorageBackups(t *testing.T) {
instance := "pve01"
current := []models.StorageBackup{
{
ID: "pve01-volid-new",
Instance: instance,
Storage: "local-lvm",
Volid: "local-lvm:backup/new.vma.zst",
},
}
snapshot := models.StateSnapshot{
PVEBackups: models.PVEBackups{
StorageBackups: []models.StorageBackup{
{
ID: "pve01-volid-old",
Instance: instance,
Storage: "nas-share",
Volid: "nas-share:backup/old.vma.zst",
},
{
ID: "pve01-volid-new",
Instance: instance,
Storage: "local-lvm",
Volid: "local-lvm:backup/new.vma.zst",
},
},
},
}
toPreserve := map[string]struct{}{
"nas-share": {},
}
merged, storages := preserveFailedStorageBackups(instance, snapshot, toPreserve, current)
if len(merged) != 2 {
t.Fatalf("expected 2 backups after merge, got %d", len(merged))
}
if !slices.Contains(storages, "nas-share") {
t.Fatalf("expected nas-share to be reported as preserved, got %v", storages)
}
if !slices.ContainsFunc(merged, func(b models.StorageBackup) bool {
return b.Storage == "nas-share"
}) {
t.Fatalf("expected preserved backup for nas-share to be present")
}
}
func TestPreserveFailedStorageBackupsSkipsDuplicates(t *testing.T) {
instance := "pve01"
current := []models.StorageBackup{
{
ID: "pve01-volid-old",
Instance: instance,
Storage: "nas-share",
Volid: "nas-share:backup/old.vma.zst",
},
}
snapshot := models.StateSnapshot{
PVEBackups: models.PVEBackups{
StorageBackups: []models.StorageBackup{
{
ID: "pve01-volid-old",
Instance: instance,
Storage: "nas-share",
Volid: "nas-share:backup/old.vma.zst",
},
},
},
}
toPreserve := map[string]struct{}{
"nas-share": {},
}
merged, storages := preserveFailedStorageBackups(instance, snapshot, toPreserve, current)
if len(merged) != 1 {
t.Fatalf("expected duplicate backup to be ignored, got %d entries", len(merged))
}
if len(storages) != 0 {
t.Fatalf("expected no storages to be reported because nothing new was preserved, got %v", storages)
}
}
func TestStorageNamesForNode(t *testing.T) {
instance := "pve01"
snapshot := models.StateSnapshot{
Storage: []models.Storage{
{
Name: "local-zfs",
Instance: instance,
Node: "pve-node1",
Content: "images,rootdir,backup",
},
{
Name: "nas-share",
Instance: instance,
Nodes: []string{"pve-node2", "pve-node3"},
Content: "backup,iso",
},
{
Name: "other-instance",
Instance: "pve02",
Node: "pve-node1",
Content: "backup",
},
},
}
found := storageNamesForNode(instance, "pve-node2", snapshot)
if !slices.Equal(found, []string{"nas-share"}) {
t.Fatalf("unexpected storages for node2: %v", found)
}
found = storageNamesForNode(instance, "pve-node1", snapshot)
if !slices.Equal(found, []string{"local-zfs"}) {
t.Fatalf("unexpected storages for node1: %v", found)
}
}