package main import ( "encoding/json" "testing" ) func TestIsPhysicalDiskName(t *testing.T) { tests := map[string]bool{ "sda": true, "sdb": true, "nvme0n1": true, "loop0": false, "dm-0": false, "zram0": false, "md0": false, } for name, expected := range tests { if actual := isPhysicalDiskName(name); actual != expected { t.Fatalf("isPhysicalDiskName(%q) = %v, ожидалось %v", name, actual, expected) } } } func TestSumFilesystemUsage(t *testing.T) { device := lsblkDevice{Children: []lsblkDevice{ {FSUsed: json.RawMessage(`100`), FSAvail: json.RawMessage(`300`)}, {FSUsed: json.RawMessage(`200`), FSAvail: json.RawMessage(`400`)}, }} used, total, ok := sumFilesystemUsage(device) if !ok || used != 300 || total != 1000 { t.Fatalf("неожиданное использование диска: used=%d total=%d ok=%v", used, total, ok) } } func TestApplyATAWearAndReason(t *testing.T) { var smart smartctlJSON attribute := struct { Name string `json:"name"` Value int `json:"value"` Threshold int `json:"thresh"` WhenFailed string `json:"when_failed"` Raw struct { String string `json:"string"` Value int64 `json:"value"` } `json:"raw"` }{Name: "SSD_Life_Left", Value: 92, WhenFailed: "FAILING_NOW"} smart.ATAAttributes.Table = append(smart.ATAAttributes.Table, attribute) disk := DiskMetrics{} applyATAAttributes(&disk, smart) if disk.WearUsedPercent == nil || *disk.WearUsedPercent != 8 { t.Fatalf("неожиданный износ: %v", disk.WearUsedPercent) } if len(disk.AttentionReasons) != 1 { t.Fatalf("причина предупреждения не добавлена: %+v", disk) } }