From 9c9d47e99ea6e6acbd36cd290377ff77d57a7217 Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:59:53 +0300 Subject: [PATCH] [v10.4.x] Alerting: Fix panic in provisioning filter contacts by unknown name (#90440) Alerting: Fix panic in provisioning filter contacts by unknown name (#83070) (cherry picked from commit 87ab98ea95ddddf647b73e557b79d0f2d6e944b8) Co-authored-by: Matthew Jacobson --- pkg/services/ngalert/provisioning/contactpoints.go | 2 +- pkg/services/ngalert/provisioning/contactpoints_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/services/ngalert/provisioning/contactpoints.go b/pkg/services/ngalert/provisioning/contactpoints.go index 238b20683bc..02eeb66978d 100644 --- a/pkg/services/ngalert/provisioning/contactpoints.go +++ b/pkg/services/ngalert/provisioning/contactpoints.go @@ -80,7 +80,7 @@ func (ecp *ContactPointService) GetContactPoints(ctx context.Context, q ContactP return nil, convertRecSvcErr(err) } grafanaReceivers := []*apimodels.GettableGrafanaReceiver{} - if q.Name != "" { + if q.Name != "" && len(res) > 0 { grafanaReceivers = res[0].GettableGrafanaReceivers.GrafanaManagedReceivers // we only expect one receiver group } else { for _, r := range res { diff --git a/pkg/services/ngalert/provisioning/contactpoints_test.go b/pkg/services/ngalert/provisioning/contactpoints_test.go index 995b9bb6c47..12081f1ba5d 100644 --- a/pkg/services/ngalert/provisioning/contactpoints_test.go +++ b/pkg/services/ngalert/provisioning/contactpoints_test.go @@ -53,6 +53,15 @@ func TestContactPointService(t *testing.T) { require.Equal(t, "slack receiver", cps[0].Name) }) + t.Run("service filters contact points by name, returns empty when no match", func(t *testing.T) { + sut := createContactPointServiceSut(t, secretsService) + + cps, err := sut.GetContactPoints(context.Background(), cpsQueryWithName(1, "unknown"), nil) + require.NoError(t, err) + + require.Len(t, cps, 0) + }) + t.Run("service stitches contact point into org's AM config", func(t *testing.T) { sut := createContactPointServiceSut(t, secretsService) newCp := createTestContactPoint()