From 4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2 Mon Sep 17 00:00:00 2001 From: darylm503 Date: Mon, 16 Apr 2012 22:12:42 +0000 Subject: AppPkg/Applications/Python: Add Python 2.7.2 sources since the release of Python 2.7.3 made them unavailable from the python.org web site. These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Python/Python-2.7.2/Lib/test/test_ioctl.py | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_ioctl.py (limited to 'AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_ioctl.py') diff --git a/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_ioctl.py b/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_ioctl.py new file mode 100644 index 0000000000..914cd313be --- /dev/null +++ b/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_ioctl.py @@ -0,0 +1,93 @@ +import array +import unittest +from test.test_support import run_unittest, import_module, get_attribute +import os, struct +fcntl = import_module('fcntl') +termios = import_module('termios') +get_attribute(termios, 'TIOCGPGRP') #Can't run tests without this feature + +try: + tty = open("/dev/tty", "r") +except IOError: + raise unittest.SkipTest("Unable to open /dev/tty") +else: + # Skip if another process is in foreground + r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ") + tty.close() + rpgrp = struct.unpack("i", r)[0] + if rpgrp not in (os.getpgrp(), os.getsid(0)): + raise unittest.SkipTest("Neither the process group nor the session " + "are attached to /dev/tty") + del tty, r, rpgrp + +try: + import pty +except ImportError: + pty = None + +class IoctlTests(unittest.TestCase): + def test_ioctl(self): + # If this process has been put into the background, TIOCGPGRP returns + # the session ID instead of the process group id. + ids = (os.getpgrp(), os.getsid(0)) + tty = open("/dev/tty", "r") + r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ") + rpgrp = struct.unpack("i", r)[0] + self.assertIn(rpgrp, ids) + + def _check_ioctl_mutate_len(self, nbytes=None): + buf = array.array('i') + intsize = buf.itemsize + ids = (os.getpgrp(), os.getsid(0)) + # A fill value unlikely to be in `ids` + fill = -12345 + if nbytes is not None: + # Extend the buffer so that it is exactly `nbytes` bytes long + buf.extend([fill] * (nbytes // intsize)) + self.assertEqual(len(buf) * intsize, nbytes) # sanity check + else: + buf.append(fill) + with open("/dev/tty", "r") as tty: + r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1) + rpgrp = buf[0] + self.assertEqual(r, 0) + self.assertIn(rpgrp, ids) + + def test_ioctl_mutate(self): + self._check_ioctl_mutate_len() + + def test_ioctl_mutate_1024(self): + # Issue #9758: a mutable buffer of exactly 1024 bytes wouldn't be + # copied back after the system call. + self._check_ioctl_mutate_len(1024) + + def test_ioctl_mutate_2048(self): + # Test with a larger buffer, just for the record. + self._check_ioctl_mutate_len(2048) + + def test_ioctl_signed_unsigned_code_param(self): + if not pty: + raise unittest.SkipTest('pty module required') + mfd, sfd = pty.openpty() + try: + if termios.TIOCSWINSZ < 0: + set_winsz_opcode_maybe_neg = termios.TIOCSWINSZ + set_winsz_opcode_pos = termios.TIOCSWINSZ & 0xffffffffL + else: + set_winsz_opcode_pos = termios.TIOCSWINSZ + set_winsz_opcode_maybe_neg, = struct.unpack("i", + struct.pack("I", termios.TIOCSWINSZ)) + + our_winsz = struct.pack("HHHH",80,25,0,0) + # test both with a positive and potentially negative ioctl code + new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_pos, our_winsz) + new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_maybe_neg, our_winsz) + finally: + os.close(mfd) + os.close(sfd) + +def test_main(): + run_unittest(IoctlTests) + +if __name__ == "__main__": + test_main() -- cgit v1.2.3