package distworker import ( "fmt" "os" "path/filepath" "strconv" "testing" ) func TestReadLinuxHostMetrics(t *testing.T) { root := t.TempDir() if err := os.WriteFile(filepath.Join(root, "meminfo"), []byte("MemTotal: 100 kB\nMemAvailable: 25 kB\n"), 0o600); err != nil { t.Fatal(err) } if err := os.WriteFile(filepath.Join(root, "loadavg"), []byte("1.5 2.5 3.5 1/1 1\n"), 0o600); err != nil { t.Fatal(err) } if err := os.WriteFile(filepath.Join(root, "uptime"), []byte("42.9 0\n"), 0o600); err != nil { t.Fatal(err) } total, available, one, five, fifteen, uptime, ok := readLinuxHostMetrics(root) if !ok || total != 102400 || available != 25600 || one != 1.5 || five != 2.5 || fifteen != 3.5 || uptime != 42 { t.Fatalf("unexpected host metric parse: %d %d %g %g %g %d %t", total, available, one, five, fifteen, uptime, ok) } } func TestCollectProcessesLimitsAndSortsByRSS(t *testing.T) { root := t.TempDir() for i := 1; i <= maxServerMetricProcesses+2; i++ { dir := filepath.Join(root, strconv.Itoa(i)) if err := os.Mkdir(dir, 0o700); err != nil { t.Fatal(err) } status := fmt.Sprintf("Name:\tproc%d\nVmRSS:\t%d kB\n", i, i) if err := os.WriteFile(filepath.Join(dir, "status"), []byte(status), 0o600); err != nil { t.Fatal(err) } } processes := collectProcesses(root) if len(processes) != maxServerMetricProcesses || processes[0].PID != maxServerMetricProcesses+2 { t.Fatalf("unexpected bounded process snapshot: %#v", processes) } } func TestReadCPUCounters(t *testing.T) { path := filepath.Join(t.TempDir(), "stat") if err := os.WriteFile(path, []byte("cpu 10 2 8 70 10 0 0 0\n"), 0o600); err != nil { t.Fatal(err) } total, idle, ok := readCPUCounters(path) if !ok || total != 100 || idle != 80 { t.Fatalf("unexpected cpu counters: %d %d %t", total, idle, ok) } }