Chore: Remove bus from ngalert (#44465)

* pass notification service down to the notifiers

* add ns to all notifiers

* remove bus from ngalert notifiers

* use smaller interfaces for notificationservice

* attempt to fix the tests

* remove unused struct field

* simplify notification service mock

* trying to resolve issues in the tests

* make linter happy

* make linter even happier

* linter, you are annoying
This commit is contained in:
Serge Zaitsev
2022-01-26 16:42:40 +01:00
committed by GitHub
parent ad4a9a48d2
commit 84a5910e56
48 changed files with 374 additions and 374 deletions
@@ -41,10 +41,10 @@ func TestTestReceivers(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
@@ -74,21 +74,17 @@ func TestTestReceivers(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandler{}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
// nolint
@@ -162,21 +158,17 @@ func TestTestReceivers(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandler{}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
// nolint
@@ -245,23 +237,19 @@ func TestTestReceivers(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandlerWithTimeout{
timeout: 5 * time.Second,
}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
req, err := http.NewRequest(http.MethodPost, testReceiversURL, strings.NewReader(`{
@@ -338,23 +326,19 @@ func TestTestReceivers(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandlerWithTimeout{
timeout: 5 * time.Second,
}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
req, err := http.NewRequest(http.MethodPost, testReceiversURL, strings.NewReader(`{
@@ -457,21 +441,17 @@ func TestTestReceiversAlertCustomization(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandler{}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
// nolint
@@ -556,21 +536,17 @@ func TestTestReceiversAlertCustomization(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandler{}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
// nolint
@@ -650,21 +626,17 @@ func TestTestReceiversAlertCustomization(t *testing.T) {
EnableUnifiedAlerting: true,
})
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
store.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
createUser(t, store, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Login: "grafana",
Password: "password",
})
oldEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
mockEmails := &mockEmailHandler{}
bus.AddHandler("", mockEmails.sendEmailCommandHandlerSync)
t.Cleanup(func() {
bus.AddHandler("", oldEmailBus)
})
env.NotificationService.EmailHandler = mockEmails.sendEmailCommandHandlerSync
testReceiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers/test", grafanaListedAddr)
// nolint
@@ -745,8 +717,8 @@ func TestNotificationChannels(t *testing.T) {
DisableAnonymous: true,
})
grafanaListedAddr, s := testinfra.StartGrafana(t, dir, path)
s.Bus = bus.GetBus()
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
env.SQLStore.Bus = bus.GetBus()
mockChannel := newMockNotificationChannel(t, grafanaListedAddr)
amConfig := getAlertmanagerConfig(mockChannel.server.Addr)
@@ -757,13 +729,11 @@ func TestNotificationChannels(t *testing.T) {
channels.TelegramAPIURL, channels.PushoverEndpoint, channels.GetBoundary,
channels.LineNotifyURL, channels.ThreemaGwBaseURL
originalTemplate := channels.DefaultTemplateString
originalEmailBus := bus.GetHandlerCtx("SendEmailCommandSync")
t.Cleanup(func() {
channels.SlackAPIEndpoint, channels.PagerdutyEventAPIURL,
channels.TelegramAPIURL, channels.PushoverEndpoint, channels.GetBoundary,
channels.LineNotifyURL, channels.ThreemaGwBaseURL = os, opa, ot, opu, ogb, ol, oth
channels.DefaultTemplateString = originalTemplate
bus.AddHandler("", originalEmailBus)
})
channels.DefaultTemplateString = channels.TemplateForTestsString
channels.SlackAPIEndpoint = fmt.Sprintf("http://%s/slack_recvX/slack_testX", mockChannel.server.Addr)
@@ -773,10 +743,19 @@ func TestNotificationChannels(t *testing.T) {
channels.LineNotifyURL = fmt.Sprintf("http://%s/line_recv/line_test", mockChannel.server.Addr)
channels.ThreemaGwBaseURL = fmt.Sprintf("http://%s/threema_recv/threema_test", mockChannel.server.Addr)
channels.GetBoundary = func() string { return "abcd" }
bus.AddHandler("", mockEmail.sendEmailCommandHandlerSync)
env.NotificationService.EmailHandler = mockEmail.sendEmailCommandHandlerSync
// As we are using a NotificationService mock here, but he test expects real NotificationService -
// we try to issue a real POST request here
env.NotificationService.WebhookHandler = func(_ context.Context, cmd *models.SendWebhookSync) error {
if res, err := http.Post(cmd.Url, "", strings.NewReader(cmd.Body)); err == nil {
_ = res.Body.Close()
}
return nil
}
// Create a user to make authenticated requests
createUser(t, s, models.CreateUserCommand{
createUser(t, env.SQLStore, models.CreateUserCommand{
DefaultOrgRole: string(models.ROLE_EDITOR),
Password: "password",
Login: "grafana",
@@ -793,7 +772,7 @@ func TestNotificationChannels(t *testing.T) {
{
// Create the namespace we'll save our alerts to.
_, err := createFolder(t, s, 0, "default")
_, err := createFolder(t, env.SQLStore, 0, "default")
require.NoError(t, err)
// Post the alertmanager config.
+6 -1
View File
@@ -27,6 +27,11 @@ import (
// StartGrafana starts a Grafana server.
// The server address is returned.
func StartGrafana(t *testing.T, grafDir, cfgPath string) (string, *sqlstore.SQLStore) {
addr, env := StartGrafanaEnv(t, grafDir, cfgPath)
return addr, env.SQLStore
}
func StartGrafanaEnv(t *testing.T, grafDir, cfgPath string) (string, *server.TestEnv) {
t.Helper()
ctx := context.Background()
@@ -65,7 +70,7 @@ func StartGrafana(t *testing.T, grafDir, cfgPath string) (string, *sqlstore.SQLS
t.Logf("Grafana is listening on %s", addr)
return addr, env.SQLStore
return addr, env
}
// SetUpDatabase sets up the Grafana database.