mirror of https://github.com/grafana/grafana
Alerting: Split Scheduler and AlertRouter tests (#52416)
* move fake FakeExternalAlertmanager to sender package * move tests from scheduler to router * update alerts router to have all fields private * update scheduler tests to use sender mockpull/52069/head
parent
c60487fdbf
commit
054fe54b03
@ -0,0 +1,362 @@ |
||||
package sender |
||||
|
||||
import ( |
||||
"context" |
||||
"fmt" |
||||
"math/rand" |
||||
"net/url" |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/benbjohnson/clock" |
||||
"github.com/go-openapi/strfmt" |
||||
models2 "github.com/prometheus/alertmanager/api/v2/models" |
||||
"github.com/prometheus/client_golang/prometheus" |
||||
"github.com/stretchr/testify/require" |
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/metrics" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/models" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/notifier" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/provisioning" |
||||
"github.com/grafana/grafana/pkg/services/ngalert/store" |
||||
"github.com/grafana/grafana/pkg/services/secrets/fakes" |
||||
secretsManager "github.com/grafana/grafana/pkg/services/secrets/manager" |
||||
"github.com/grafana/grafana/pkg/setting" |
||||
"github.com/grafana/grafana/pkg/util" |
||||
) |
||||
|
||||
func TestSendingToExternalAlertmanager(t *testing.T) { |
||||
ruleKey := models.GenerateRuleKey(1) |
||||
|
||||
fakeAM := NewFakeExternalAlertmanager(t) |
||||
defer fakeAM.Close() |
||||
|
||||
fakeAdminConfigStore := &store.AdminConfigurationStoreMock{} |
||||
mockedGetAdminConfigurations := fakeAdminConfigStore.EXPECT().GetAdminConfigurations() |
||||
|
||||
mockedClock := clock.NewMock() |
||||
|
||||
moa := createMultiOrgAlertmanager(t, []int64{1}) |
||||
|
||||
appUrl := &url.URL{ |
||||
Scheme: "http", |
||||
Host: "localhost", |
||||
} |
||||
|
||||
alertsRouter := NewAlertsRouter(moa, fakeAdminConfigStore, mockedClock, appUrl, map[int64]struct{}{}, 10*time.Minute) |
||||
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.AllAlertmanagers}, |
||||
}, nil) |
||||
// Make sure we sync the configuration at least once before the evaluation happens to guarantee the sender is running
|
||||
// when the first alert triggers.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 1, len(alertsRouter.senders)) |
||||
require.Equal(t, 1, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
// Then, ensure we've discovered the Alertmanager.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey.OrgID, 1, 0) |
||||
|
||||
var expected []*models2.PostableAlert |
||||
alerts := definitions.PostableAlerts{} |
||||
for i := 0; i < rand.Intn(5)+1; i++ { |
||||
alert := generatePostableAlert(t, mockedClock) |
||||
expected = append(expected, &alert) |
||||
alerts.PostableAlerts = append(alerts.PostableAlerts, alert) |
||||
} |
||||
|
||||
alertsRouter.Send(ruleKey, alerts) |
||||
|
||||
// Eventually, our Alertmanager should have received at least one alert.
|
||||
assertAlertsDelivered(t, fakeAM, expected) |
||||
|
||||
// Now, let's remove the Alertmanager from the admin configuration.
|
||||
mockedGetAdminConfigurations.Return(nil, nil) |
||||
// Again, make sure we sync and verify the senders.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 0, len(alertsRouter.senders)) |
||||
require.Equal(t, 0, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
// Then, ensure we've dropped the Alertmanager.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey.OrgID, 0, 0) |
||||
} |
||||
|
||||
func TestSendingToExternalAlertmanager_WithMultipleOrgs(t *testing.T) { |
||||
ruleKey1 := models.GenerateRuleKey(1) |
||||
ruleKey2 := models.GenerateRuleKey(2) |
||||
|
||||
fakeAM := NewFakeExternalAlertmanager(t) |
||||
defer fakeAM.Close() |
||||
|
||||
fakeAdminConfigStore := &store.AdminConfigurationStoreMock{} |
||||
mockedGetAdminConfigurations := fakeAdminConfigStore.EXPECT().GetAdminConfigurations() |
||||
|
||||
mockedClock := clock.NewMock() |
||||
|
||||
moa := createMultiOrgAlertmanager(t, []int64{1, 2}) |
||||
|
||||
appUrl := &url.URL{ |
||||
Scheme: "http", |
||||
Host: "localhost", |
||||
} |
||||
|
||||
alertsRouter := NewAlertsRouter(moa, fakeAdminConfigStore, mockedClock, appUrl, map[int64]struct{}{}, 10*time.Minute) |
||||
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey1.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.AllAlertmanagers}, |
||||
}, nil) |
||||
|
||||
// Make sure we sync the configuration at least once before the evaluation happens to guarantee the sender is running
|
||||
// when the first alert triggers.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 1, len(alertsRouter.senders)) |
||||
require.Equal(t, 1, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
// Then, ensure we've discovered the Alertmanager.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey1.OrgID, 1, 0) |
||||
|
||||
// 1. Now, let's assume a new org comes along.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey1.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.AllAlertmanagers}, |
||||
{OrgID: ruleKey2.OrgID, Alertmanagers: []string{fakeAM.Server.URL}}, |
||||
}, nil) |
||||
|
||||
// If we sync again, new senders must have spawned.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 2, len(alertsRouter.senders)) |
||||
require.Equal(t, 2, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
// Then, ensure we've discovered the Alertmanager for the new organization.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey1.OrgID, 1, 0) |
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey2.OrgID, 1, 0) |
||||
|
||||
var expected []*models2.PostableAlert |
||||
alerts1 := definitions.PostableAlerts{} |
||||
for i := 0; i < rand.Intn(5)+1; i++ { |
||||
alert := generatePostableAlert(t, mockedClock) |
||||
expected = append(expected, &alert) |
||||
alerts1.PostableAlerts = append(alerts1.PostableAlerts, alert) |
||||
} |
||||
alerts2 := definitions.PostableAlerts{} |
||||
for i := 0; i < rand.Intn(5)+1; i++ { |
||||
alert := generatePostableAlert(t, mockedClock) |
||||
expected = append(expected, &alert) |
||||
alerts2.PostableAlerts = append(alerts2.PostableAlerts, alert) |
||||
} |
||||
|
||||
alertsRouter.Send(ruleKey1, alerts1) |
||||
alertsRouter.Send(ruleKey2, alerts2) |
||||
|
||||
assertAlertsDelivered(t, fakeAM, expected) |
||||
|
||||
// 2. Next, let's modify the configuration of an organization by adding an extra alertmanager.
|
||||
fakeAM2 := NewFakeExternalAlertmanager(t) |
||||
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey1.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.AllAlertmanagers}, |
||||
{OrgID: ruleKey2.OrgID, Alertmanagers: []string{fakeAM.Server.URL, fakeAM2.Server.URL}}, |
||||
}, nil) |
||||
|
||||
// Before we sync, let's grab the existing hash of this particular org.
|
||||
currentHash := alertsRouter.sendersCfgHash[ruleKey2.OrgID] |
||||
|
||||
// Now, sync again.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
|
||||
// The hash for org two should not be the same and we should still have two senders.
|
||||
require.NotEqual(t, alertsRouter.sendersCfgHash[ruleKey2.OrgID], currentHash) |
||||
require.Equal(t, 2, len(alertsRouter.senders)) |
||||
require.Equal(t, 2, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey2.OrgID, 2, 0) |
||||
|
||||
// 3. Now, let's provide a configuration that fails for OrgID = 1.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey1.OrgID, Alertmanagers: []string{"123://invalid.org"}, SendAlertsTo: models.AllAlertmanagers}, |
||||
{OrgID: ruleKey2.OrgID, Alertmanagers: []string{fakeAM.Server.URL, fakeAM2.Server.URL}}, |
||||
}, nil) |
||||
|
||||
// Before we sync, let's get the current config hash.
|
||||
currentHash = alertsRouter.sendersCfgHash[ruleKey1.OrgID] |
||||
|
||||
// Now, sync again.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
|
||||
// The old configuration should still be running.
|
||||
require.Equal(t, alertsRouter.sendersCfgHash[ruleKey1.OrgID], currentHash) |
||||
require.Equal(t, 1, len(alertsRouter.AlertmanagersFor(ruleKey1.OrgID))) |
||||
|
||||
// If we fix it - it should be applied.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey1.OrgID, Alertmanagers: []string{"notarealalertmanager:3030"}, SendAlertsTo: models.AllAlertmanagers}, |
||||
{OrgID: ruleKey2.OrgID, Alertmanagers: []string{fakeAM.Server.URL, fakeAM2.Server.URL}}, |
||||
}, nil) |
||||
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.NotEqual(t, alertsRouter.sendersCfgHash[ruleKey1.OrgID], currentHash) |
||||
|
||||
// Finally, remove everything.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{}, nil) |
||||
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
|
||||
require.Equal(t, 0, len(alertsRouter.senders)) |
||||
require.Equal(t, 0, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey1.OrgID, 0, 0) |
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey2.OrgID, 0, 0) |
||||
} |
||||
|
||||
func TestChangingAlertmanagersChoice(t *testing.T) { |
||||
ruleKey := models.GenerateRuleKey(1) |
||||
|
||||
fakeAM := NewFakeExternalAlertmanager(t) |
||||
defer fakeAM.Close() |
||||
|
||||
fakeAdminConfigStore := &store.AdminConfigurationStoreMock{} |
||||
mockedGetAdminConfigurations := fakeAdminConfigStore.EXPECT().GetAdminConfigurations() |
||||
|
||||
mockedClock := clock.NewMock() |
||||
mockedClock.Set(time.Now()) |
||||
|
||||
moa := createMultiOrgAlertmanager(t, []int64{1}) |
||||
|
||||
appUrl := &url.URL{ |
||||
Scheme: "http", |
||||
Host: "localhost", |
||||
} |
||||
|
||||
alertsRouter := NewAlertsRouter(moa, fakeAdminConfigStore, mockedClock, appUrl, map[int64]struct{}{}, 10*time.Minute) |
||||
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.AllAlertmanagers}, |
||||
}, nil) |
||||
// Make sure we sync the configuration at least once before the evaluation happens to guarantee the sender is running
|
||||
// when the first alert triggers.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 1, len(alertsRouter.senders)) |
||||
require.Equal(t, 1, len(alertsRouter.sendersCfgHash)) |
||||
require.Equal(t, models.AllAlertmanagers, alertsRouter.sendAlertsTo[ruleKey.OrgID]) |
||||
|
||||
// Then, ensure we've discovered the Alertmanager.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey.OrgID, 1, 0) |
||||
|
||||
var expected []*models2.PostableAlert |
||||
alerts := definitions.PostableAlerts{} |
||||
for i := 0; i < rand.Intn(5)+1; i++ { |
||||
alert := generatePostableAlert(t, mockedClock) |
||||
expected = append(expected, &alert) |
||||
alerts.PostableAlerts = append(alerts.PostableAlerts, alert) |
||||
} |
||||
alertsRouter.Send(ruleKey, alerts) |
||||
|
||||
// Eventually, our Alertmanager should have received at least one alert.
|
||||
assertAlertsDelivered(t, fakeAM, expected) |
||||
|
||||
// Now, let's change the Alertmanagers choice to send only to the external Alertmanager.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.ExternalAlertmanagers}, |
||||
}, nil) |
||||
// Again, make sure we sync and verify the senders.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 1, len(alertsRouter.senders)) |
||||
require.Equal(t, 1, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey.OrgID, 1, 0) |
||||
require.Equal(t, models.ExternalAlertmanagers, alertsRouter.sendAlertsTo[ruleKey.OrgID]) |
||||
|
||||
// Finally, let's change the Alertmanagers choice to send only to the internal Alertmanager.
|
||||
mockedGetAdminConfigurations.Return([]*models.AdminConfiguration{ |
||||
{OrgID: ruleKey.OrgID, Alertmanagers: []string{fakeAM.Server.URL}, SendAlertsTo: models.InternalAlertmanager}, |
||||
}, nil) |
||||
|
||||
// Again, make sure we sync and verify the senders.
|
||||
// senders should be running even though alerts are being handled externally.
|
||||
require.NoError(t, alertsRouter.SyncAndApplyConfigFromDatabase()) |
||||
require.Equal(t, 1, len(alertsRouter.senders)) |
||||
require.Equal(t, 1, len(alertsRouter.sendersCfgHash)) |
||||
|
||||
// Then, ensure the Alertmanager is still listed and the Alertmanagers choice has changed.
|
||||
assertAlertmanagersStatusForOrg(t, alertsRouter, ruleKey.OrgID, 1, 0) |
||||
require.Equal(t, models.InternalAlertmanager, alertsRouter.sendAlertsTo[ruleKey.OrgID]) |
||||
|
||||
alertsRouter.Send(ruleKey, alerts) |
||||
|
||||
am, err := moa.AlertmanagerFor(ruleKey.OrgID) |
||||
require.NoError(t, err) |
||||
actualAlerts, err := am.GetAlerts(true, true, true, nil, "") |
||||
require.NoError(t, err) |
||||
require.Len(t, actualAlerts, len(expected)) |
||||
} |
||||
|
||||
func assertAlertmanagersStatusForOrg(t *testing.T, alertsRouter *AlertsRouter, orgID int64, active, dropped int) { |
||||
t.Helper() |
||||
require.Eventuallyf(t, func() bool { |
||||
return len(alertsRouter.AlertmanagersFor(orgID)) == active && len(alertsRouter.DroppedAlertmanagersFor(orgID)) == dropped |
||||
}, 10*time.Second, 200*time.Millisecond, |
||||
fmt.Sprintf("expected %d active Alertmanagers and %d dropped ones but got %d active and %d dropped", active, dropped, len(alertsRouter.AlertmanagersFor(orgID)), len(alertsRouter.DroppedAlertmanagersFor(orgID)))) |
||||
} |
||||
|
||||
func assertAlertsDelivered(t *testing.T, fakeAM *FakeExternalAlertmanager, expectedAlerts []*models2.PostableAlert) { |
||||
t.Helper() |
||||
require.Eventuallyf(t, func() bool { |
||||
return fakeAM.AlertsCount() == len(expectedAlerts) |
||||
}, 10*time.Second, 200*time.Millisecond, fmt.Sprintf("expected %d alerts to be delivered to remote Alertmanager but only %d was delivered", len(expectedAlerts), fakeAM.AlertsCount())) |
||||
require.Len(t, fakeAM.Alerts(), len(expectedAlerts)) |
||||
} |
||||
|
||||
func generatePostableAlert(t *testing.T, clk clock.Clock) models2.PostableAlert { |
||||
t.Helper() |
||||
u := url.URL{ |
||||
Scheme: "http", |
||||
Host: "localhost", |
||||
RawPath: "/" + util.GenerateShortUID(), |
||||
} |
||||
return models2.PostableAlert{ |
||||
Annotations: models2.LabelSet(models.GenerateAlertLabels(5, "ann-")), |
||||
EndsAt: strfmt.DateTime(clk.Now().Add(1 * time.Minute)), |
||||
StartsAt: strfmt.DateTime(clk.Now()), |
||||
Alert: models2.Alert{ |
||||
GeneratorURL: strfmt.URI(u.String()), |
||||
Labels: models2.LabelSet(models.GenerateAlertLabels(5, "lbl-")), |
||||
}, |
||||
} |
||||
} |
||||
|
||||
func createMultiOrgAlertmanager(t *testing.T, orgs []int64) *notifier.MultiOrgAlertmanager { |
||||
t.Helper() |
||||
|
||||
tmpDir := t.TempDir() |
||||
orgStore := notifier.NewFakeOrgStore(t, orgs) |
||||
|
||||
cfg := &setting.Cfg{ |
||||
DataPath: tmpDir, |
||||
UnifiedAlerting: setting.UnifiedAlertingSettings{ |
||||
AlertmanagerConfigPollInterval: 3 * time.Minute, |
||||
DefaultConfiguration: setting.GetAlertmanagerDefaultConfiguration(), |
||||
DisabledOrgs: map[int64]struct{}{}, |
||||
}, // do not poll in tests.
|
||||
} |
||||
|
||||
cfgStore := notifier.NewFakeConfigStore(t, make(map[int64]*models.AlertConfiguration)) |
||||
kvStore := notifier.NewFakeKVStore(t) |
||||
registry := prometheus.NewPedanticRegistry() |
||||
m := metrics.NewNGAlert(registry) |
||||
secretsService := secretsManager.SetupTestService(t, fakes.NewFakeSecretsStore()) |
||||
decryptFn := secretsService.GetDecryptedValue |
||||
moa, err := notifier.NewMultiOrgAlertmanager(cfg, &cfgStore, &orgStore, kvStore, provisioning.NewFakeProvisioningStore(), decryptFn, m.GetMultiOrgAlertmanagerMetrics(), nil, log.New("testlogger"), secretsService) |
||||
require.NoError(t, err) |
||||
require.NoError(t, moa.LoadAndSyncAlertmanagersForOrgs(context.Background())) |
||||
require.Eventually(t, func() bool { |
||||
for _, org := range orgs { |
||||
_, err := moa.AlertmanagerFor(org) |
||||
if err != nil { |
||||
return false |
||||
} |
||||
} |
||||
return true |
||||
}, 10*time.Second, 100*time.Millisecond) |
||||
return moa |
||||
} |
||||
@ -0,0 +1,88 @@ |
||||
package sender |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"io/ioutil" |
||||
"net/http" |
||||
"net/http/httptest" |
||||
"sync" |
||||
"testing" |
||||
|
||||
amv2 "github.com/prometheus/alertmanager/api/v2/models" |
||||
"github.com/prometheus/common/model" |
||||
"github.com/stretchr/testify/assert" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
type FakeExternalAlertmanager struct { |
||||
t *testing.T |
||||
mtx sync.Mutex |
||||
alerts amv2.PostableAlerts |
||||
Server *httptest.Server |
||||
} |
||||
|
||||
func NewFakeExternalAlertmanager(t *testing.T) *FakeExternalAlertmanager { |
||||
t.Helper() |
||||
|
||||
am := &FakeExternalAlertmanager{ |
||||
t: t, |
||||
alerts: amv2.PostableAlerts{}, |
||||
} |
||||
am.Server = httptest.NewServer(http.HandlerFunc(am.Handler())) |
||||
|
||||
return am |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) URL() string { |
||||
return am.Server.URL |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) AlertNamesCompare(expected []string) bool { |
||||
n := []string{} |
||||
alerts := am.Alerts() |
||||
|
||||
if len(expected) != len(alerts) { |
||||
return false |
||||
} |
||||
|
||||
for _, a := range am.Alerts() { |
||||
for k, v := range a.Alert.Labels { |
||||
if k == model.AlertNameLabel { |
||||
n = append(n, v) |
||||
} |
||||
} |
||||
} |
||||
|
||||
return assert.ObjectsAreEqual(expected, n) |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) AlertsCount() int { |
||||
am.mtx.Lock() |
||||
defer am.mtx.Unlock() |
||||
|
||||
return len(am.alerts) |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) Alerts() amv2.PostableAlerts { |
||||
am.mtx.Lock() |
||||
defer am.mtx.Unlock() |
||||
return am.alerts |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) Handler() func(w http.ResponseWriter, r *http.Request) { |
||||
return func(w http.ResponseWriter, r *http.Request) { |
||||
b, err := ioutil.ReadAll(r.Body) |
||||
require.NoError(am.t, err) |
||||
|
||||
a := amv2.PostableAlerts{} |
||||
require.NoError(am.t, json.Unmarshal(b, &a)) |
||||
|
||||
am.mtx.Lock() |
||||
am.alerts = append(am.alerts, a...) |
||||
am.mtx.Unlock() |
||||
} |
||||
} |
||||
|
||||
func (am *FakeExternalAlertmanager) Close() { |
||||
am.Server.Close() |
||||
} |
||||
@ -0,0 +1,186 @@ |
||||
// Code generated by mockery v2.10.0. DO NOT EDIT.
|
||||
|
||||
package store |
||||
|
||||
import ( |
||||
models "github.com/grafana/grafana/pkg/services/ngalert/models" |
||||
mock "github.com/stretchr/testify/mock" |
||||
) |
||||
|
||||
// AdminConfigurationStoreMock is an autogenerated mock type for the AdminConfigurationStore type
|
||||
type AdminConfigurationStoreMock struct { |
||||
mock.Mock |
||||
} |
||||
|
||||
type AdminConfigurationStoreMock_Expecter struct { |
||||
mock *mock.Mock |
||||
} |
||||
|
||||
func (_m *AdminConfigurationStoreMock) EXPECT() *AdminConfigurationStoreMock_Expecter { |
||||
return &AdminConfigurationStoreMock_Expecter{mock: &_m.Mock} |
||||
} |
||||
|
||||
// DeleteAdminConfiguration provides a mock function with given fields: orgID
|
||||
func (_m *AdminConfigurationStoreMock) DeleteAdminConfiguration(orgID int64) error { |
||||
ret := _m.Called(orgID) |
||||
|
||||
var r0 error |
||||
if rf, ok := ret.Get(0).(func(int64) error); ok { |
||||
r0 = rf(orgID) |
||||
} else { |
||||
r0 = ret.Error(0) |
||||
} |
||||
|
||||
return r0 |
||||
} |
||||
|
||||
// AdminConfigurationStoreMock_DeleteAdminConfiguration_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteAdminConfiguration'
|
||||
type AdminConfigurationStoreMock_DeleteAdminConfiguration_Call struct { |
||||
*mock.Call |
||||
} |
||||
|
||||
// DeleteAdminConfiguration is a helper method to define mock.On call
|
||||
// - orgID int64
|
||||
func (_e *AdminConfigurationStoreMock_Expecter) DeleteAdminConfiguration(orgID interface{}) *AdminConfigurationStoreMock_DeleteAdminConfiguration_Call { |
||||
return &AdminConfigurationStoreMock_DeleteAdminConfiguration_Call{Call: _e.mock.On("DeleteAdminConfiguration", orgID)} |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_DeleteAdminConfiguration_Call) Run(run func(orgID int64)) *AdminConfigurationStoreMock_DeleteAdminConfiguration_Call { |
||||
_c.Call.Run(func(args mock.Arguments) { |
||||
run(args[0].(int64)) |
||||
}) |
||||
return _c |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_DeleteAdminConfiguration_Call) Return(_a0 error) *AdminConfigurationStoreMock_DeleteAdminConfiguration_Call { |
||||
_c.Call.Return(_a0) |
||||
return _c |
||||
} |
||||
|
||||
// GetAdminConfiguration provides a mock function with given fields: orgID
|
||||
func (_m *AdminConfigurationStoreMock) GetAdminConfiguration(orgID int64) (*models.AdminConfiguration, error) { |
||||
ret := _m.Called(orgID) |
||||
|
||||
var r0 *models.AdminConfiguration |
||||
if rf, ok := ret.Get(0).(func(int64) *models.AdminConfiguration); ok { |
||||
r0 = rf(orgID) |
||||
} else { |
||||
if ret.Get(0) != nil { |
||||
r0 = ret.Get(0).(*models.AdminConfiguration) |
||||
} |
||||
} |
||||
|
||||
var r1 error |
||||
if rf, ok := ret.Get(1).(func(int64) error); ok { |
||||
r1 = rf(orgID) |
||||
} else { |
||||
r1 = ret.Error(1) |
||||
} |
||||
|
||||
return r0, r1 |
||||
} |
||||
|
||||
// AdminConfigurationStoreMock_GetAdminConfiguration_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAdminConfiguration'
|
||||
type AdminConfigurationStoreMock_GetAdminConfiguration_Call struct { |
||||
*mock.Call |
||||
} |
||||
|
||||
// GetAdminConfiguration is a helper method to define mock.On call
|
||||
// - orgID int64
|
||||
func (_e *AdminConfigurationStoreMock_Expecter) GetAdminConfiguration(orgID interface{}) *AdminConfigurationStoreMock_GetAdminConfiguration_Call { |
||||
return &AdminConfigurationStoreMock_GetAdminConfiguration_Call{Call: _e.mock.On("GetAdminConfiguration", orgID)} |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_GetAdminConfiguration_Call) Run(run func(orgID int64)) *AdminConfigurationStoreMock_GetAdminConfiguration_Call { |
||||
_c.Call.Run(func(args mock.Arguments) { |
||||
run(args[0].(int64)) |
||||
}) |
||||
return _c |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_GetAdminConfiguration_Call) Return(_a0 *models.AdminConfiguration, _a1 error) *AdminConfigurationStoreMock_GetAdminConfiguration_Call { |
||||
_c.Call.Return(_a0, _a1) |
||||
return _c |
||||
} |
||||
|
||||
// GetAdminConfigurations provides a mock function with given fields:
|
||||
func (_m *AdminConfigurationStoreMock) GetAdminConfigurations() ([]*models.AdminConfiguration, error) { |
||||
ret := _m.Called() |
||||
|
||||
var r0 []*models.AdminConfiguration |
||||
if rf, ok := ret.Get(0).(func() []*models.AdminConfiguration); ok { |
||||
r0 = rf() |
||||
} else { |
||||
if ret.Get(0) != nil { |
||||
r0 = ret.Get(0).([]*models.AdminConfiguration) |
||||
} |
||||
} |
||||
|
||||
var r1 error |
||||
if rf, ok := ret.Get(1).(func() error); ok { |
||||
r1 = rf() |
||||
} else { |
||||
r1 = ret.Error(1) |
||||
} |
||||
|
||||
return r0, r1 |
||||
} |
||||
|
||||
// AdminConfigurationStoreMock_GetAdminConfigurations_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAdminConfigurations'
|
||||
type AdminConfigurationStoreMock_GetAdminConfigurations_Call struct { |
||||
*mock.Call |
||||
} |
||||
|
||||
// GetAdminConfigurations is a helper method to define mock.On call
|
||||
func (_e *AdminConfigurationStoreMock_Expecter) GetAdminConfigurations() *AdminConfigurationStoreMock_GetAdminConfigurations_Call { |
||||
return &AdminConfigurationStoreMock_GetAdminConfigurations_Call{Call: _e.mock.On("GetAdminConfigurations")} |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_GetAdminConfigurations_Call) Run(run func()) *AdminConfigurationStoreMock_GetAdminConfigurations_Call { |
||||
_c.Call.Run(func(args mock.Arguments) { |
||||
run() |
||||
}) |
||||
return _c |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_GetAdminConfigurations_Call) Return(_a0 []*models.AdminConfiguration, _a1 error) *AdminConfigurationStoreMock_GetAdminConfigurations_Call { |
||||
_c.Call.Return(_a0, _a1) |
||||
return _c |
||||
} |
||||
|
||||
// UpdateAdminConfiguration provides a mock function with given fields: _a0
|
||||
func (_m *AdminConfigurationStoreMock) UpdateAdminConfiguration(_a0 UpdateAdminConfigurationCmd) error { |
||||
ret := _m.Called(_a0) |
||||
|
||||
var r0 error |
||||
if rf, ok := ret.Get(0).(func(UpdateAdminConfigurationCmd) error); ok { |
||||
r0 = rf(_a0) |
||||
} else { |
||||
r0 = ret.Error(0) |
||||
} |
||||
|
||||
return r0 |
||||
} |
||||
|
||||
// AdminConfigurationStoreMock_UpdateAdminConfiguration_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateAdminConfiguration'
|
||||
type AdminConfigurationStoreMock_UpdateAdminConfiguration_Call struct { |
||||
*mock.Call |
||||
} |
||||
|
||||
// UpdateAdminConfiguration is a helper method to define mock.On call
|
||||
// - _a0 UpdateAdminConfigurationCmd
|
||||
func (_e *AdminConfigurationStoreMock_Expecter) UpdateAdminConfiguration(_a0 interface{}) *AdminConfigurationStoreMock_UpdateAdminConfiguration_Call { |
||||
return &AdminConfigurationStoreMock_UpdateAdminConfiguration_Call{Call: _e.mock.On("UpdateAdminConfiguration", _a0)} |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_UpdateAdminConfiguration_Call) Run(run func(_a0 UpdateAdminConfigurationCmd)) *AdminConfigurationStoreMock_UpdateAdminConfiguration_Call { |
||||
_c.Call.Run(func(args mock.Arguments) { |
||||
run(args[0].(UpdateAdminConfigurationCmd)) |
||||
}) |
||||
return _c |
||||
} |
||||
|
||||
func (_c *AdminConfigurationStoreMock_UpdateAdminConfiguration_Call) Return(_a0 error) *AdminConfigurationStoreMock_UpdateAdminConfiguration_Call { |
||||
_c.Call.Return(_a0) |
||||
return _c |
||||
} |
||||
Loading…
Reference in new issue