]> granicus.if.org Git - python/commitdiff
Kill several problems at once: test_poll() failed sometimes for me.
authorTim Peters <tim.peters@gmail.com>
Wed, 13 Oct 2004 03:43:40 +0000 (03:43 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 13 Oct 2004 03:43:40 +0000 (03:43 +0000)
Turns out the mysterious "expected output" file contained exactly N dots,
because test_poll() has a loop that *usually* went around N times,
printing one dot on each loop trip.  But there's no guarantee of that,
because the exact value of N depended on the vagaries of scheduling
time.sleep()s across two different processes.  So stopped printing dots,
and got rid of the expected output file.  Add a loop counter instead,
and verify that the loop goes around at least a couple of times.  Also
cut the minimum time needed for this test from 4 seconds to 1.

Lib/test/output/test_subprocess [deleted file]
Lib/test/test_subprocess.py

diff --git a/Lib/test/output/test_subprocess b/Lib/test/output/test_subprocess
deleted file mode 100644 (file)
index effbcf0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-test_subprocess
-.........
\ No newline at end of file
index 6f498b822f27c6d3b09edef1b46175542f076ebb..c4bc3d0ed4023d169f249450c0ef25537549ca90 100644 (file)
@@ -56,7 +56,7 @@ class ProcessTestCase(unittest.TestCase):
 
     def test_stdout_none(self):
         # .stdout is None when not redirected
-        p = subprocess.Popen([sys.executable, "-c", 
+        p = subprocess.Popen([sys.executable, "-c",
                              'print "    this bit of output is from a '
                              'test of stdout in a different '
                              'process ..."'],
@@ -350,11 +350,16 @@ class ProcessTestCase(unittest.TestCase):
 
     def test_poll(self):
         p = subprocess.Popen([sys.executable,
-                          "-c", "import time; time.sleep(4)"])
-        while p.poll() == None:
-            sys.stdout.write(".")
-            sys.stdout.flush()
-            time.sleep(0.5)
+                          "-c", "import time; time.sleep(1)"])
+        count = 0
+        while p.poll() is None:
+            time.sleep(0.1)
+            count += 1
+        # We expect that the poll loop probably went around about 10 times,
+        # but, based on system scheduling we can't control, it's possible
+        # poll() never returned None.  It "should be" very rare that it
+        # didn't go around at least twice.
+        self.assert_(count >= 2)
         # Subsequent invocations should just return the returncode
         self.assertEqual(p.poll(), 0)