Kill several problems at once: test_poll() failed sometimes for me.
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.
This commit is contained in:
parent
4052fe5a9b
commit
29b6b4f7c7
|
@ -1,2 +0,0 @@
|
|||
test_subprocess
|
||||
.........
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue