57 lines
2.2 KiB
Go
57 lines
2.2 KiB
Go
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)
|
||
}
|
||
}
|