pve-exporter/collector/physical_disk_test.go
Davíð Steinn Geirsson 0afa5b0e19 test: add physical_disk collector test and fixture
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 15:33:43 +00:00

57 lines
2.8 KiB
Go

package collector
import (
"log/slog"
"strings"
"testing"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/testutil"
)
func TestPhysicalDiskCollector(t *testing.T) {
client := newTestClient(t, map[string]string{
"/nodes/node01/disks/list": "node_disks.json",
})
collector := newPhysicalDiskCollector(slog.Default())
collector.SetNodes([]string{"node01"})
adapter := &testCollectorAdapter{client: client, collector: collector}
reg := prometheus.NewRegistry()
reg.MustRegister(adapter)
expected := `
# HELP pve_physical_disk_health 1 if SMART health is PASSED, 0 otherwise.
# TYPE pve_physical_disk_health gauge
pve_physical_disk_health{devpath="/dev/nvme0n1",model="VV007680KYFFL",node="node01",serial="ADD3NA317I0104K2N",type="nvme"} 1
pve_physical_disk_health{devpath="/dev/nvme1n1",model="VV007680KYFFL",node="node01",serial="ADD3NA317I0104K2O",type="nvme"} 1
pve_physical_disk_health{devpath="/dev/nvme4n1",model="HPE NS204i-u",node="node01",serial="PXTYH0ARHJS080",type="nvme"} 0
# HELP pve_physical_disk_info Physical disk information.
# TYPE pve_physical_disk_info gauge
pve_physical_disk_info{devpath="/dev/nvme0n1",model="VV007680KYFFL",node="node01",serial="ADD3NA317I0104K2N",type="nvme",used="LVM"} 1
pve_physical_disk_info{devpath="/dev/nvme1n1",model="VV007680KYFFL",node="node01",serial="ADD3NA317I0104K2O",type="nvme",used="LVM"} 1
pve_physical_disk_info{devpath="/dev/nvme4n1",model="HPE NS204i-u",node="node01",serial="PXTYH0ARHJS080",type="nvme",used="BIOS boot"} 1
# HELP pve_physical_disk_osd Disk-to-OSD mapping.
# TYPE pve_physical_disk_osd gauge
pve_physical_disk_osd{devpath="/dev/nvme0n1",node="node01",osd="osd.8"} 1
pve_physical_disk_osd{devpath="/dev/nvme1n1",node="node01",osd="osd.9"} 1
pve_physical_disk_osd{devpath="/dev/nvme1n1",node="node01",osd="osd.10"} 1
# HELP pve_physical_disk_size_bytes Physical disk size in bytes.
# TYPE pve_physical_disk_size_bytes gauge
pve_physical_disk_size_bytes{devpath="/dev/nvme0n1",node="node01"} 7.681501126656e+12
pve_physical_disk_size_bytes{devpath="/dev/nvme1n1",node="node01"} 7.681501126656e+12
pve_physical_disk_size_bytes{devpath="/dev/nvme4n1",node="node01"} 4.80036519936e+11
# HELP pve_physical_disk_wearout_remaining_ratio Wearout remaining as a ratio (1.0 = new).
# TYPE pve_physical_disk_wearout_remaining_ratio gauge
pve_physical_disk_wearout_remaining_ratio{devpath="/dev/nvme0n1",node="node01"} 0.95
pve_physical_disk_wearout_remaining_ratio{devpath="/dev/nvme1n1",node="node01"} 0.88
`
if err := testutil.GatherAndCompare(reg, strings.NewReader(expected),
"pve_physical_disk_health", "pve_physical_disk_wearout_remaining_ratio",
"pve_physical_disk_size_bytes", "pve_physical_disk_info", "pve_physical_disk_osd",
); err != nil {
t.Errorf("unexpected metrics: %s", err)
}
}