package main import "testing" func TestAlertLifecycle(t *testing.T) { store, err := openStore(":memory:") if err != nil { t.Fatal(err) } defer store.Close() alert := Alert{ID: "disk", Severity: "warning", Source: "Диски", Title: "SMART", Message: "Проверьте диск"} visible, err := store.SyncAlerts([]Alert{alert}) if err != nil || len(visible) != 1 || visible[0].EventID == 0 || visible[0].FirstSeen == 0 || visible[0].LastSeen == 0 { t.Fatalf("unexpected new alert: %+v %v", visible, err) } firstID := visible[0].EventID if err = store.AcknowledgeAlert(firstID); err != nil { t.Fatal(err) } visible, err = store.SyncAlerts([]Alert{alert}) if err != nil || len(visible) != 0 { t.Fatalf("acknowledged alert became visible: %+v %v", visible, err) } if _, err = store.SyncAlerts(nil); err != nil { t.Fatal(err) } visible, err = store.SyncAlerts([]Alert{alert}) if err != nil || len(visible) != 1 || visible[0].EventID == firstID { t.Fatalf("recurring alert was not new: %+v %v", visible, err) } history, err := store.AlertHistory(20) if err != nil || len(history) != 2 { t.Fatalf("unexpected history: %+v %v", history, err) } } func TestPendingEmailAlerts(t *testing.T) { store, err := openStore(":memory:") if err != nil { t.Fatal(err) } defer store.Close() visible, err := store.SyncAlerts([]Alert{{ID: "cpu", Severity: "critical", Source: "CPU", Title: "Load"}}) if err != nil { t.Fatal(err) } pending, err := store.PendingEmailAlerts() if err != nil || len(pending) != 1 { t.Fatalf("unexpected pending: %+v %v", pending, err) } if err = store.MarkAlertsEmailed(visible); err != nil { t.Fatal(err) } pending, err = store.PendingEmailAlerts() if err != nil || len(pending) != 0 { t.Fatalf("emailed alert repeated: %+v %v", pending, err) } }