Make test of poll() use unbuffered IO

This commit is contained in:
Richard Oudkerk 2012-12-09 16:05:22 +00:00
parent 53dff0c059
commit 07c34bf19f
1 changed files with 6 additions and 3 deletions

View File

@ -1,6 +1,6 @@
# Test case for the os.poll() function # Test case for the os.poll() function
import os, select, random, unittest import os, select, random, unittest, subprocess
from test.support import TESTFN, run_unittest from test.support import TESTFN, run_unittest
try: try:
@ -114,7 +114,9 @@ class PollTests(unittest.TestCase):
def test_poll2(self): def test_poll2(self):
cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
p = os.popen(cmd, 'r') proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
bufsize=0)
p = proc.stdout
pollster = select.poll() pollster = select.poll()
pollster.register( p, select.POLLIN ) pollster.register( p, select.POLLIN )
for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10: for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10:
@ -124,7 +126,7 @@ class PollTests(unittest.TestCase):
fd, flags = fdlist[0] fd, flags = fdlist[0]
if flags & select.POLLHUP: if flags & select.POLLHUP:
line = p.readline() line = p.readline()
if line != "": if line != b"":
self.fail('error: pipe seems to be closed, but still returns data') self.fail('error: pipe seems to be closed, but still returns data')
continue continue
@ -132,6 +134,7 @@ class PollTests(unittest.TestCase):
line = p.readline() line = p.readline()
if not line: if not line:
break break
self.assertEqual(line, b'testing...\n')
continue continue
else: else:
self.fail('Unexpected return value from select.poll: %s' % fdlist) self.fail('Unexpected return value from select.poll: %s' % fdlist)