@@ -6,7 +6,7 @@ namespace Polly.Core.Tests.Retry;
66
77public class RetryHelperTests
88{
9- private readonly RandomUtil _randomUtil = new ( 0 ) ;
9+ private readonly Func < double > _randomizer = new RandomUtil ( 0 ) . NextDouble ;
1010
1111 [ Fact ]
1212 public void IsValidDelay_Ok ( )
@@ -26,7 +26,7 @@ public void UnsupportedRetryBackoffType_Throws()
2626 Assert . Throws < ArgumentOutOfRangeException > ( ( ) =>
2727 {
2828 double state = 0 ;
29- return RetryHelper . GetRetryDelay ( type , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) ;
29+ return RetryHelper . GetRetryDelay ( type , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) ;
3030 } ) ;
3131 }
3232
@@ -35,41 +35,41 @@ public void Constant_Ok()
3535 {
3636 double state = 0 ;
3737
38- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 0 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
39- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 1 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
40- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 2 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
38+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 0 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
39+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 1 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
40+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 2 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
4141
42- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
43- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
44- RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
42+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
43+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
44+ RetryHelper . GetRetryDelay ( RetryBackoffType . Constant , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
4545 }
4646
4747 [ Fact ]
4848 public void Linear_Ok ( )
4949 {
5050 double state = 0 ;
5151
52- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 0 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
53- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 1 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
54- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 2 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
52+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 0 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
53+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 1 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
54+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 2 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
5555
56- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
57- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 2 ) ) ;
58- RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 3 ) ) ;
56+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
57+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 2 ) ) ;
58+ RetryHelper . GetRetryDelay ( RetryBackoffType . Linear , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 3 ) ) ;
5959 }
6060
6161 [ Fact ]
6262 public void Exponential_Ok ( )
6363 {
6464 double state = 0 ;
6565
66- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 0 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
67- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 1 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
68- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 2 , TimeSpan . Zero , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . Zero ) ;
66+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 0 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
67+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 1 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
68+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 2 , TimeSpan . Zero , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . Zero ) ;
6969
70- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
71- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 2 ) ) ;
72- RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomUtil ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 4 ) ) ;
70+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 0 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 1 ) ) ;
71+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 1 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 2 ) ) ;
72+ RetryHelper . GetRetryDelay ( RetryBackoffType . Exponential , 2 , TimeSpan . FromSeconds ( 1 ) , ref state , _randomizer ) . Should ( ) . Be ( TimeSpan . FromSeconds ( 4 ) ) ;
7373 }
7474
7575 [ InlineData ( 1 ) ]
@@ -94,20 +94,20 @@ public void ExponentialWithJitter_Ok(int count)
9494 public void ExponentialWithJitter_EnsureRandomness ( )
9595 {
9696 var delay = TimeSpan . FromSeconds ( 7.8 ) ;
97- var delays1 = GetExponentialWithJitterBackoff ( false , delay , 100 , RandomUtil . Instance ) ;
98- var delays2 = GetExponentialWithJitterBackoff ( false , delay , 100 , RandomUtil . Instance ) ;
97+ var delays1 = GetExponentialWithJitterBackoff ( false , delay , 100 , RandomUtil . Instance . NextDouble ) ;
98+ var delays2 = GetExponentialWithJitterBackoff ( false , delay , 100 , RandomUtil . Instance . NextDouble ) ;
9999
100100 delays1 . SequenceEqual ( delays2 ) . Should ( ) . BeFalse ( ) ;
101101 }
102102
103- private static IReadOnlyList < TimeSpan > GetExponentialWithJitterBackoff ( bool contrib , TimeSpan baseDelay , int retryCount , RandomUtil ? util = null )
103+ private static IReadOnlyList < TimeSpan > GetExponentialWithJitterBackoff ( bool contrib , TimeSpan baseDelay , int retryCount , Func < double > ? randomizer = null )
104104 {
105105 if ( contrib )
106106 {
107107 return Backoff . DecorrelatedJitterBackoffV2 ( baseDelay , retryCount , 0 , false ) . Take ( retryCount ) . ToArray ( ) ;
108108 }
109109
110- var random = util ?? new RandomUtil ( 0 ) ;
110+ var random = randomizer ?? new RandomUtil ( 0 ) . NextDouble ;
111111 double state = 0 ;
112112 var result = new List < TimeSpan > ( ) ;
113113
0 commit comments