Index: Lib/test/test_multiprocessing.py =================================================================== --- Lib/test/test_multiprocessing.py (révision 65132) +++ Lib/test/test_multiprocessing.py (copie de travail) @@ -54,6 +54,9 @@ HAVE_GETVALUE = not getattr(_multiprocessing, 'HAVE_BROKEN_SEM_GETVALUE', False) +# Any existing and readable file name +EXISTING_FILE = "/etc/issue" + # # Creates a wrapper for a function which records the time it takes to finish # @@ -1737,6 +1740,29 @@ testcases_threads = create_test_cases(ThreadsMixin, type='threads') globals().update(testcases_threads) +class TestClosedFile(unittest.TestCase): + def test_open(self): + # Create a file descriptor and directly close it + tmpfile = open(EXISTING_FILE) + fd = tmpfile.fileno() + tmpfile.close() + self.assertRaises(IOError, _multiprocessing.Connection, fd) + + def test_operations(self): + # Create a dummy file descriptor + fd, unused_fd = os.pipe() + os.close(unused_fd) + try: + conn = _multiprocessing.Connection(fd) + conn.close() + fd = None + self.assertRaises(IOError, conn.send, "test") + self.assertRaises(IOError, conn.recv) + self.assertRaises(IOError, conn.poll) + finally: + if fd is not None: + os.close(fd) + # # # @@ -1765,7 +1791,8 @@ testcases = ( sorted(testcases_processes.values(), key=lambda tc:tc.__name__) + sorted(testcases_threads.values(), key=lambda tc:tc.__name__) + - sorted(testcases_manager.values(), key=lambda tc:tc.__name__) + sorted(testcases_manager.values(), key=lambda tc:tc.__name__) + + [TestClosedFile] ) loadTestsFromTestCase = unittest.defaultTestLoader.loadTestsFromTestCase