Files
Pulse/internal/monitoring/monitor_container_test.go

134 lines
3.6 KiB
Go

package monitoring
import (
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/models"
"github.com/rcourtman/pulse-go-rewrite/pkg/proxmox"
)
func TestParseContainerMountMetadata(t *testing.T) {
config := map[string]interface{}{
"rootfs": "local-lvm:vm-100-disk-0,size=8G",
"mp0": "/mnt/pve/media/subvol-100-disk-1,mp=/mnt/media,acl=1",
"MP1": "local:100/vm-100-disk-2,mp=/srv/backup",
"unused": "ignored",
}
meta := parseContainerMountMetadata(config)
if len(meta) != 3 {
t.Fatalf("expected 3 entries, got %d", len(meta))
}
root, ok := meta["rootfs"]
if !ok {
t.Fatalf("missing rootfs metadata")
}
if root.Mountpoint != "/" {
t.Fatalf("expected root mountpoint '/', got %q", root.Mountpoint)
}
if root.Source != "local-lvm:vm-100-disk-0" {
t.Fatalf("unexpected root source %q", root.Source)
}
mp0, ok := meta["mp0"]
if !ok {
t.Fatalf("missing mp0 metadata")
}
if mp0.Mountpoint != "/mnt/media" {
t.Fatalf("expected mp0 mountpoint '/mnt/media', got %q", mp0.Mountpoint)
}
if mp0.Source != "/mnt/pve/media/subvol-100-disk-1" {
t.Fatalf("unexpected mp0 source %q", mp0.Source)
}
mp1, ok := meta["mp1"]
if !ok {
t.Fatalf("missing mp1 metadata")
}
if mp1.Mountpoint != "/srv/backup" {
t.Fatalf("expected mp1 mountpoint '/srv/backup', got %q", mp1.Mountpoint)
}
if mp1.Source != "local:100/vm-100-disk-2" {
t.Fatalf("unexpected mp1 source %q", mp1.Source)
}
}
func TestConvertContainerDiskInfoUsesMountMetadata(t *testing.T) {
status := &proxmox.Container{
RootFS: "local-lvm:vm-200-disk-0,size=20G",
DiskInfo: map[string]proxmox.ContainerDiskUsage{
"rootfs": {Total: 20 * 1024 * 1024 * 1024, Used: 10 * 1024 * 1024 * 1024},
"mp0": {Total: 100 * 1024 * 1024 * 1024, Used: 50 * 1024 * 1024 * 1024},
},
}
meta := map[string]containerMountMetadata{
"rootfs": {Key: "rootfs", Mountpoint: "/", Source: "local-lvm:vm-200-disk-0"},
"mp0": {Key: "mp0", Mountpoint: "/mnt/media", Source: "/mnt/pve/media/subvol-200-disk-1"},
}
disks := convertContainerDiskInfo(status, meta)
if len(disks) != 2 {
t.Fatalf("expected 2 disks, got %d", len(disks))
}
var rootDisk, mpDisk *models.Disk
for i := range disks {
if disks[i].Mountpoint == "/" {
rootDisk = &disks[i]
}
if disks[i].Mountpoint == "/mnt/media" {
mpDisk = &disks[i]
}
}
if rootDisk == nil {
t.Fatalf("root disk not found in %+v", disks)
}
if rootDisk.Device != "local-lvm:vm-200-disk-0" {
t.Fatalf("unexpected root device %q", rootDisk.Device)
}
if rootDisk.Type != "rootfs" {
t.Fatalf("expected root type rootfs, got %q", rootDisk.Type)
}
if mpDisk == nil {
t.Fatalf("mp0 disk not found in %+v", disks)
}
if mpDisk.Device != "/mnt/pve/media/subvol-200-disk-1" {
t.Fatalf("unexpected mp0 device %q", mpDisk.Device)
}
if mpDisk.Type != "mp0" {
t.Fatalf("expected mp0 type 'mp0', got %q", mpDisk.Type)
}
}
func TestConvertContainerDiskInfoFallsBackWithoutMetadata(t *testing.T) {
status := &proxmox.Container{
RootFS: "local-lvm:vm-300-disk-0,size=16G",
DiskInfo: map[string]proxmox.ContainerDiskUsage{
"rootfs": {Total: 16 * 1024 * 1024 * 1024, Used: 8 * 1024 * 1024 * 1024},
"mp1": {Total: 5 * 1024 * 1024 * 1024, Used: 1 * 1024 * 1024 * 1024},
},
}
disks := convertContainerDiskInfo(status, nil)
if len(disks) != 2 {
t.Fatalf("expected 2 disks, got %d", len(disks))
}
var mpDisk *models.Disk
for i := range disks {
if disks[i].Type == "mp1" {
mpDisk = &disks[i]
}
}
if mpDisk == nil {
t.Fatalf("mp1 disk not found in %+v", disks)
}
if mpDisk.Mountpoint != "mp1" {
t.Fatalf("expected fallback mountpoint 'mp1', got %q", mpDisk.Mountpoint)
}
}