Commit 1b59d10c authored by Neal Norwitz's avatar Neal Norwitz

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.
parent bd77c037
import errno
import fcntl
import pty import pty
import os import os
import sys import sys
...@@ -40,6 +42,7 @@ def normalize_output(data): ...@@ -40,6 +42,7 @@ def normalize_output(data):
# Marginal testing of pty suite. Cannot do extensive 'do or fail' testing # Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
# because pty code is not too portable. # because pty code is not too portable.
# XXX(nnorwitz): these tests leak fds when there is an error.
class PtyTest(unittest.TestCase): class PtyTest(unittest.TestCase):
def setUp(self): def setUp(self):
# isatty() and close() can hang on some platforms. Set an alarm # isatty() and close() can hang on some platforms. Set an alarm
...@@ -70,6 +73,22 @@ class PtyTest(unittest.TestCase): ...@@ -70,6 +73,22 @@ class PtyTest(unittest.TestCase):
self.assertTrue(os.isatty(slave_fd), 'slave_fd is not a tty') 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") debug("Writing to slave_fd")
os.write(slave_fd, TEST_STRING_1) os.write(slave_fd, TEST_STRING_1)
s1 = os.read(master_fd, 1024) s1 = os.read(master_fd, 1024)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment