Pulse/pkg/proxmox/zfs_test.go
2025-10-16 08:17:08 +00:00

70 lines
1.6 KiB
Go

package proxmox
import "testing"
func TestConvertDeviceRecursiveClassifiesVdevs(t *testing.T) {
mirror := ZFSPoolDevice{
Name: "mirror-0",
State: "degraded",
Leaf: 0,
Children: []ZFSPoolDevice{
{Name: "sda", State: "ONLINE", Leaf: 1},
{Name: "sdb", State: "ONLINE", Leaf: 1},
},
}
devices := convertDeviceRecursive(mirror, "")
if len(devices) != 1 {
t.Fatalf("expected single vdev entry, got %d", len(devices))
}
vdev := devices[0]
if vdev.Type != "mirror" {
t.Fatalf("expected mirror type, got %s", vdev.Type)
}
if vdev.State != "DEGRADED" {
t.Fatalf("expected DEGRADED state, got %s", vdev.State)
}
}
func TestConvertDeviceRecursiveLeavesIncludeErrors(t *testing.T) {
dev := ZFSPoolDevice{
Name: "nvme0n1",
State: "degRaDed",
Leaf: 1,
Read: 1,
Write: 2,
Cksum: 3,
Msg: "device error",
}
devices := convertDeviceRecursive(dev, "")
if len(devices) != 1 {
t.Fatalf("expected single device, got %d", len(devices))
}
leaf := devices[0]
if !leaf.IsLeaf {
t.Fatalf("expected leaf device")
}
if leaf.Type != "disk" {
t.Fatalf("expected disk type, got %s", leaf.Type)
}
if leaf.ReadErrors != 1 || leaf.WriteErrors != 2 || leaf.ChecksumErrors != 3 {
t.Fatalf("unexpected error counts: %+v", leaf)
}
if leaf.Message != "device error" {
t.Fatalf("expected message to propagate, got %q", leaf.Message)
}
}
func TestConvertDeviceRecursiveSkipsHealthyLeaf(t *testing.T) {
dev := ZFSPoolDevice{
Name: "nvme0n1",
State: "ONLINE",
Leaf: 1,
}
devices := convertDeviceRecursive(dev, "")
if len(devices) != 0 {
t.Fatalf("expected healthy leaf to be omitted, got %d entries", len(devices))
}
}