8
8
9
9
"github.com/Azure/terraform-provider-azapi/internal/clients"
10
10
"github.com/Azure/terraform-provider-azapi/internal/services/parse"
11
+ "github.com/cenkalti/backoff/v4"
11
12
"github.com/stretchr/testify/assert"
12
13
)
13
14
@@ -27,9 +28,16 @@ import (
27
28
//
28
29
// We check these timings are expected using the assert.InDeltaSlice function.
29
30
func TestRetryDataPlaneClient (t * testing.T ) {
31
+ t .Parallel ()
30
32
mock := NewMockDataPlaneClient (t , nil , nil , 3 , errors .New ("retry error" ))
31
- bkof , errRegExps := clients .NewRetryableErrors (1 , 30 , 2 , 0.0 , []string {"retry error" })
32
- retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , errRegExps , nil , nil )
33
+ bkof := backoff .NewExponentialBackOff (
34
+ backoff .WithInitialInterval (1 * time .Second ),
35
+ backoff .WithMaxInterval (30 * time .Second ),
36
+ backoff .WithMultiplier (2 ),
37
+ backoff .WithRandomizationFactor (0.0 ),
38
+ )
39
+ rexs := clients .StringSliceToRegexpSliceMust ([]string {"retry error" })
40
+ retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , rexs , nil , nil )
33
41
_ , err := retryClient .Get (context .Background (), parse.DataPlaneResourceId {}, clients .DefaultRequestOptions ())
34
42
assert .NoError (t , err )
35
43
assert .Equal (t , 3 , mock .requestCount )
@@ -47,36 +55,64 @@ func TestRetryDataPlaneClient(t *testing.T) {
47
55
}
48
56
49
57
func TestRetryDataPlaneClientRegexp (t * testing.T ) {
58
+ t .Parallel ()
50
59
mock := NewMockDataPlaneClient (t , nil , nil , 3 , errors .New ("retry error" ))
51
- bkof , errRegExps := clients .NewRetryableErrors (1 , 5 , 1.5 , 0.0 , []string {"^retry" })
52
- retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , errRegExps , nil , nil )
60
+ bkof := backoff .NewExponentialBackOff (
61
+ backoff .WithInitialInterval (1 * time .Second ),
62
+ backoff .WithMaxInterval (5 * time .Second ),
63
+ backoff .WithMultiplier (1.5 ),
64
+ backoff .WithRandomizationFactor (0.0 ),
65
+ )
66
+ rexs := clients .StringSliceToRegexpSliceMust ([]string {"^retry" })
67
+ retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , rexs , nil , nil )
53
68
_ , err := retryClient .Get (context .Background (), parse.DataPlaneResourceId {}, clients .DefaultRequestOptions ())
54
69
assert .NoError (t , err )
55
70
assert .Equal (t , 3 , mock .RequestCount ())
56
71
}
57
72
58
73
func TestRetryDataPlaneClientMultiRegexp (t * testing.T ) {
74
+ t .Parallel ()
59
75
mock := NewMockDataPlaneClient (t , nil , nil , 3 , errors .New ("retry error" ))
60
- bkof , errRegExps := clients .NewRetryableErrors (1 , 5 , 1.5 , 0.0 , []string {"nomatch" , "^retry" })
61
- retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , errRegExps , nil , nil )
76
+ bkof := backoff .NewExponentialBackOff (
77
+ backoff .WithInitialInterval (1 * time .Second ),
78
+ backoff .WithMaxInterval (5 * time .Second ),
79
+ backoff .WithMultiplier (1.5 ),
80
+ backoff .WithRandomizationFactor (0.0 ),
81
+ )
82
+ rexs := clients .StringSliceToRegexpSliceMust ([]string {"nomatch" , "^retry" })
83
+ retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , rexs , nil , nil )
62
84
_ , err := retryClient .Get (context .Background (), parse.DataPlaneResourceId {}, clients .DefaultRequestOptions ())
63
85
assert .NoError (t , err )
64
86
assert .Equal (t , 3 , mock .RequestCount ())
65
87
}
66
88
67
89
func TestRetryDataPlaneClientMultiRegexpNoMatchWithPermError (t * testing.T ) {
90
+ t .Parallel ()
68
91
mock := NewMockDataPlaneClient (t , nil , errors .New ("perm error" ), 3 , errors .New ("retry error" ))
69
- bkof , errRegExps := clients .NewRetryableErrors (1 , 5 , 1.5 , 0.0 , []string {"retry" })
70
- retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , errRegExps , nil , nil )
92
+ bkof := backoff .NewExponentialBackOff (
93
+ backoff .WithInitialInterval (1 * time .Second ),
94
+ backoff .WithMaxInterval (5 * time .Second ),
95
+ backoff .WithMultiplier (1.5 ),
96
+ backoff .WithRandomizationFactor (0.0 ),
97
+ )
98
+ rexs := clients .StringSliceToRegexpSliceMust ([]string {"retry" })
99
+ retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , rexs , nil , nil )
71
100
_ , err := retryClient .Get (context .Background (), parse.DataPlaneResourceId {}, clients .DefaultRequestOptions ())
72
101
assert .ErrorContains (t , err , "perm error" )
73
102
assert .Equal (t , 3 , mock .RequestCount ())
74
103
}
75
104
76
105
func TestRetryDataPlaneClientContextDeadline (t * testing.T ) {
106
+ t .Parallel ()
77
107
mock := NewMockDataPlaneClient (t , nil , nil , 3 , errors .New ("retry error" ))
78
- bkof , errRegExps := clients .NewRetryableErrors (60 , 60 , 1.5 , 0.0 , []string {"^retry" })
79
- retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , errRegExps , nil , nil )
108
+ bkof := backoff .NewExponentialBackOff (
109
+ backoff .WithInitialInterval (60 * time .Second ),
110
+ backoff .WithMaxInterval (60 * time .Second ),
111
+ backoff .WithMultiplier (1.5 ),
112
+ backoff .WithRandomizationFactor (0.0 ),
113
+ )
114
+ rexs := clients .StringSliceToRegexpSliceMust ([]string {"^retry" })
115
+ retryClient := clients .NewDataPlaneClientRetryableErrors (mock , bkof , rexs , nil , nil )
80
116
ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
81
117
defer cancel ()
82
118
start := time .Now ()
0 commit comments