@@ -187,9 +187,9 @@ impl<R> ExponentialBackoffBuilder<R> {
187187
188188#[ cfg( test) ]
189189mod tests {
190- use crate :: expbackoff:: { ExponentialBackoff , ExponentialBackoffBuilder } ;
190+ use crate :: expbackoff:: ExponentialBackoffBuilder ;
191191 use core:: time:: Duration ;
192- use tower:: util:: rng:: Rng ;
192+ use tower:: util:: rng:: { HasherRng , Rng } ;
193193
194194 struct Const ( f64 ) ;
195195
@@ -203,63 +203,64 @@ mod tests {
203203 }
204204 }
205205
206+ struct TestCase {
207+ config : ExponentialBackoffBuilder < HasherRng > ,
208+ rng : f64 ,
209+ backoffs : Vec < Duration > ,
210+ }
211+
206212 #[ test]
207213 fn default_config ( ) {
208- let backoffs: Vec < Duration > = vec ! [
209- Duration :: from_secs( 1 ) ,
210- Duration :: from_secs( 1 ) + Duration :: from_millis( 600 ) ,
211- Duration :: from_secs( 2 ) + Duration :: from_millis( 560 ) ,
212- Duration :: from_secs( 4 ) + Duration :: from_millis( 090 ) ,
213- Duration :: from_secs( 6 ) + Duration :: from_millis( 550 ) ,
214- Duration :: from_secs( 10 ) + Duration :: from_millis( 480 ) ,
215- Duration :: from_secs( 16 ) + Duration :: from_millis( 770 ) ,
216- Duration :: from_secs( 26 ) + Duration :: from_millis( 840 ) ,
217- Duration :: from_secs( 42 ) + Duration :: from_millis( 940 ) ,
218- Duration :: from_mins( 1 ) + Duration :: from_millis( 8710 ) ,
219- Duration :: from_mins( 1 ) + Duration :: from_millis( 49950 ) ,
220- Duration :: from_mins( 2 ) ,
221- Duration :: from_mins( 2 ) ,
222- ] ;
223-
224- let mut backoff = ExponentialBackoffBuilder :: < Const > :: default ( )
225- . with_rng ( Const ( 0.5 ) )
226- . build ( )
227- . unwrap ( ) ;
228-
229- for expected in backoffs {
230- let duration = backoff. backoff ( ) ;
231- backoff. tried ( ) ;
232-
233- assert ! ( duration - expected <= Duration :: from_millis( 10 ) ) ;
234- }
214+ assert_test_case ( TestCase {
215+ config : ExponentialBackoffBuilder :: < HasherRng > :: default ( ) ,
216+ rng : 0.5 ,
217+ backoffs : vec ! [
218+ Duration :: from_secs( 1 ) ,
219+ Duration :: from_secs( 1 ) + Duration :: from_millis( 600 ) ,
220+ Duration :: from_secs( 2 ) + Duration :: from_millis( 560 ) ,
221+ Duration :: from_secs( 4 ) + Duration :: from_millis( 090 ) ,
222+ Duration :: from_secs( 6 ) + Duration :: from_millis( 550 ) ,
223+ Duration :: from_secs( 10 ) + Duration :: from_millis( 480 ) ,
224+ Duration :: from_secs( 16 ) + Duration :: from_millis( 770 ) ,
225+ Duration :: from_secs( 26 ) + Duration :: from_millis( 840 ) ,
226+ Duration :: from_secs( 42 ) + Duration :: from_millis( 940 ) ,
227+ Duration :: from_mins( 1 ) + Duration :: from_millis( 8710 ) ,
228+ Duration :: from_mins( 1 ) + Duration :: from_millis( 49950 ) ,
229+ Duration :: from_mins( 2 ) ,
230+ Duration :: from_mins( 2 ) ,
231+ ] ,
232+ } ) ;
235233 }
236234
237235 #[ test]
238236 fn default_config_max_jitter ( ) {
239- let backoffs: Vec < Duration > = vec ! [
240- Duration :: from_secs( 1 ) ,
241- Duration :: from_secs( 1 ) + Duration :: from_millis( 920 ) ,
242- Duration :: from_secs( 3 ) + Duration :: from_millis( 70 ) ,
243- Duration :: from_secs( 4 ) + Duration :: from_millis( 910 ) ,
244- Duration :: from_secs( 7 ) + Duration :: from_millis( 860 ) ,
245- Duration :: from_secs( 12 ) + Duration :: from_millis( 580 ) ,
246- Duration :: from_secs( 20 ) + Duration :: from_millis( 130 ) ,
247- Duration :: from_secs( 32 ) + Duration :: from_millis( 210 ) ,
248- Duration :: from_secs( 51 ) + Duration :: from_millis( 530 ) ,
249- Duration :: from_mins( 1 ) + Duration :: from_secs( 22 ) + Duration :: from_millis( 460 ) ,
250- Duration :: from_mins( 2 ) + Duration :: from_secs( 11 ) + Duration :: from_millis( 940 ) ,
251- Duration :: from_mins( 2 ) + Duration :: from_secs( 24 ) ,
252- Duration :: from_mins( 2 ) + Duration :: from_secs( 24 ) ,
253- ] ;
254-
255- let mut backoff: ExponentialBackoff < Const > = ExponentialBackoffBuilder :: < Const > :: default ( )
256- . with_rng ( Const ( 1.0 ) )
257- . build ( )
258- . unwrap ( ) ;
259-
260- for expected in backoffs {
261- let duration = backoff. backoff ( ) ;
262- backoff. tried ( ) ;
237+ assert_test_case ( TestCase {
238+ config : ExponentialBackoffBuilder :: < HasherRng > :: default ( ) ,
239+ rng : 1.0 ,
240+ backoffs : vec ! [
241+ Duration :: from_secs( 1 ) ,
242+ Duration :: from_secs( 1 ) + Duration :: from_millis( 920 ) ,
243+ Duration :: from_secs( 3 ) + Duration :: from_millis( 70 ) ,
244+ Duration :: from_secs( 4 ) + Duration :: from_millis( 910 ) ,
245+ Duration :: from_secs( 7 ) + Duration :: from_millis( 860 ) ,
246+ Duration :: from_secs( 12 ) + Duration :: from_millis( 580 ) ,
247+ Duration :: from_secs( 20 ) + Duration :: from_millis( 130 ) ,
248+ Duration :: from_secs( 32 ) + Duration :: from_millis( 210 ) ,
249+ Duration :: from_secs( 51 ) + Duration :: from_millis( 530 ) ,
250+ Duration :: from_mins( 1 ) + Duration :: from_secs( 22 ) + Duration :: from_millis( 460 ) ,
251+ Duration :: from_mins( 2 ) + Duration :: from_secs( 11 ) + Duration :: from_millis( 940 ) ,
252+ Duration :: from_mins( 2 ) + Duration :: from_secs( 24 ) ,
253+ Duration :: from_mins( 2 ) + Duration :: from_secs( 24 ) ,
254+ ] ,
255+ } ) ;
256+ }
257+
258+ fn assert_test_case ( tc : TestCase ) {
259+ let mut instance = tc. config . with_rng ( Const ( tc. rng ) ) . build ( ) . unwrap ( ) ;
260+
261+ for expected in tc. backoffs {
262+ let duration = instance. backoff ( ) ;
263+ instance. tried ( ) ;
263264
264265 assert ! ( duration - expected <= Duration :: from_millis( 10 ) ) ;
265266 }
0 commit comments