mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
100 lines
2.5 KiB
Go
100 lines
2.5 KiB
Go
package notifications
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/alerts"
|
|
)
|
|
|
|
func TestSendResolvedApprise_NoAlerts(t *testing.T) {
|
|
nm := NewNotificationManager("")
|
|
defer nm.Stop()
|
|
|
|
err := nm.sendResolvedApprise(AppriseConfig{Enabled: true}, nil, time.Now())
|
|
if err == nil {
|
|
t.Fatalf("expected error for empty alerts list")
|
|
}
|
|
}
|
|
|
|
func TestSendResolvedApprise_DisabledConfig(t *testing.T) {
|
|
nm := NewNotificationManager("")
|
|
defer nm.Stop()
|
|
|
|
alertList := []*alerts.Alert{{ID: "a1", ResourceName: "db"}}
|
|
err := nm.sendResolvedApprise(AppriseConfig{Enabled: false}, alertList, time.Now())
|
|
if err == nil {
|
|
t.Fatalf("expected error for disabled config")
|
|
}
|
|
}
|
|
|
|
func TestSendResolvedApprise_InvalidPayload(t *testing.T) {
|
|
nm := NewNotificationManager("")
|
|
defer nm.Stop()
|
|
|
|
alertList := []*alerts.Alert{nil}
|
|
err := nm.sendResolvedApprise(AppriseConfig{Enabled: true, Targets: []string{"discord://token"}}, alertList, time.Now())
|
|
if err == nil {
|
|
t.Fatalf("expected error for invalid payload")
|
|
}
|
|
}
|
|
|
|
func TestSendResolvedApprise_HTTP(t *testing.T) {
|
|
nm := NewNotificationManager("")
|
|
defer nm.Stop()
|
|
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}))
|
|
defer server.Close()
|
|
|
|
if err := nm.UpdateAllowedPrivateCIDRs("127.0.0.1/32"); err != nil {
|
|
t.Fatalf("allowlist: %v", err)
|
|
}
|
|
|
|
alertList := []*alerts.Alert{{
|
|
ID: "a1",
|
|
ResourceName: "db-1",
|
|
Level: alerts.AlertLevelWarning,
|
|
Message: "ok",
|
|
}}
|
|
|
|
err := nm.sendResolvedApprise(AppriseConfig{
|
|
Enabled: true,
|
|
Mode: AppriseModeHTTP,
|
|
ServerURL: server.URL,
|
|
TimeoutSeconds: 2,
|
|
}, alertList, time.Now())
|
|
if err != nil {
|
|
t.Fatalf("expected resolved apprise HTTP to succeed, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestSendResolvedApprise_CLI(t *testing.T) {
|
|
nm := NewNotificationManager("")
|
|
defer nm.Stop()
|
|
|
|
nm.appriseExec = func(ctx context.Context, args []string) ([]byte, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
alertList := []*alerts.Alert{{
|
|
ID: "a1",
|
|
ResourceName: "db-1",
|
|
Level: alerts.AlertLevelWarning,
|
|
Message: "ok",
|
|
}}
|
|
|
|
err := nm.sendResolvedApprise(AppriseConfig{
|
|
Enabled: true,
|
|
Mode: AppriseModeCLI,
|
|
Targets: []string{"discord://token"},
|
|
TimeoutSeconds: 2,
|
|
}, alertList, time.Now())
|
|
if err != nil {
|
|
t.Fatalf("expected resolved apprise CLI to succeed, got %v", err)
|
|
}
|
|
}
|