Changeset 391 for python/trunk/Lib/test/test_ioctl.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_ioctl.py
r2 r391 1 import array 1 2 import unittest 2 from test.test_support import TestSkipped, run_unittest3 from test.test_support import run_unittest, import_module, get_attribute 3 4 import os, struct 4 try: 5 import fcntl, termios 6 except ImportError: 7 raise TestSkipped("No fcntl or termios module") 8 if not hasattr(termios,'TIOCGPGRP'): 9 raise TestSkipped("termios module doesn't have TIOCGPGRP") 5 fcntl = import_module('fcntl') 6 termios = import_module('termios') 7 get_attribute(termios, 'TIOCGPGRP') #Can't run tests without this feature 10 8 11 9 try: 12 10 tty = open("/dev/tty", "r") 11 except IOError: 12 raise unittest.SkipTest("Unable to open /dev/tty") 13 else: 14 # Skip if another process is in foreground 15 r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ") 13 16 tty.close() 14 except IOError: 15 raise TestSkipped("Unable to open /dev/tty") 17 rpgrp = struct.unpack("i", r)[0] 18 if rpgrp not in (os.getpgrp(), os.getsid(0)): 19 raise unittest.SkipTest("Neither the process group nor the session " 20 "are attached to /dev/tty") 21 del tty, r, rpgrp 16 22 17 23 try: … … 28 34 r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ") 29 35 rpgrp = struct.unpack("i", r)[0] 30 self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) 36 self.assertIn(rpgrp, ids) 37 38 def _check_ioctl_mutate_len(self, nbytes=None): 39 buf = array.array('i') 40 intsize = buf.itemsize 41 ids = (os.getpgrp(), os.getsid(0)) 42 # A fill value unlikely to be in `ids` 43 fill = -12345 44 if nbytes is not None: 45 # Extend the buffer so that it is exactly `nbytes` bytes long 46 buf.extend([fill] * (nbytes // intsize)) 47 self.assertEqual(len(buf) * intsize, nbytes) # sanity check 48 else: 49 buf.append(fill) 50 with open("/dev/tty", "r") as tty: 51 r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1) 52 rpgrp = buf[0] 53 self.assertEqual(r, 0) 54 self.assertIn(rpgrp, ids) 31 55 32 56 def test_ioctl_mutate(self): 33 import array 34 buf = array.array('i', [0]) 35 ids = (os.getpgrp(), os.getsid(0)) 36 tty = open("/dev/tty", "r") 37 r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1) 38 rpgrp = buf[0] 39 self.assertEquals(r, 0) 40 self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) 57 self._check_ioctl_mutate_len() 58 59 def test_ioctl_mutate_1024(self): 60 # Issue #9758: a mutable buffer of exactly 1024 bytes wouldn't be 61 # copied back after the system call. 62 self._check_ioctl_mutate_len(1024) 63 64 def test_ioctl_mutate_2048(self): 65 # Test with a larger buffer, just for the record. 66 self._check_ioctl_mutate_len(2048) 41 67 42 68 def test_ioctl_signed_unsigned_code_param(self): 43 69 if not pty: 44 raise TestSkipped('pty module required')70 raise unittest.SkipTest('pty module required') 45 71 mfd, sfd = pty.openpty() 46 72 try:
Note:
See TracChangeset
for help on using the changeset viewer.