]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-130727: Retry test_wmi on TimeoutError (GH-130832) (#130839)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 4 Mar 2025 15:31:22 +0000 (16:31 +0100)
committerGitHub <noreply@github.com>
Tue, 4 Mar 2025 15:31:22 +0000 (15:31 +0000)
gh-130727: Retry test_wmi on TimeoutError (GH-130832)

Use sleeping_retry() in test_wmi to retry multiple times on
TimeoutError. Wait up to LONG_TIMEOUT seconds (5 minutes by default).
(cherry picked from commit f67ff9e82071b21c1960401aed4844b00b5bfb53)

Co-authored-by: Victor Stinner <vstinner@python.org>
Lib/test/test_wmi.py

index f667926d1f8ddfac4788626149d1d4e5d8a569ef..111f990656ced5a0b6fd576faf46b25bd5d28975 100644 (file)
@@ -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