diff --git a/api/v2/api.go b/api/v2/api.go index 4a723f57a..a808976c7 100644 --- a/api/v2/api.go +++ b/api/v2/api.go @@ -223,8 +223,8 @@ func (api *API) getReceiversHandler(params receiver_ops.GetReceiversParams) midd defer api.mtx.RUnlock() receivers := make([]*open_api_models.Receiver, 0, len(api.alertmanagerConfig.Receivers)) - for _, r := range api.alertmanagerConfig.Receivers { - receivers = append(receivers, &open_api_models.Receiver{Name: &r.Name}) + for i := range api.alertmanagerConfig.Receivers { + receivers = append(receivers, &open_api_models.Receiver{Name: &api.alertmanagerConfig.Receivers[i].Name}) } return receiver_ops.NewGetReceiversOK().WithPayload(receivers) diff --git a/api/v2/api_test.go b/api/v2/api_test.go index 8e3599eeb..1bc4dd807 100644 --- a/api/v2/api_test.go +++ b/api/v2/api_test.go @@ -30,6 +30,7 @@ import ( open_api_models "github.com/prometheus/alertmanager/api/v2/models" general_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/general" + receiver_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver" silence_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" @@ -468,3 +469,44 @@ func TestMatchFilterLabels(t *testing.T) { require.Equal(t, tc.expected, matchFilterLabels(ms, sms)) } } + +func TestGetReceiversHandler(t *testing.T) { + in := ` +route: + receiver: team-X + +receivers: +- name: 'team-X' +- name: 'team-Y' +` + cfg, _ := config.Load(in) + api := API{ + uptime: time.Now(), + logger: log.NewNopLogger(), + alertmanagerConfig: cfg, + } + + for _, tc := range []struct { + body string + expectedCode int + }{ + { + `[{"name":"team-X"},{"name":"team-Y"}]`, + 200, + }, + } { + r, err := http.NewRequest("GET", "/api/v2/receivers", nil) + require.NoError(t, err) + + w := httptest.NewRecorder() + p := runtime.TextProducer() + responder := api.getReceiversHandler(receiver_ops.GetReceiversParams{ + HTTPRequest: r, + }) + responder.WriteResponse(w, p) + body, _ := io.ReadAll(w.Result().Body) + + require.Equal(t, tc.expectedCode, w.Code) + require.Equal(t, tc.body, string(body)) + } +}