@@ -91,7 +91,6 @@ def _set_term_winsz(fd, winsz):
91
91
92
92
# Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
93
93
# because pty code is not too portable.
94
- # XXX(nnorwitz): these tests leak fds when there is an error.
95
94
class PtyTest (unittest .TestCase ):
96
95
def setUp (self ):
97
96
old_alarm = signal .signal (signal .SIGALRM , self .handle_sig )
@@ -176,6 +175,12 @@ def test_openpty(self):
176
175
# " An optional feature could not be imported " ... ?
177
176
raise unittest .SkipTest ("Pseudo-terminals (seemingly) not functional." )
178
177
178
+ # closing master_fd can raise a SIGHUP if the process is
179
+ # the session leader: we installed a SIGHUP signal handler
180
+ # to ignore this signal.
181
+ self .addCleanup (os .close , master_fd )
182
+ self .addCleanup (os .close , slave_fd )
183
+
179
184
self .assertTrue (os .isatty (slave_fd ), "slave_fd is not a tty" )
180
185
181
186
if mode :
@@ -218,15 +223,10 @@ def test_openpty(self):
218
223
s2 = _readline (master_fd )
219
224
self .assertEqual (b'For my pet fish, Eric.\n ' , normalize_output (s2 ))
220
225
221
- os .close (slave_fd )
222
- # closing master_fd can raise a SIGHUP if the process is
223
- # the session leader: we installed a SIGHUP signal handler
224
- # to ignore this signal.
225
- os .close (master_fd )
226
-
227
226
def test_fork (self ):
228
227
debug ("calling pty.fork()" )
229
228
pid , master_fd = pty .fork ()
229
+ self .addCleanup (os .close , master_fd )
230
230
if pid == pty .CHILD :
231
231
# stdout should be connected to a tty.
232
232
if not os .isatty (1 ):
@@ -305,13 +305,14 @@ def test_fork(self):
305
305
##else:
306
306
## raise TestFailed("Read from master_fd did not raise exception")
307
307
308
- os .close (master_fd )
309
-
310
308
def test_master_read (self ):
309
+ # XXX(nnorwitz): this test leaks fds when there is an error.
311
310
debug ("Calling pty.openpty()" )
312
311
master_fd , slave_fd = pty .openpty ()
313
312
debug (f"Got master_fd '{ master_fd } ', slave_fd '{ slave_fd } '" )
314
313
314
+ self .addCleanup (os .close , master_fd )
315
+
315
316
debug ("Closing slave_fd" )
316
317
os .close (slave_fd )
317
318
@@ -321,7 +322,6 @@ def test_master_read(self):
321
322
except OSError : # Linux
322
323
data = b""
323
324
324
- os .close (master_fd )
325
325
self .assertEqual (data , b"" )
326
326
327
327
class SmallPtyTests (unittest .TestCase ):
0 commit comments