@@ -95,6 +95,18 @@ def cached_regions_provider(request):
95
95
pass
96
96
97
97
98
+ @pytest .fixture (scope = 'function' )
99
+ def bad_regions_provider ():
100
+ regions_provider = QueryRegionsProvider (
101
+ access_key = 'fake' ,
102
+ bucket_name = 'fake' ,
103
+ endpoints_provider = [
104
+ Endpoint ('fake-uc.python.qiniu.com' )
105
+ ]
106
+ )
107
+ yield regions_provider
108
+
109
+
98
110
class TestCachedQueryRegionsProvider :
99
111
@pytest .mark .parametrize (
100
112
'cached_regions_provider' ,
@@ -178,14 +190,78 @@ def test_getter_with_base_regions_provider(self, cached_regions_provider):
178
190
line_num += 1
179
191
assert line_num == 1
180
192
181
- def test_should_provide_memo_expired_regions_when_base_provider_failed (self ):
182
- pass
183
-
184
- def test_should_provide_file_expired_regions_when_base_provider_failed (self ):
185
- pass
193
+ @pytest .mark .parametrize (
194
+ 'cached_regions_provider' ,
195
+ [
196
+ {
197
+ 'persist_path' : os .path .join (tempfile .gettempdir (), 'test-base-provider.jsonl' )
198
+ }
199
+ ],
200
+ indirect = True
201
+ )
202
+ def test_should_provide_memo_expired_regions_when_base_provider_failed (
203
+ self ,
204
+ cached_regions_provider ,
205
+ bad_regions_provider
206
+ ):
207
+ expired_region = Region .from_region_id ('z0' )
208
+ expired_region .create_time = datetime .datetime .fromtimestamp (0 )
209
+ expired_region .ttl = 1
210
+ cached_regions_provider .set_regions ([expired_region ])
211
+ cached_regions_provider .base_regions_provider = bad_regions_provider
212
+ regions = list (cached_regions_provider )
213
+ assert len (regions ) > 0
214
+ assert not regions [0 ].is_live
186
215
187
- def test_shrink_normally (self ):
188
- pass
216
+ @pytest .mark .parametrize (
217
+ 'cached_regions_provider' ,
218
+ [
219
+ {
220
+ 'persist_path' : os .path .join (tempfile .gettempdir (), 'test-base-provider.jsonl' )
221
+ }
222
+ ],
223
+ indirect = True
224
+ )
225
+ def test_should_provide_file_expired_regions_when_base_provider_failed (
226
+ self ,
227
+ cached_regions_provider ,
228
+ bad_regions_provider
229
+ ):
230
+ expired_region = Region .from_region_id ('z0' )
231
+ expired_region .create_time = datetime .datetime .fromtimestamp (0 )
232
+ expired_region .ttl = 1
233
+ cached_regions_provider .set_regions ([expired_region ])
234
+ cached_regions_provider ._cache_scope .memo_cache .clear ()
235
+ cached_regions_provider .base_regions_provider = bad_regions_provider
236
+ regions = list (cached_regions_provider )
237
+ assert len (regions ) > 0
238
+ assert not regions [0 ].is_live
189
239
190
- def test_shrink_with_ignore_expired_regions (self ):
191
- pass
240
+ @pytest .mark .parametrize (
241
+ 'cached_regions_provider' ,
242
+ [
243
+ {
244
+ 'should_shrink_expired_regions' : True
245
+ }
246
+ ],
247
+ indirect = True
248
+ )
249
+ def test_shrink_with_expired_regions (self , cached_regions_provider ):
250
+ expired_region = Region .from_region_id ('z0' )
251
+ expired_region .create_time = datetime .datetime .fromtimestamp (0 )
252
+ expired_region .ttl = 1
253
+ origin_cache_key = cached_regions_provider .cache_key
254
+ cached_regions_provider .set_regions ([expired_region ])
255
+ cached_regions_provider .cache_key = 'another-cache-key'
256
+ list (cached_regions_provider ) # trigger __shrink_cache()
257
+ assert len (cached_regions_provider ._cache_scope .memo_cache [origin_cache_key ]) == 0
258
+
259
+ def test_shrink_with_ignore_expired_regions (self , cached_regions_provider ):
260
+ expired_region = Region .from_region_id ('z0' )
261
+ expired_region .create_time = datetime .datetime .fromtimestamp (0 )
262
+ expired_region .ttl = 1
263
+ origin_cache_key = cached_regions_provider .cache_key
264
+ cached_regions_provider .set_regions ([expired_region ])
265
+ cached_regions_provider .cache_key = 'another-cache-key'
266
+ list (cached_regions_provider ) # trigger __shrink_cache()
267
+ assert len (cached_regions_provider ._cache_scope .memo_cache [origin_cache_key ]) > 0
0 commit comments