annotate Lib/test/test_fcntl.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 7641a3f0b2ec
children 3428acd31e45
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4755
1de96c572b02 Added a test script for the fcntl C module.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
diff changeset
1 """Test program for the fcntl C module.
45753
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
2
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
3 OS/2+EMX doesn't support the file locking operations.
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
4
4755
1de96c572b02 Added a test script for the fcntl C module.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
diff changeset
5 """
45939
cbad1f5cabb1 Prevent ioctl op codes from being sign extended from int to unsigned long
Gregory P. Smith <greg@mad-scientist.com>
parents: 45753
diff changeset
6 import os
cbad1f5cabb1 Prevent ioctl op codes from being sign extended from int to unsigned long
Gregory P. Smith <greg@mad-scientist.com>
parents: 45753
diff changeset
7 import struct
cbad1f5cabb1 Prevent ioctl op codes from being sign extended from int to unsigned long
Gregory P. Smith <greg@mad-scientist.com>
parents: 45753
diff changeset
8 import sys
45753
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
9 import unittest
52555
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
10 from test.test_support import (verbose, TESTFN, unlink, run_unittest,
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
11 import_module)
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
12
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
13 # Skip test if no fnctl module.
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
14 fcntl = import_module('fcntl')
7641a3f0b2ec A few more test skips via import_module, and change import_module to
R. David Murray <rdmurray@bitdance.com>
parents: 45950
diff changeset
15
23777
bec1b942e0bc Patch #488073: AtheOS port.
Martin v. Löwis <martin@v.loewis.de>
parents: 23435
diff changeset
16
45950
6a3ef3c9095c Attempt to fix the Solaris Sparc 10 buildbot. It was failing with an invalid
Gregory P. Smith <greg@mad-scientist.com>
parents: 45939
diff changeset
17 # TODO - Write tests for flock() and lockf().
17745
b16fc89c194f Update the tests for the fcntl module to check passing in file objects,
Fred Drake <fdrake@acm.org>
parents: 17419
diff changeset
18
45753
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
19 def get_lockdata():
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
20 if sys.platform.startswith('atheos'):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
21 start_len = "qq"
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
22 else:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
23 try:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
24 os.O_LARGEFILE
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
25 except AttributeError:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
26 start_len = "ll"
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
27 else:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
28 start_len = "qq"
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
29
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
30 if sys.platform in ('netbsd1', 'netbsd2', 'netbsd3',
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
31 'Darwin1.2', 'darwin',
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
32 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
33 'freebsd6', 'freebsd7', 'freebsd8',
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
34 'bsdos2', 'bsdos3', 'bsdos4',
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
35 'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
36 if struct.calcsize('l') == 8:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
37 off_t = 'l'
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
38 pid_t = 'i'
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
39 else:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
40 off_t = 'lxxxx'
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
41 pid_t = 'l'
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
42 lockdata = struct.pack(off_t + off_t + pid_t + 'hh', 0, 0, 0,
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
43 fcntl.F_WRLCK, 0)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
44 elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
45 lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
46 elif sys.platform in ['os2emx']:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
47 lockdata = None
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
48 else:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
49 lockdata = struct.pack('hh'+start_len+'hh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
50 if lockdata:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
51 if verbose:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
52 print 'struct.pack: ', repr(lockdata)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
53 return lockdata
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
54
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
55 lockdata = get_lockdata()
17745
b16fc89c194f Update the tests for the fcntl module to check passing in file objects,
Fred Drake <fdrake@acm.org>
parents: 17419
diff changeset
56
45753
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
57
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
58 class TestFcntl(unittest.TestCase):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
59
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
60 def setUp(self):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
61 self.f = None
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
62
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
63 def tearDown(self):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
64 if not self.f.closed:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
65 self.f.close()
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
66 unlink(TESTFN)
17745
b16fc89c194f Update the tests for the fcntl module to check passing in file objects,
Fred Drake <fdrake@acm.org>
parents: 17419
diff changeset
67
45753
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
68 def test_fcntl_fileno(self):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
69 # the example from the library docs
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
70 self.f = open(TESTFN, 'w')
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
71 rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
72 if verbose:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
73 print 'Status from fcntl with O_NONBLOCK: ', rv
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
74 if sys.platform not in ['os2emx']:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
75 rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETLKW, lockdata)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
76 if verbose:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
77 print 'String from fcntl with F_SETLKW: ', repr(rv)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
78 self.f.close()
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
79
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
80 def test_fcntl_file_descriptor(self):
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
81 # again, but pass the file rather than numeric descriptor
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
82 self.f = open(TESTFN, 'w')
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
83 rv = fcntl.fcntl(self.f, fcntl.F_SETFL, os.O_NONBLOCK)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
84 if sys.platform not in ['os2emx']:
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
85 rv = fcntl.fcntl(self.f, fcntl.F_SETLKW, lockdata)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
86 self.f.close()
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
87
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
88
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
89 def test_main():
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
90 run_unittest(TestFcntl)
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
91
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
92 if __name__ == '__main__':
d97bbad9a35e Convert test_fcntl to unittest.
Brett Cannon <bcannon@gmail.com>
parents: 43703
diff changeset
93 test_main()