Files

57 lines
2.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}