https://github.com/python/cpython/commit/25186c2472f6f2ceecb00fcecbce52b924510ed7
commit: 25186c2472f6f2ceecb00fcecbce52b924510ed7
branch: main
author: Serhiy Storchaka <storch...@gmail.com>
committer: serhiy-storchaka <storch...@gmail.com>
date: 2025-04-28T21:41:09+03:00
summary:

gh-132742: Fix newly added tcflush() tests on Android (GH-133070)

files:
M Lib/test/test_ioctl.py
M Lib/test/test_termios.py

diff --git a/Lib/test/test_ioctl.py b/Lib/test/test_ioctl.py
index 9fd3b6196b81c2..7a986048bdac2a 100644
--- a/Lib/test/test_ioctl.py
+++ b/Lib/test/test_ioctl.py
@@ -4,7 +4,7 @@
 import sys
 import threading
 import unittest
-from test.support import get_attribute
+from test import support
 from test.support import threading_helper
 from test.support.import_helper import import_module
 fcntl = import_module('fcntl')
@@ -13,7 +13,7 @@
 class IoctlTestsTty(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
-        TIOCGPGRP = get_attribute(termios, 'TIOCGPGRP')
+        TIOCGPGRP = support.get_attribute(termios, 'TIOCGPGRP')
         try:
             tty = open("/dev/tty", "rb")
         except OSError:
@@ -143,7 +143,9 @@ def setUp(self):
     def test_ioctl_clear_input_or_output(self):
         wfd = self.slave_fd
         rfd = self.master_fd
-        inbuf = sys.platform == 'linux'
+        # The data is buffered in the input buffer on Linux, and in
+        # the output buffer on other platforms.
+        inbuf = sys.platform in ('linux', 'android')
 
         os.write(wfd, b'abcdef')
         self.assertEqual(os.read(rfd, 2), b'ab')
@@ -163,7 +165,8 @@ def test_ioctl_clear_input_or_output(self):
         os.write(wfd, b'ABCDEF')
         self.assertEqual(os.read(rfd, 1024), b'ABCDEF')
 
-    @unittest.skipUnless(sys.platform == 'linux', 'only works on Linux')
+    @support.skip_android_selinux('tcflow')
+    @unittest.skipUnless(sys.platform in ('linux', 'android'), 'only works on 
Linux')
     @unittest.skipUnless(hasattr(termios, 'TCXONC'), 'requires termios.TCXONC')
     def test_ioctl_suspend_and_resume_output(self):
         wfd = self.slave_fd
@@ -173,20 +176,22 @@ def test_ioctl_suspend_and_resume_output(self):
 
         def writer():
             os.write(wfd, b'abc')
-            write_suspended.wait()
+            self.assertTrue(write_suspended.wait(support.SHORT_TIMEOUT))
             os.write(wfd, b'def')
             write_finished.set()
 
         with threading_helper.start_threads([threading.Thread(target=writer)]):
             self.assertEqual(os.read(rfd, 3), b'abc')
             try:
-                fcntl.ioctl(wfd, termios.TCXONC, termios.TCOOFF)
-                write_suspended.set()
+                try:
+                    fcntl.ioctl(wfd, termios.TCXONC, termios.TCOOFF)
+                finally:
+                    write_suspended.set()
                 self.assertFalse(write_finished.wait(0.5),
                                  'output was not suspended')
             finally:
                 fcntl.ioctl(wfd, termios.TCXONC, termios.TCOON)
-            self.assertTrue(write_finished.wait(0.5),
+            self.assertTrue(write_finished.wait(support.SHORT_TIMEOUT),
                             'output was not resumed')
             self.assertEqual(os.read(rfd, 1024), b'def')
 
diff --git a/Lib/test/test_termios.py b/Lib/test/test_termios.py
index 18965f09a2569e..e5d11cf84d2a66 100644
--- a/Lib/test/test_termios.py
+++ b/Lib/test/test_termios.py
@@ -152,7 +152,9 @@ def test_tcflush_errors(self):
     def test_tcflush_clear_input_or_output(self):
         wfd = self.fd
         rfd = self.master_fd
-        inbuf = sys.platform == 'linux'
+        # The data is buffered in the input buffer on Linux, and in
+        # the output buffer on other platforms.
+        inbuf = sys.platform in ('linux', 'android')
 
         os.write(wfd, b'abcdef')
         self.assertEqual(os.read(rfd, 2), b'ab')
@@ -190,7 +192,8 @@ def test_tcflow_errors(self):
         self.assertRaises(TypeError, termios.tcflow, object(), termios.TCOON)
         self.assertRaises(TypeError, termios.tcflow, self.fd)
 
-    @unittest.skipUnless(sys.platform == 'linux', 'only works on Linux')
+    @support.skip_android_selinux('tcflow')
+    @unittest.skipUnless(sys.platform in ('linux', 'android'), 'only works on 
Linux')
     def test_tcflow_suspend_and_resume_output(self):
         wfd = self.fd
         rfd = self.master_fd
@@ -199,20 +202,22 @@ def test_tcflow_suspend_and_resume_output(self):
 
         def writer():
             os.write(wfd, b'abc')
-            write_suspended.wait()
+            self.assertTrue(write_suspended.wait(support.SHORT_TIMEOUT))
             os.write(wfd, b'def')
             write_finished.set()
 
         with threading_helper.start_threads([threading.Thread(target=writer)]):
             self.assertEqual(os.read(rfd, 3), b'abc')
             try:
-                termios.tcflow(wfd, termios.TCOOFF)
-                write_suspended.set()
+                try:
+                    termios.tcflow(wfd, termios.TCOOFF)
+                finally:
+                    write_suspended.set()
                 self.assertFalse(write_finished.wait(0.5),
                                  'output was not suspended')
             finally:
                 termios.tcflow(wfd, termios.TCOON)
-            self.assertTrue(write_finished.wait(0.5),
+            self.assertTrue(write_finished.wait(support.SHORT_TIMEOUT),
                             'output was not resumed')
             self.assertEqual(os.read(rfd, 1024), b'def')
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to