[Python-checkins] r54995 - python/trunk/Lib/test/test_pty.py

neal.norwitz python-checkins at python.org
Fri Apr 27 08:45:37 CEST 2007


Author: neal.norwitz
Date: Fri Apr 27 08:45:32 2007
New Revision: 54995

Modified:
   python/trunk/Lib/test/test_pty.py
Log:
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.


Modified: python/trunk/Lib/test/test_pty.py
==============================================================================
--- python/trunk/Lib/test/test_pty.py	(original)
+++ python/trunk/Lib/test/test_pty.py	Fri Apr 27 08:45:32 2007
@@ -1,3 +1,5 @@
+import errno
+import fcntl
 import pty
 import os
 import sys
@@ -40,6 +42,7 @@
 
 # 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 @@
 
         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)


More information about the Python-checkins mailing list