56 строки
1.8 KiB
Go
56 строки
1.8 KiB
Go
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)
|
|
}
|
|
}
|