package proxmox import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestHardwareDisksExcludeDevicesAndDetectUnsafeTopology(t *testing.T) { h, err := ReadHardware(map[string]any{"digest": "abc", "cores": 4, "memory": 4096, "scsi0": "local:vm-1,size=60G", "virtio1": "fast:vm-1,size=1T", "sata0": "/dev/disk/by-id/physical,size=60G", "ide2": "local:iso/boot.iso,media=cdrom,size=2G", "ide0": "local:cloudinit,size=4M", "efidisk0": "local:efi,size=4M", "tpmstate0": "local:tpm,size=4M", "numa0": "cpus=0-3,hostnodes=0", "lock": "backup"}) if err != nil || len(h.Disks) != 2 || h.Disks[0].SizeGiB != 60 || h.Disks[1].SizeGiB != 1024 || len(h.Blockers) != 2 { t.Fatal(h, err) } if _, err = ReadHardware(map[string]any{}); err == nil { t.Fatal("missing digest accepted") } } func TestHardwareMemoryOnlyDoesNotRequireCPUPermissions(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() if r.Method != "POST" || len(r.Form) != 2 || r.Form.Get("memory") != "4096" || r.Form.Get("digest") != "original" { t.Error("unexpected mutation", r.Method, r.Form) } _ = json.NewEncoder(w).Encode(map[string]any{"data": "UPID:memory-only"}) })) defer srv.Close() c := Client{BaseURL: srv.URL, HTTP: srv.Client()} _, err := c.ConfigureHardware(context.Background(), "node", 1, 2, 1, 4096, "original", map[string]any{"cores": 2, "sockets": 1, "memory": 2048, "vcpus": 2}) if err != nil { t.Fatal(err) } }