From f67ff9e82071b21c1960401aed4844b00b5bfb53 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 4 Mar 2025 16:07:01 +0100 Subject: gh-130727: Retry test_wmi on TimeoutError (#130832) Use sleeping_retry() in test_wmi to retry multiple times on TimeoutError. Wait up to LONG_TIMEOUT seconds (5 minutes by default). --- Lib/test/test_wmi.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Lib/test/test_wmi.py b/Lib/test/test_wmi.py index f667926..111f990 100644 --- a/Lib/test/test_wmi.py +++ b/Lib/test/test_wmi.py @@ -3,7 +3,8 @@ import time import unittest -from test.support import import_helper, requires_resource, LOOPBACK_TIMEOUT +from test import support +from test.support import import_helper # Do this first so test will be skipped if module doesn't exist @@ -12,15 +13,16 @@ _wmi = import_helper.import_module('_wmi', required_on=['win']) def wmi_exec_query(query): # gh-112278: WMI maybe slow response when first call. - try: - return _wmi.exec_query(query) - except BrokenPipeError: - pass - except WindowsError as e: - if e.winerror != 258: - raise - time.sleep(LOOPBACK_TIMEOUT) - return _wmi.exec_query(query) + for _ in support.sleeping_retry(support.LONG_TIMEOUT): + try: + return _wmi.exec_query(query) + except BrokenPipeError: + pass + # retry on pipe error + except WindowsError as exc: + if exc.winerror != 258: + raise + # retry on timeout class WmiTests(unittest.TestCase): @@ -58,7 +60,7 @@ class WmiTests(unittest.TestCase): with self.assertRaises(ValueError): wmi_exec_query("not select, just in case someone tries something") - @requires_resource('cpu') + @support.requires_resource('cpu') def test_wmi_query_overflow(self): # Ensure very big queries fail # Test multiple times to ensure consistency -- cgit v0.12