//go:build windows package collector import ( "syscall" "testing" ) // TestWindowsMemoryInfoFromStatus verifies Windows memory counters are exposed in bytes. func TestWindowsMemoryInfoFromStatus(t *testing.T) { got := windowsMemoryInfoFromStatus(windowsMemoryStatus{ TotalPhys: 10, AvailPhys: 4, }) if got.Unit != "byte" { t.Fatalf("unit = %q, want byte", got.Unit) } if got.Total != 10 || got.Available != 4 || got.Free != 4 || got.Used != 6 { t.Fatalf("memory = %+v", got) } if got.UsedPercent != 60 { t.Fatalf("used percent = %f, want 60", got.UsedPercent) } } // TestWindowsTCPPortFromNetworkOrder verifies Windows TCP port values are decoded. func TestWindowsTCPPortFromNetworkOrder(t *testing.T) { if got := windowsTCPPortFromNetworkOrder(0x0000901f); got != 8080 { t.Fatalf("port = %d, want 8080", got) } } // TestWindowsDiskInfoFromSpace verifies Windows disk counters are mapped to API disk fields. func TestWindowsDiskInfoFromSpace(t *testing.T) { got := windowsDiskInfoFromSpace(`C:\`, windowsDriveFixed, 100, 40) if got.Device != `C:\` || got.MountPoint != `C:\` { t.Fatalf("disk paths = %q/%q", got.Device, got.MountPoint) } if got.FSType != "fixed" || got.Unit != "byte" { t.Fatalf("disk type/unit = %q/%q", got.FSType, got.Unit) } if got.Total != 100 || got.Free != 40 || got.Used != 60 { t.Fatalf("disk capacity = %+v", got) } if got.UsedPercent != 60 { t.Fatalf("used percent = %f, want 60", got.UsedPercent) } } // TestWindowsCPUUsagePercent verifies idle and kernel counters are converted to busy percentage. func TestWindowsCPUUsagePercent(t *testing.T) { prev := windowsSystemTimes{Idle: 100, Kernel: 500, User: 500} next := windowsSystemTimes{Idle: 150, Kernel: 650, User: 700} got := windowsCPUUsagePercent(prev, next) if got != 75 { t.Fatalf("cpu usage = %f, want 75", got) } } // TestWindowsProcessInfoFromEntry verifies Toolhelp process data is enriched with memory and command line data. func TestWindowsProcessInfoFromEntry(t *testing.T) { entry := syscall.ProcessEntry32{ProcessID: 123, ParentProcessID: 12} copy(entry.ExeFile[:], syscall.StringToUTF16("agent.exe")) got := windowsProcessInfoFromEntry(entry, windowsProcessDetails{ Exe: `C:\agent\agent.exe`, Cmdline: `"C:\agent\agent.exe" run`, Username: `NT AUTHORITY\SYSTEM`, MemoryRSS: 2048, MemoryVMS: 4096, }) if got.PID != 123 || got.PPID != 12 || got.Name != "agent.exe" { t.Fatalf("process identity = %+v", got) } if got.Exe != `C:\agent\agent.exe` || got.Cmdline != `"C:\agent\agent.exe" run` { t.Fatalf("process command fields = %+v", got) } if got.Username != `NT AUTHORITY\SYSTEM` || got.MemoryRSS != 2048 || got.MemoryVMS != 4096 { t.Fatalf("process details = %+v", got) } }