diff --git a/pkg/services/ngalert/remote/forked_alertmanager_test.go b/pkg/services/ngalert/remote/forked_alertmanager_test.go index fe8b464689e..705725c3041 100644 --- a/pkg/services/ngalert/remote/forked_alertmanager_test.go +++ b/pkg/services/ngalert/remote/forked_alertmanager_test.go @@ -163,6 +163,36 @@ func TestForkedAlertmanager_ModeRemoteSecondary(t *testing.T) { internal.EXPECT().PutAlerts(mock.Anything, mock.Anything).Return(expErr).Once() require.ErrorIs(tt, expErr, forked.PutAlerts(ctx, apimodels.PostableAlerts{})) }) + + t.Run("GetReceivers", func(tt *testing.T) { + // We should retrieve the receivers from the internal Alertmanager. + internal, _, forked := genTestAlertmanagers(tt, modeRemoteSecondary) + expReceivers := []apimodels.Receiver{} + internal.EXPECT().GetReceivers(mock.Anything).Return(expReceivers, nil).Once() + receivers, err := forked.GetReceivers(ctx) + require.NoError(tt, err) + require.Equal(tt, expReceivers, receivers) + + // If there's an error in the internal Alertmanager, it should be returned. + internal, _, forked = genTestAlertmanagers(tt, modeRemoteSecondary) + internal.EXPECT().GetReceivers(mock.Anything).Return([]apimodels.Receiver{}, expErr).Once() + _, err = forked.GetReceivers(ctx) + require.ErrorIs(tt, expErr, err) + }) + + t.Run("TestReceivers", func(tt *testing.T) { + // TestReceivers should be called only in the internal Alertmanager. + internal, _, forked := genTestAlertmanagers(tt, modeRemoteSecondary) + internal.EXPECT().TestReceivers(mock.Anything, mock.Anything).Return(nil, nil).Once() + _, err := forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) + require.NoError(tt, err) + + // If there's an error in the internal Alertmanager, it should be returned. + internal, _, forked = genTestAlertmanagers(tt, modeRemoteSecondary) + internal.EXPECT().TestReceivers(mock.Anything, mock.Anything).Return(nil, expErr).Once() + _, err = forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) + require.ErrorIs(tt, expErr, err) + }) } func TestForkedAlertmanager_ModeRemotePrimary(t *testing.T) { @@ -308,6 +338,36 @@ func TestForkedAlertmanager_ModeRemotePrimary(t *testing.T) { remote.EXPECT().PutAlerts(mock.Anything, mock.Anything).Return(expErr).Once() require.ErrorIs(tt, expErr, forked.PutAlerts(ctx, apimodels.PostableAlerts{})) }) + + t.Run("GetReceivers", func(tt *testing.T) { + // We should retrieve the receivers from the remote Alertmanager. + _, remote, forked := genTestAlertmanagers(tt, modeRemotePrimary) + expReceivers := []apimodels.Receiver{} + remote.EXPECT().GetReceivers(mock.Anything).Return(expReceivers, nil).Once() + receivers, err := forked.GetReceivers(ctx) + require.NoError(tt, err) + require.Equal(tt, expReceivers, receivers) + + // If there's an error in the remote Alertmanager, it should be returned. + _, remote, forked = genTestAlertmanagers(tt, modeRemotePrimary) + remote.EXPECT().GetReceivers(mock.Anything).Return([]apimodels.Receiver{}, expErr).Once() + _, err = forked.GetReceivers(ctx) + require.ErrorIs(tt, expErr, err) + }) + + t.Run("TestReceivers", func(tt *testing.T) { + // TestReceivers should be called only in the remote Alertmanager. + _, remote, forked := genTestAlertmanagers(tt, modeRemotePrimary) + remote.EXPECT().TestReceivers(mock.Anything, mock.Anything).Return(nil, nil).Once() + _, err := forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) + require.NoError(tt, err) + + // If there's an error in the remote Alertmanager, it should be returned. + _, remote, forked = genTestAlertmanagers(tt, modeRemotePrimary) + remote.EXPECT().TestReceivers(mock.Anything, mock.Anything).Return(nil, expErr).Once() + _, err = forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) + require.ErrorIs(tt, expErr, err) + }) } func genTestAlertmanagers(t *testing.T, mode int) (*alertmanager_mock.AlertmanagerMock, *alertmanager_mock.AlertmanagerMock, notifier.Alertmanager) { t.Helper() diff --git a/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go b/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go index e023f43fab5..12cefb07577 100644 --- a/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go +++ b/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go @@ -65,11 +65,11 @@ func (fam *RemotePrimaryForkedAlertmanager) PutAlerts(ctx context.Context, alert } func (fam *RemotePrimaryForkedAlertmanager) GetReceivers(ctx context.Context) ([]apimodels.Receiver, error) { - return []apimodels.Receiver{}, nil + return fam.remote.GetReceivers(ctx) } func (fam *RemotePrimaryForkedAlertmanager) TestReceivers(ctx context.Context, c apimodels.TestReceiversConfigBodyParams) (*notifier.TestReceiversResult, error) { - return ¬ifier.TestReceiversResult{}, nil + return fam.remote.TestReceivers(ctx, c) } func (fam *RemotePrimaryForkedAlertmanager) TestTemplate(ctx context.Context, c apimodels.TestTemplatesConfigBodyParams) (*notifier.TestTemplatesResults, error) { diff --git a/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go b/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go index e134cbce201..b48d385adba 100644 --- a/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go +++ b/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go @@ -65,11 +65,11 @@ func (fam *RemoteSecondaryForkedAlertmanager) PutAlerts(ctx context.Context, ale } func (fam *RemoteSecondaryForkedAlertmanager) GetReceivers(ctx context.Context) ([]apimodels.Receiver, error) { - return []apimodels.Receiver{}, nil + return fam.internal.GetReceivers(ctx) } func (fam *RemoteSecondaryForkedAlertmanager) TestReceivers(ctx context.Context, c apimodels.TestReceiversConfigBodyParams) (*notifier.TestReceiversResult, error) { - return ¬ifier.TestReceiversResult{}, nil + return fam.internal.TestReceivers(ctx, c) } func (fam *RemoteSecondaryForkedAlertmanager) TestTemplate(ctx context.Context, c apimodels.TestTemplatesConfigBodyParams) (*notifier.TestTemplatesResults, error) {