@@ -28,6 +28,7 @@ import (
2828 "github.com/prometheus/common/model"
2929 "github.com/stretchr/testify/require"
3030
31+ "github.com/prometheus/alertmanager/alertobserver"
3132 "github.com/prometheus/alertmanager/config"
3233 "github.com/prometheus/alertmanager/dispatch"
3334 "github.com/prometheus/alertmanager/pkg/labels"
@@ -134,7 +135,7 @@ func TestAddAlerts(t *testing.T) {
134135 }
135136
136137 alertsProvider := newFakeAlerts ([]* types.Alert {}, tc .err )
137- api := New (alertsProvider , nil , newGetAlertStatus (alertsProvider ), nil , nil , nil )
138+ api := New (alertsProvider , nil , newGetAlertStatus (alertsProvider ), nil , nil , nil , nil )
138139 defaultGlobalConfig := config .DefaultGlobalConfig ()
139140 route := config.Route {}
140141 api .Update (& config.Config {
@@ -153,6 +154,74 @@ func TestAddAlerts(t *testing.T) {
153154 body , _ := io .ReadAll (res .Body )
154155
155156 require .Equal (t , tc .code , w .Code , fmt .Sprintf ("test case: %d, StartsAt %v, EndsAt %v, Response: %s" , i , tc .start , tc .end , string (body )))
157+
158+ observer := alertobserver .NewFakeLifeCycleObserver ()
159+ api .alertLCObserver = observer
160+ r , err = http .NewRequest ("POST" , "/api/v1/alerts" , bytes .NewReader (b ))
161+ w = httptest .NewRecorder ()
162+ if err != nil {
163+ t .Errorf ("Unexpected error %v" , err )
164+ }
165+ api .addAlerts (w , r )
166+ if tc .code == 200 {
167+ require .Equal (t , observer .AlertsPerEvent [alertobserver .EventAlertReceived ][0 ].Fingerprint (), alerts [0 ].Fingerprint ())
168+ } else {
169+ require .Equal (t , observer .AlertsPerEvent [alertobserver .EventAlertRejected ][0 ].Fingerprint (), alerts [0 ].Fingerprint ())
170+ }
171+ }
172+ }
173+
174+ func TestAddAlertsWithAlertLCObserver (t * testing.T ) {
175+ now := func (offset int ) time.Time {
176+ return time .Now ().Add (time .Duration (offset ) * time .Second )
177+ }
178+
179+ for i , tc := range []struct {
180+ start , end time.Time
181+ err bool
182+ code int
183+ }{
184+ {time.Time {}, time.Time {}, false , 200 },
185+ {now (1 ), now (0 ), false , 400 },
186+ {now (0 ), time.Time {}, true , 500 },
187+ } {
188+ alerts := []model.Alert {{
189+ StartsAt : tc .start ,
190+ EndsAt : tc .end ,
191+ Labels : model.LabelSet {"label1" : "test1" },
192+ Annotations : model.LabelSet {"annotation1" : "some text" },
193+ }}
194+ b , err := json .Marshal (& alerts )
195+ if err != nil {
196+ t .Errorf ("Unexpected error %v" , err )
197+ }
198+
199+ alertsProvider := newFakeAlerts ([]* types.Alert {}, tc .err )
200+ observer := alertobserver .NewFakeLifeCycleObserver ()
201+ api := New (alertsProvider , nil , newGetAlertStatus (alertsProvider ), nil , nil , nil , observer )
202+ defaultGlobalConfig := config .DefaultGlobalConfig ()
203+ route := config.Route {}
204+ api .Update (& config.Config {
205+ Global : & defaultGlobalConfig ,
206+ Route : & route ,
207+ })
208+
209+ r , err := http .NewRequest ("POST" , "/api/v1/alerts" , bytes .NewReader (b ))
210+ w := httptest .NewRecorder ()
211+ if err != nil {
212+ t .Errorf ("Unexpected error %v" , err )
213+ }
214+
215+ api .addAlerts (w , r )
216+ res := w .Result ()
217+ body , _ := io .ReadAll (res .Body )
218+
219+ require .Equal (t , tc .code , w .Code , fmt .Sprintf ("test case: %d, StartsAt %v, EndsAt %v, Response: %s" , i , tc .start , tc .end , string (body )))
220+ if tc .code == 200 {
221+ require .Equal (t , observer .AlertsPerEvent [alertobserver .EventAlertReceived ][0 ].Fingerprint (), alerts [0 ].Fingerprint ())
222+ } else {
223+ require .Equal (t , observer .AlertsPerEvent [alertobserver .EventAlertRejected ][0 ].Fingerprint (), alerts [0 ].Fingerprint ())
224+ }
156225 }
157226}
158227
@@ -267,7 +336,7 @@ func TestListAlerts(t *testing.T) {
267336 },
268337 } {
269338 alertsProvider := newFakeAlerts (alerts , tc .err )
270- api := New (alertsProvider , nil , newGetAlertStatus (alertsProvider ), nil , nil , nil )
339+ api := New (alertsProvider , nil , newGetAlertStatus (alertsProvider ), nil , nil , nil , nil )
271340 api .route = dispatch .NewRoute (& config.Route {Receiver : "def-receiver" }, nil )
272341
273342 r , err := http .NewRequest ("GET" , "/api/v1/alerts" , nil )
0 commit comments