@@ -293,8 +293,106 @@ def test_set_topics():
293293 pass
294294
295295
296- def test_maybe_refresh_metadata ():
297- pass
296+ def test_maybe_refresh_metadata_ttl (mocker ):
297+ mocker .patch .object (KafkaClient , '_bootstrap' )
298+ _poll = mocker .patch .object (KafkaClient , '_poll' )
299+
300+ cli = KafkaClient (request_timeout_ms = 9999999 , retry_backoff_ms = 2222 )
301+
302+ tasks = mocker .patch .object (cli ._delayed_tasks , 'next_at' )
303+ tasks .return_value = 9999999
304+
305+ ttl = mocker .patch .object (cli .cluster , 'ttl' )
306+ ttl .return_value = 1234
307+
308+ cli .poll (timeout_ms = 9999999 , sleep = True )
309+ _poll .assert_called_with (1.234 , sleep = True )
310+
311+
312+ def test_maybe_refresh_metadata_backoff (mocker ):
313+ mocker .patch .object (KafkaClient , '_bootstrap' )
314+ _poll = mocker .patch .object (KafkaClient , '_poll' )
315+
316+ cli = KafkaClient (request_timeout_ms = 9999999 , retry_backoff_ms = 2222 )
317+
318+ tasks = mocker .patch .object (cli ._delayed_tasks , 'next_at' )
319+ tasks .return_value = 9999999
320+
321+ ttl = mocker .patch .object (cli .cluster , 'ttl' )
322+ ttl .return_value = 0
323+
324+ now = time .time ()
325+ t = mocker .patch ('time.time' )
326+ t .return_value = now
327+ cli ._last_no_node_available_ms = now * 1000
328+
329+ cli .poll (timeout_ms = 9999999 , sleep = True )
330+ _poll .assert_called_with (2.222 , sleep = True )
331+
332+
333+ def test_maybe_refresh_metadata_in_progress (mocker ):
334+ mocker .patch .object (KafkaClient , '_bootstrap' )
335+ _poll = mocker .patch .object (KafkaClient , '_poll' )
336+
337+ cli = KafkaClient (request_timeout_ms = 9999999 , retry_backoff_ms = 2222 )
338+
339+ tasks = mocker .patch .object (cli ._delayed_tasks , 'next_at' )
340+ tasks .return_value = 9999999
341+
342+ ttl = mocker .patch .object (cli .cluster , 'ttl' )
343+ ttl .return_value = 0
344+
345+ cli ._metadata_refresh_in_progress = True
346+
347+ cli .poll (timeout_ms = 9999999 , sleep = True )
348+ _poll .assert_called_with (9999.999 , sleep = True )
349+
350+
351+ def test_maybe_refresh_metadata_update (mocker ):
352+ mocker .patch .object (KafkaClient , '_bootstrap' )
353+ _poll = mocker .patch .object (KafkaClient , '_poll' )
354+
355+ cli = KafkaClient (request_timeout_ms = 9999999 , retry_backoff_ms = 2222 )
356+
357+ tasks = mocker .patch .object (cli ._delayed_tasks , 'next_at' )
358+ tasks .return_value = 9999999
359+
360+ ttl = mocker .patch .object (cli .cluster , 'ttl' )
361+ ttl .return_value = 0
362+
363+ mocker .patch .object (cli , 'least_loaded_node' , return_value = 'foobar' )
364+ mocker .patch .object (cli , '_can_send_request' , return_value = True )
365+ send = mocker .patch .object (cli , 'send' )
366+
367+ cli .poll (timeout_ms = 9999999 , sleep = True )
368+ _poll .assert_called_with (0 , sleep = True )
369+ assert cli ._metadata_refresh_in_progress
370+ request = MetadataRequest [0 ]([])
371+ send .assert_called_with ('foobar' , request )
372+
373+
374+ def test_maybe_refresh_metadata_failure (mocker ):
375+ mocker .patch .object (KafkaClient , '_bootstrap' )
376+ _poll = mocker .patch .object (KafkaClient , '_poll' )
377+
378+ cli = KafkaClient (request_timeout_ms = 9999999 , retry_backoff_ms = 2222 )
379+
380+ tasks = mocker .patch .object (cli ._delayed_tasks , 'next_at' )
381+ tasks .return_value = 9999999
382+
383+ ttl = mocker .patch .object (cli .cluster , 'ttl' )
384+ ttl .return_value = 0
385+
386+ mocker .patch .object (cli , 'least_loaded_node' , return_value = 'foobar' )
387+
388+ now = time .time ()
389+ t = mocker .patch ('time.time' )
390+ t .return_value = now
391+
392+ cli .poll (timeout_ms = 9999999 , sleep = True )
393+ _poll .assert_called_with (0 , sleep = True )
394+ assert cli ._last_no_node_available_ms == now * 1000
395+ assert not cli ._metadata_refresh_in_progress
298396
299397
300398def test_schedule ():
0 commit comments