Files
felhom.eu/hub/internal/sysfacts/sysfacts_test.go
T

44 lines
2.2 KiB
Go

package sysfacts
import "testing"
const full = `{"system":{"pve_version":"pve-manager/9.0.11/abc","kernel_version":"Linux 7.0.14-20-pve #1 SMP","vmid":9201,
"read_at":"2026-10-04T15:00:00Z","facts":{"host":{"debian":"13.7","kernel_running":"7.0.14-20-pve","kernel_next_boot":"7.0.2-6-pve",
"held":["tzdata"],"tainted":4225,"oops_this_boot":true,"kernel_panic":10,"crash_guard":{"armed":false,"tripped":true,
"tripped_at":"2026-10-04T16:00:00Z","unclean_boots":["2026-10-04T15:40:00Z"],"unclean_boots_24h":1}},
"guest":{"debian":"13.7","docker_engine":"29.7.2","containerd":"2.3.3-1","live_restore":"on"}}}}`
func TestParse_Full(t *testing.T) {
s := Parse(full)
if !s.Present || ShortPVE(s.PVEVersion) != "9.0.11" || ShortKernel(s.KernelVersion) != "7.0.14-20-pve" || s.VMID != 9201 {
t.Fatalf("%+v", s)
}
if s.Host.Debian != "13.7" || len(s.Host.Held) != 1 || !*s.Host.OopsThisBoot || !s.Host.CrashGuard.Tripped || !s.NextBootDiffers() {
t.Fatalf("host %+v", s.Host)
}
if s.Guest.DockerEngine != "29.7.2" || s.Guest.LiveRestore != "on" {
t.Fatalf("guest %+v", s.Guest)
}
}
// An agent older than v0.142.0, or a stanza whose facts failed: unknown everywhere, never empty.
// Red-proof: drop the orUnknown on the guest fields and the partial case fails.
func TestParse_AbsentAndPartialAreUnknown(t *testing.T) {
s := Parse(`{"host":{}}`)
if s.Present || s.PVEVersion != Unknown || s.Guest.DockerEngine != Unknown || s.Host.Held != nil {
t.Fatalf("absent: %+v", s)
}
s = Parse(`{"system":{"pve_version":"pve-manager/9.0.11/x","facts_error":"no running customer guest"}}`)
if !s.Present || s.Guest.DockerEngine != Unknown || s.Guest.LiveRestore != Unknown || s.Host.KernelRunning != Unknown || s.FactsError == "" {
t.Fatalf("partial: %+v", s)
}
// facts present but empty fields (a guest that answered nothing): still unknown, not ""
s = Parse(`{"system":{"pve_version":"x","facts":{"host":{},"guest":{"docker_engine":"","live_restore":"","containerd":""}}}}`)
if s.Guest.DockerEngine != Unknown || s.Guest.LiveRestore != Unknown || s.Guest.Containerd != Unknown || s.Host.Debian != Unknown {
t.Fatalf("empty facts fields: %+v", s)
}
if s.NextBootDiffers() {
t.Fatal("unknown kernels must not read as 'differs'")
}
}