4
4
import sys
5
5
import threading
6
6
import unittest
7
- from test . support import get_attribute
7
+ from test import support
8
8
from test .support import threading_helper
9
9
from test .support .import_helper import import_module
10
10
fcntl = import_module ('fcntl' )
13
13
class IoctlTestsTty (unittest .TestCase ):
14
14
@classmethod
15
15
def setUpClass (cls ):
16
- TIOCGPGRP = get_attribute (termios , 'TIOCGPGRP' )
16
+ TIOCGPGRP = support . get_attribute (termios , 'TIOCGPGRP' )
17
17
try :
18
18
tty = open ("/dev/tty" , "rb" )
19
19
except OSError :
@@ -143,7 +143,9 @@ def setUp(self):
143
143
def test_ioctl_clear_input_or_output (self ):
144
144
wfd = self .slave_fd
145
145
rfd = self .master_fd
146
- inbuf = sys .platform == 'linux'
146
+ # The data is buffered in the input buffer on Linux, and in
147
+ # the output buffer on other platforms.
148
+ inbuf = sys .platform in ('linux' , 'android' )
147
149
148
150
os .write (wfd , b'abcdef' )
149
151
self .assertEqual (os .read (rfd , 2 ), b'ab' )
@@ -163,7 +165,8 @@ def test_ioctl_clear_input_or_output(self):
163
165
os .write (wfd , b'ABCDEF' )
164
166
self .assertEqual (os .read (rfd , 1024 ), b'ABCDEF' )
165
167
166
- @unittest .skipUnless (sys .platform == 'linux' , 'only works on Linux' )
168
+ @support .skip_android_selinux ('tcflow' )
169
+ @unittest .skipUnless (sys .platform in ('linux' , 'android' ), 'only works on Linux' )
167
170
@unittest .skipUnless (hasattr (termios , 'TCXONC' ), 'requires termios.TCXONC' )
168
171
def test_ioctl_suspend_and_resume_output (self ):
169
172
wfd = self .slave_fd
@@ -173,20 +176,22 @@ def test_ioctl_suspend_and_resume_output(self):
173
176
174
177
def writer ():
175
178
os .write (wfd , b'abc' )
176
- write_suspended .wait ()
179
+ self . assertTrue ( write_suspended .wait (support . SHORT_TIMEOUT ) )
177
180
os .write (wfd , b'def' )
178
181
write_finished .set ()
179
182
180
183
with threading_helper .start_threads ([threading .Thread (target = writer )]):
181
184
self .assertEqual (os .read (rfd , 3 ), b'abc' )
182
185
try :
183
- fcntl .ioctl (wfd , termios .TCXONC , termios .TCOOFF )
184
- write_suspended .set ()
186
+ try :
187
+ fcntl .ioctl (wfd , termios .TCXONC , termios .TCOOFF )
188
+ finally :
189
+ write_suspended .set ()
185
190
self .assertFalse (write_finished .wait (0.5 ),
186
191
'output was not suspended' )
187
192
finally :
188
193
fcntl .ioctl (wfd , termios .TCXONC , termios .TCOON )
189
- self .assertTrue (write_finished .wait (0.5 ),
194
+ self .assertTrue (write_finished .wait (support . SHORT_TIMEOUT ),
190
195
'output was not resumed' )
191
196
self .assertEqual (os .read (rfd , 1024 ), b'def' )
192
197
0 commit comments