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