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
|
|
||||||
.........
|
|
|
@ -56,7 +56,7 @@ class ProcessTestCase(unittest.TestCase):
|
||||||
|
|
||||||
def test_stdout_none(self):
|
def test_stdout_none(self):
|
||||||
# .stdout is None when not redirected
|
# .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 '
|
'print " this bit of output is from a '
|
||||||
'test of stdout in a different '
|
'test of stdout in a different '
|
||||||
'process ..."'],
|
'process ..."'],
|
||||||
|
@ -350,11 +350,16 @@ class ProcessTestCase(unittest.TestCase):
|
||||||
|
|
||||||
def test_poll(self):
|
def test_poll(self):
|
||||||
p = subprocess.Popen([sys.executable,
|
p = subprocess.Popen([sys.executable,
|
||||||
"-c", "import time; time.sleep(4)"])
|
"-c", "import time; time.sleep(1)"])
|
||||||
while p.poll() == None:
|
count = 0
|
||||||
sys.stdout.write(".")
|
while p.poll() is None:
|
||||||
sys.stdout.flush()
|
time.sleep(0.1)
|
||||||
time.sleep(0.5)
|
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
|
# Subsequent invocations should just return the returncode
|
||||||
self.assertEqual(p.poll(), 0)
|
self.assertEqual(p.poll(), 0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue