package main import "testing" func TestEvaluateAlerts(t *testing.T) { metrics := dashboardMetrics{ Memory: MemoryMetrics{UsagePercent: 91}, Storage: StorageMetrics{UsagePercent: 96}, Backups: BackupMetrics{}, Guests: GuestsMetrics{}, } alerts := evaluateAlerts(metrics, defaultThresholds()) if len(alerts) != 2 { t.Fatalf("ожидалось два уведомления, получено: %+v", alerts) } if alerts[0].Severity != "critical" || alerts[1].Severity != "warning" { t.Fatalf("неверная сортировка уведомлений: %+v", alerts) } } func TestSlowCollectionDoesNotCreateAlert(t *testing.T) { metrics := dashboardMetrics{Monitor: MonitorHealth{SlowCollector: true, CollectionDurationMs: 12308}} for _, alert := range evaluateAlerts(metrics, defaultThresholds()) { if alert.ID == "monitor-slow" { t.Fatalf("медленный цикл не должен создавать уведомление: %+v", alert) } } } func TestNeverRunSelfTestCreatesOneAlert(t *testing.T) { metrics := dashboardMetrics{Disks: []DiskMetrics{{ Name: "nvme0n1", Model: "Test NVMe", SMARTStatus: "Требует внимания", SelfTestNeverRun: true, AttentionReasons: []string{"SMART self-test ещё ни разу не запускался"}, }}} alerts := evaluateAlerts(metrics, defaultThresholds()) if len(alerts) != 1 || alerts[0].ID != "disk-selftest-nvme0n1" { t.Fatalf("ожидалось одно точное уведомление о self-test, получено: %+v", alerts) } }