mirror of https://github.com/python/cpython
This gets the test working on Solaris. It seems a little hokey to me,
but the test passed on Linux and Solaris, hopefully other platforms too.
This commit is contained in:
parent
bd77c037ed
commit
1b59d10ce2
|
@ -1,3 +1,5 @@
|
|||
import errno
|
||||
import fcntl
|
||||
import pty
|
||||
import os
|
||||
import sys
|
||||
|
@ -40,6 +42,7 @@ def normalize_output(data):
|
|||
|
||||
# Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
|
||||
# because pty code is not too portable.
|
||||
# XXX(nnorwitz): these tests leak fds when there is an error.
|
||||
class PtyTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
# isatty() and close() can hang on some platforms. Set an alarm
|
||||
|
@ -70,6 +73,22 @@ class PtyTest(unittest.TestCase):
|
|||
|
||||
self.assertTrue(os.isatty(slave_fd), 'slave_fd is not a tty')
|
||||
|
||||
# Solaris requires reading the fd before anything is returned.
|
||||
# My guess is that since we open and close the slave fd
|
||||
# in master_open(), we need to read the EOF.
|
||||
|
||||
# Ensure the fd is non-blocking in case there's nothing to read.
|
||||
orig_flags = fcntl.fcntl(master_fd, fcntl.F_GETFL)
|
||||
fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags | os.O_NONBLOCK)
|
||||
try:
|
||||
s1 = os.read(master_fd, 1024)
|
||||
self.assertEquals('', s1)
|
||||
except OSError, e:
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
# Restore the original flags.
|
||||
fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags)
|
||||
|
||||
debug("Writing to slave_fd")
|
||||
os.write(slave_fd, TEST_STRING_1)
|
||||
s1 = os.read(master_fd, 1024)
|
||||
|
|
Loading…
Reference in New Issue