]> granicus.if.org Git - python/commitdiff
bpo-37244: Fix test_multiprocessing.test_resource_tracker() (GH-14288)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 25 Jun 2019 22:49:31 +0000 (15:49 -0700)
committerGitHub <noreply@github.com>
Tue, 25 Jun 2019 22:49:31 +0000 (15:49 -0700)
Increase robustness of test_resource_tracker(): retry for 60 seconds.
(cherry picked from commit e1a63c4f21011a3ae77dff624196561070c83446)

Co-authored-by: Pierre Glaser <pierreglaser@msn.com>
Lib/test/_test_multiprocessing.py

index 07cf09aaa4ab24fd897685b2d6e2278e044a50c5..eef262d723daf50777f08b7e86f6c61943c5d9ff 100644 (file)
@@ -5010,12 +5010,21 @@ class TestResourceTracker(unittest.TestCase):
                 _resource_unlink(name1, rtype)
                 p.terminate()
                 p.wait()
-                time.sleep(2.0)
-                with self.assertRaises(OSError) as ctx:
-                    _resource_unlink(name2, rtype)
-                # docs say it should be ENOENT, but OSX seems to give EINVAL
-                self.assertIn(
-                    ctx.exception.errno, (errno.ENOENT, errno.EINVAL))
+
+                deadline = time.monotonic() + 60
+                while time.monotonic() < deadline:
+                    time.sleep(.5)
+                    try:
+                        _resource_unlink(name2, rtype)
+                    except OSError as e:
+                        # docs say it should be ENOENT, but OSX seems to give
+                        # EINVAL
+                        self.assertIn(e.errno, (errno.ENOENT, errno.EINVAL))
+                        break
+                else:
+                    raise AssertionError(
+                        f"A {rtype} resource was leaked after a process was "
+                        f"abruptly terminated.")
                 err = p.stderr.read().decode('utf-8')
                 p.stderr.close()
                 expected = ('resource_tracker: There appear to be 2 leaked {} '