mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-03 14:00:16 +00:00
129 lines
3.1 KiB
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)
|
|
}
|
|
}
|