package tools import ( "strings" "testing" ) // TestDiskUsageCmd — команда точного disk_usage обязана квотировать путь и // не путать "место на /opt" с корнем (df по конкретному пути, не "df -h /"). func TestDiskUsageCmd(t *testing.T) { cmd := diskUsageCmd("/opt") for _, want := range []string{"df -hP", "'/opt'"} { if !strings.Contains(cmd, want) { t.Errorf("diskUsageCmd(/opt) = %q: missing %q", cmd, want) } } if strings.Contains(cmd, "df -h /") { t.Errorf("diskUsageCmd(/opt) = %q: must not fall back to root-only 'df -h /'", cmd) } // Апостроф/спецсимвол в пути не должен ломать квотирование (инъекция). cmd2 := diskUsageCmd("/opt/x' ;rm -rf /") if !strings.Contains(cmd2, shellQuote("/opt/x' ;rm -rf /")) { t.Errorf("diskUsageCmd does not shellQuote path: %q", cmd2) } } // TestHighlightHighUsage — регрессия на "почти полный" раздел: >=80% должен // получить маркер, а <80% и заголовок — нет (раньше фильтр >90% скрывал 84%). func TestHighlightHighUsage(t *testing.T) { in := "Filesystem 1024-blocks Used Available Capacity Mounted-on\n" + "/dev/mapper/opt-opt 128G 102G 20G 84% /opt\n" + "/dev/sda1 30G 25G 3.6G 84% /\n" out := highlightHighUsage(in) if !strings.Contains(out, "/opt") { t.Fatalf("highlightHighUsage dropped /opt: %q", out) } if !strings.Contains(out, "<< USE>=80%") { t.Errorf("highlightHighUsage should mark >=80%% partition: %q", out) } // Колонка 5 у /opt — "84%"; маркер должен стоять на этой строке. var marked bool for _, line := range strings.Split(out, "\n") { if strings.Contains(line, "/opt") && strings.Contains(line, "84%") { if !strings.Contains(line, "<< USE>=80%") { t.Errorf("84%% partition not marked on its own line: %q", line) } marked = true } if strings.Contains(line, "Filesystem") && strings.Contains(line, "<< USE>=80%") { t.Errorf("header must not be marked: %q", line) } } if !marked { t.Errorf("the /opt line was not marked: %q", out) } }