@@ -187,6 +187,98 @@ func (suite *ListSuite) TestHealthcheck() {
187187 }))
188188}
189189
190+ func (suite * ListSuite ) TestReconcile () {
191+ l , err := upstream .NewList (
192+ []upstream.Backend {
193+ mockBackend ("one" ),
194+ mockBackend ("two" ),
195+ mockBackend ("three" ),
196+ },
197+ upstream .WithLowHighScores (- 3 , 3 ),
198+ upstream .WithInitialScore (1 ),
199+ upstream .WithScoreDeltas (- 1 , 1 ),
200+ upstream .WithHealthcheckInterval (time .Hour ),
201+ )
202+ suite .Require ().NoError (err )
203+
204+ defer l .Shutdown ()
205+
206+ backend , err := l .Pick ()
207+ suite .Assert ().Equal (mockBackend ("one" ), backend )
208+ suite .Assert ().NoError (err )
209+
210+ l .Reconcile ([]upstream.Backend {
211+ mockBackend ("one" ),
212+ mockBackend ("two" ),
213+ mockBackend ("three" ),
214+ })
215+
216+ backend , err = l .Pick ()
217+ suite .Assert ().Equal (mockBackend ("two" ), backend )
218+ suite .Assert ().NoError (err )
219+
220+ l .Reconcile ([]upstream.Backend {
221+ mockBackend ("one" ),
222+ mockBackend ("two" ),
223+ mockBackend ("four" ),
224+ })
225+
226+ backend , err = l .Pick ()
227+ suite .Assert ().Equal (mockBackend ("four" ), backend )
228+ suite .Assert ().NoError (err )
229+
230+ l .Reconcile ([]upstream.Backend {
231+ mockBackend ("five" ),
232+ mockBackend ("six" ),
233+ mockBackend ("four" ),
234+ })
235+
236+ backend , err = l .Pick ()
237+ suite .Assert ().Equal (mockBackend ("four" ), backend )
238+ suite .Assert ().NoError (err )
239+
240+ backend , err = l .Pick ()
241+ suite .Assert ().Equal (mockBackend ("five" ), backend )
242+ suite .Assert ().NoError (err )
243+
244+ backend , err = l .Pick ()
245+ suite .Assert ().Equal (mockBackend ("six" ), backend )
246+ suite .Assert ().NoError (err )
247+
248+ l .Down (mockBackend ("four" )) // score == 2
249+ l .Down (mockBackend ("four" )) // score == 1
250+ l .Down (mockBackend ("four" )) // score == 0
251+ l .Down (mockBackend ("four" )) // score == -1
252+
253+ backend , err = l .Pick ()
254+ suite .Assert ().Equal (mockBackend ("five" ), backend )
255+ suite .Assert ().NoError (err )
256+
257+ backend , err = l .Pick ()
258+ suite .Assert ().Equal (mockBackend ("six" ), backend )
259+ suite .Assert ().NoError (err )
260+
261+ l .Reconcile ([]upstream.Backend {
262+ mockBackend ("five" ),
263+ mockBackend ("six" ),
264+ mockBackend ("four" ),
265+ })
266+
267+ backend , err = l .Pick ()
268+ suite .Assert ().Equal (mockBackend ("five" ), backend )
269+ suite .Assert ().NoError (err )
270+
271+ backend , err = l .Pick ()
272+ suite .Assert ().Equal (mockBackend ("six" ), backend )
273+ suite .Assert ().NoError (err )
274+
275+ l .Reconcile (nil )
276+
277+ backend , err = l .Pick ()
278+ suite .Assert ().Nil (backend )
279+ suite .Assert ().EqualError (err , "no upstreams available" )
280+ }
281+
190282func TestListSuite (t * testing.T ) {
191283 suite .Run (t , new (ListSuite ))
192284}
0 commit comments