44import sys
55import threading
66import unittest
7- from test . support import get_attribute
7+ from test import support
88from test .support import threading_helper
99from test .support .import_helper import import_module
1010fcntl = import_module ('fcntl' )
1313class IoctlTestsTty (unittest .TestCase ):
1414 @classmethod
1515 def setUpClass (cls ):
16- TIOCGPGRP = get_attribute (termios , 'TIOCGPGRP' )
16+ TIOCGPGRP = support . get_attribute (termios , 'TIOCGPGRP' )
1717 try :
1818 tty = open ("/dev/tty" , "rb" )
1919 except OSError :
@@ -143,7 +143,9 @@ def setUp(self):
143143 def test_ioctl_clear_input_or_output (self ):
144144 wfd = self .slave_fd
145145 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' )
147149
148150 os .write (wfd , b'abcdef' )
149151 self .assertEqual (os .read (rfd , 2 ), b'ab' )
@@ -163,7 +165,8 @@ def test_ioctl_clear_input_or_output(self):
163165 os .write (wfd , b'ABCDEF' )
164166 self .assertEqual (os .read (rfd , 1024 ), b'ABCDEF' )
165167
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' )
167170 @unittest .skipUnless (hasattr (termios , 'TCXONC' ), 'requires termios.TCXONC' )
168171 def test_ioctl_suspend_and_resume_output (self ):
169172 wfd = self .slave_fd
@@ -173,20 +176,22 @@ def test_ioctl_suspend_and_resume_output(self):
173176
174177 def writer ():
175178 os .write (wfd , b'abc' )
176- write_suspended .wait ()
179+ self . assertTrue ( write_suspended .wait (support . SHORT_TIMEOUT ) )
177180 os .write (wfd , b'def' )
178181 write_finished .set ()
179182
180183 with threading_helper .start_threads ([threading .Thread (target = writer )]):
181184 self .assertEqual (os .read (rfd , 3 ), b'abc' )
182185 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 ()
185190 self .assertFalse (write_finished .wait (0.5 ),
186191 'output was not suspended' )
187192 finally :
188193 fcntl .ioctl (wfd , termios .TCXONC , termios .TCOON )
189- self .assertTrue (write_finished .wait (0.5 ),
194+ self .assertTrue (write_finished .wait (support . SHORT_TIMEOUT ),
190195 'output was not resumed' )
191196 self .assertEqual (os .read (rfd , 1024 ), b'def' )
192197
0 commit comments