From 6eb52973c7e63a78b10226c20ccf62b5be5b787f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 4 Mar 2025 14:12:25 +0100 Subject: [PATCH] gh-130727: Retry test_wmi on TimeoutError 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 f667926d1f8ddf..111f990656ced5 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 @@ 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 @@ def test_wmi_query_not_select(self): 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