@@ -59,7 +59,23 @@ def test_init__invalid_provider_type__raises_assertion_error(self, mock_w3):
59
59
with pytest .raises (AssertionError ):
60
60
IPFS (mock_w3 , ["not a provider" ])
61
61
62
- def test_provider_selection__different_frames__rotates_providers (self , mock_w3 , mock_provider1 , mock_provider2 ):
62
+ def test_providers_order__shuffled_once_at_init__order_remain_the_same_during_operations (
63
+ self , mock_w3 , mock_provider1 , mock_provider2
64
+ ):
65
+ ipfs = IPFS (mock_w3 , [mock_provider1 , mock_provider2 ])
66
+ initial_providers_order = ipfs .providers [:]
67
+
68
+ ipfs .fetch (HARDCODED_FETCH_CID , FrameNumber (0 ))
69
+ ipfs .publish (HARDCODED_PUBLISH_CONTENT , FrameNumber (1 ), "test" )
70
+ ipfs .fetch (HARDCODED_FETCH_CID , FrameNumber (2 ))
71
+
72
+ assert ipfs .providers == initial_providers_order
73
+
74
+ @patch ('random.shuffle' )
75
+ def test_provider_selection__different_frames__rotates_providers (
76
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
77
+ ):
78
+ mock_shuffle .return_value = None
63
79
ipfs = IPFS (mock_w3 , [mock_provider1 , mock_provider2 ])
64
80
65
81
ipfs .fetch (HARDCODED_FETCH_CID , FrameNumber (0 ))
@@ -74,7 +90,11 @@ def test_provider_selection__different_frames__rotates_providers(self, mock_w3,
74
90
ipfs .fetch (HARDCODED_FETCH_CID , FrameNumber (3 ))
75
91
assert ipfs .provider == mock_provider2
76
92
77
- def test_provider_selection__same_frame__keeps_same_provider (self , mock_w3 , mock_provider1 , mock_provider2 ):
93
+ @patch ('random.shuffle' )
94
+ def test_provider_selection__same_frame__keeps_same_provider (
95
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
96
+ ):
97
+ mock_shuffle .return_value = None
78
98
ipfs = IPFS (mock_w3 , [mock_provider1 , mock_provider2 ])
79
99
80
100
ipfs .fetch (HARDCODED_FETCH_CID , FrameNumber (1 ))
@@ -114,7 +134,11 @@ def test_fetch__all_retries_fail__raises_no_more_providers_error(self, mock_w3,
114
134
assert isinstance (excinfo .value .__cause__ , MaxRetryError )
115
135
assert provider .fetch .call_count == 3
116
136
117
- def test_fetch__first_provider_fails__falls_back_to_second_provider (self , mock_w3 , mock_provider1 , mock_provider2 ):
137
+ @patch ('random.shuffle' )
138
+ def test_fetch__first_provider_fails__falls_back_to_second_provider (
139
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
140
+ ):
141
+ mock_shuffle .return_value = None
118
142
provider1 = mock_provider1
119
143
provider1 .fetch = MagicMock (side_effect = Exception ("fail" ))
120
144
provider2 = mock_provider2
@@ -127,7 +151,11 @@ def test_fetch__first_provider_fails__falls_back_to_second_provider(self, mock_w
127
151
assert provider1 .fetch .call_count == 1
128
152
assert provider2 .fetch .call_count == 1
129
153
130
- def test_fetch__all_providers_fail__raises_no_more_providers_error (self , mock_w3 , mock_provider1 , mock_provider2 ):
154
+ @patch ('random.shuffle' )
155
+ def test_fetch__all_providers_fail__raises_no_more_providers_error (
156
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
157
+ ):
158
+ mock_shuffle .return_value = None
131
159
provider1 = mock_provider1
132
160
provider1 .fetch = MagicMock (side_effect = Exception ("fail1" ))
133
161
provider2 = mock_provider2
@@ -159,9 +187,11 @@ def test_publish__all_retries_fail__raises_no_more_providers_error(self, mock_w3
159
187
assert isinstance (excinfo .value .__cause__ , MaxRetryError )
160
188
assert provider .publish .call_count == 3
161
189
190
+ @patch ('random.shuffle' )
162
191
def test_publish__first_provider_fails__falls_back_to_second_provider (
163
- self , mock_w3 , mock_provider1 , mock_provider2
192
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
164
193
):
194
+ mock_shuffle .return_value = None
165
195
provider1 = mock_provider1
166
196
provider1 .publish = MagicMock (side_effect = Exception ("fail" ))
167
197
provider2 = mock_provider2
@@ -174,7 +204,11 @@ def test_publish__first_provider_fails__falls_back_to_second_provider(
174
204
assert provider1 .publish .call_count == 1
175
205
assert provider2 .publish .call_count == 1
176
206
177
- def test_publish__all_providers_fail__raises_no_more_providers_error (self , mock_w3 , mock_provider1 , mock_provider2 ):
207
+ @patch ('random.shuffle' )
208
+ def test_publish__all_providers_fail__raises_no_more_providers_error (
209
+ self , mock_shuffle , mock_w3 , mock_provider1 , mock_provider2
210
+ ):
211
+ mock_shuffle .return_value = None
178
212
provider1 = mock_provider1
179
213
provider1 .publish = MagicMock (side_effect = Exception ("fail1" ))
180
214
provider2 = mock_provider2
0 commit comments