From 8b751eb216f414fcecf01a4c909ab78372c9bc1c Mon Sep 17 00:00:00 2001 From: Santiago Date: Thu, 9 Nov 2023 12:35:24 +0100 Subject: [PATCH] Alerting: Add TestTemplate method to the forked Alertmanager (#77577) * Alerting: Add an empty Forked Alertmanager * Alerting: Add methods for silences to the forked Alertmanager * check for errors in tests * make linter happy * Alerting: Add methods for alerts to the forked Alertmanager * Alerting: Add methods for receivers to the forked Alertmanager * Alerting: Add TestTemplate method to the forked Alertmanager * make linter happy * separate into both forked AMs * fix tests --- .../remote/forked_alertmanager_test.go | 28 +++++++++++++++++++ .../remote_primary_forked_alertmanager.go | 2 +- .../remote_secondary_forked_alertmanager.go | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/services/ngalert/remote/forked_alertmanager_test.go b/pkg/services/ngalert/remote/forked_alertmanager_test.go index 705725c3041..be1ba54dbb3 100644 --- a/pkg/services/ngalert/remote/forked_alertmanager_test.go +++ b/pkg/services/ngalert/remote/forked_alertmanager_test.go @@ -193,6 +193,20 @@ func TestForkedAlertmanager_ModeRemoteSecondary(t *testing.T) { _, err = forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) require.ErrorIs(tt, expErr, err) }) + + t.Run("TestTemplate", func(tt *testing.T) { + // TestTemplate should be called only in the internal Alertmanager. + internal, _, forked := genTestAlertmanagers(tt, modeRemoteSecondary) + internal.EXPECT().TestTemplate(mock.Anything, mock.Anything).Return(nil, nil).Once() + _, err := forked.TestTemplate(ctx, apimodels.TestTemplatesConfigBodyParams{}) + require.NoError(tt, err) + + // If there's an error in the internal Alertmanager, it should be returned. + internal, _, forked = genTestAlertmanagers(tt, modeRemoteSecondary) + internal.EXPECT().TestTemplate(mock.Anything, mock.Anything).Return(nil, expErr).Once() + _, err = forked.TestTemplate(ctx, apimodels.TestTemplatesConfigBodyParams{}) + require.ErrorIs(tt, expErr, err) + }) } func TestForkedAlertmanager_ModeRemotePrimary(t *testing.T) { @@ -368,6 +382,20 @@ func TestForkedAlertmanager_ModeRemotePrimary(t *testing.T) { _, err = forked.TestReceivers(ctx, apimodels.TestReceiversConfigBodyParams{}) require.ErrorIs(tt, expErr, err) }) + + t.Run("TestTemplate", func(tt *testing.T) { + // TestTemplate should be called only in the remote Alertmanager. + _, remote, forked := genTestAlertmanagers(tt, modeRemotePrimary) + remote.EXPECT().TestTemplate(mock.Anything, mock.Anything).Return(nil, nil).Once() + _, err := forked.TestTemplate(ctx, apimodels.TestTemplatesConfigBodyParams{}) + require.NoError(tt, err) + + // If there's an error in the remote Alertmanager, it should be returned. + _, remote, forked = genTestAlertmanagers(tt, modeRemotePrimary) + remote.EXPECT().TestTemplate(mock.Anything, mock.Anything).Return(nil, expErr).Once() + _, err = forked.TestTemplate(ctx, apimodels.TestTemplatesConfigBodyParams{}) + 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 12cefb07577..9b7b21a33f0 100644 --- a/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go +++ b/pkg/services/ngalert/remote/remote_primary_forked_alertmanager.go @@ -73,7 +73,7 @@ func (fam *RemotePrimaryForkedAlertmanager) TestReceivers(ctx context.Context, c } func (fam *RemotePrimaryForkedAlertmanager) TestTemplate(ctx context.Context, c apimodels.TestTemplatesConfigBodyParams) (*notifier.TestTemplatesResults, error) { - return ¬ifier.TestTemplatesResults{}, nil + return fam.remote.TestTemplate(ctx, c) } func (fam *RemotePrimaryForkedAlertmanager) CleanUp() {} diff --git a/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go b/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go index b48d385adba..ab471f1e828 100644 --- a/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go +++ b/pkg/services/ngalert/remote/remote_secondary_forked_alertmanager.go @@ -73,7 +73,7 @@ func (fam *RemoteSecondaryForkedAlertmanager) TestReceivers(ctx context.Context, } func (fam *RemoteSecondaryForkedAlertmanager) TestTemplate(ctx context.Context, c apimodels.TestTemplatesConfigBodyParams) (*notifier.TestTemplatesResults, error) { - return ¬ifier.TestTemplatesResults{}, nil + return fam.internal.TestTemplate(ctx, c) } func (fam *RemoteSecondaryForkedAlertmanager) CleanUp() {}