From 3dc623d30bad51df6af6958c3f2c54d7497a987c Mon Sep 17 00:00:00 2001 From: machine424 Date: Thu, 26 Sep 2024 14:53:48 +0200 Subject: [PATCH] test(notifier): add reproducer Signed-off-by: machine424 Co-authored-by: tommy0 --- notifier/notifier_test.go | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/notifier/notifier_test.go b/notifier/notifier_test.go index 68dd445811..b900580498 100644 --- a/notifier/notifier_test.go +++ b/notifier/notifier_test.go @@ -38,6 +38,7 @@ import ( "github.com/prometheus/prometheus/discovery" "github.com/prometheus/prometheus/config" + _ "github.com/prometheus/prometheus/discovery/file" "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/relabel" @@ -1017,3 +1018,48 @@ func TestStop_DrainingEnabled(t *testing.T) { require.Equal(t, int64(2), alertsReceived.Load()) } + +func TestAlertmanagersNotDroppedDuringApplyConfig(t *testing.T) { + targetURL := "alertmanager:9093" + targetGroup := &targetgroup.Group{ + Targets: []model.LabelSet{ + { + "__address__": model.LabelValue(targetURL), + }, + }, + } + alertmanagerURL := fmt.Sprintf("http://%s/api/v2/alerts", targetURL) + + n := NewManager(&Options{}, nil) + cfg := &config.Config{} + s := ` +alerting: + alertmanagers: + - file_sd_configs: + - files: + - foo.json +` + // TODO: add order change test + // TODO: add entry removed with DS manager + + err := yaml.UnmarshalStrict([]byte(s), cfg) + require.NoError(t, err) + require.Len(t, cfg.AlertingConfig.AlertmanagerConfigs, 1) + + yaml.Marshal(cfg.AlertingConfig.AlertmanagerConfigs) + + // First apply config and reload. + err = n.ApplyConfig(cfg) + require.NoError(t, err) + tgs := map[string][]*targetgroup.Group{"config-0": {targetGroup}} + n.reload(tgs) + require.Len(t, n.Alertmanagers(), 1) + require.Equal(t, alertmanagerURL, n.Alertmanagers()[0].String()) + + // Reapply the config. + err = n.ApplyConfig(cfg) + require.NoError(t, err) + // The already known alertmanagers shouldn't get dropped. + require.Len(t, n.Alertmanagers(), 1) + require.Equal(t, alertmanagerURL, n.Alertmanagers()[0].String()) +}