blob: 13f8f9eed66db6c0f93398ced840e9d54dea988a [file] [log] [blame]
Neal Norwitze241ce82003-02-17 18:17:05 +00001"Test posix functions"
2
Walter Dörwald21d3a322003-05-01 17:45:56 +00003from test import test_support
Neal Norwitze241ce82003-02-17 18:17:05 +00004
5try:
6 import posix
7except ImportError:
Collin Winter3add4d72007-08-29 23:37:32 +00008 raise test_support.TestSkipped("posix is not available")
Neal Norwitze241ce82003-02-17 18:17:05 +00009
10import time
11import os
Neal Norwitze241ce82003-02-17 18:17:05 +000012import unittest
13import warnings
14warnings.filterwarnings('ignore', '.* potential security risk .*',
15 RuntimeWarning)
16
17class PosixTester(unittest.TestCase):
18
19 def setUp(self):
20 # create empty file
Walter Dörwald21d3a322003-05-01 17:45:56 +000021 fp = open(test_support.TESTFN, 'w+')
Neal Norwitze241ce82003-02-17 18:17:05 +000022 fp.close()
23
24 def tearDown(self):
Walter Dörwald21d3a322003-05-01 17:45:56 +000025 os.unlink(test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +000026
27 def testNoArgFunctions(self):
28 # test posix functions which take no arguments and have
29 # no side-effects which we need to cleanup (e.g., fork, wait, abort)
30 NO_ARG_FUNCTIONS = [ "ctermid", "getcwd", "getcwdu", "uname",
Guido van Rossum687b9c02007-10-25 23:18:51 +000031 "times", "getloadavg",
Neal Norwitze241ce82003-02-17 18:17:05 +000032 "getegid", "geteuid", "getgid", "getgroups",
33 "getpid", "getpgrp", "getppid", "getuid",
34 ]
Neal Norwitz71b13e82003-02-23 22:12:24 +000035
Neal Norwitze241ce82003-02-17 18:17:05 +000036 for name in NO_ARG_FUNCTIONS:
37 posix_func = getattr(posix, name, None)
38 if posix_func is not None:
39 posix_func()
Neal Norwitz2ff51a82003-02-17 22:40:31 +000040 self.assertRaises(TypeError, posix_func, 1)
Neal Norwitze241ce82003-02-17 18:17:05 +000041
42 def test_statvfs(self):
43 if hasattr(posix, 'statvfs'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +000044 self.assert_(posix.statvfs(os.curdir))
Neal Norwitze241ce82003-02-17 18:17:05 +000045
46 def test_fstatvfs(self):
47 if hasattr(posix, 'fstatvfs'):
Walter Dörwald21d3a322003-05-01 17:45:56 +000048 fp = open(test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +000049 try:
Neal Norwitz2ff51a82003-02-17 22:40:31 +000050 self.assert_(posix.fstatvfs(fp.fileno()))
Neal Norwitze241ce82003-02-17 18:17:05 +000051 finally:
52 fp.close()
53
54 def test_ftruncate(self):
55 if hasattr(posix, 'ftruncate'):
Walter Dörwald21d3a322003-05-01 17:45:56 +000056 fp = open(test_support.TESTFN, 'w+')
Neal Norwitze241ce82003-02-17 18:17:05 +000057 try:
58 # we need to have some data to truncate
59 fp.write('test')
60 fp.flush()
61 posix.ftruncate(fp.fileno(), 0)
62 finally:
63 fp.close()
64
65 def test_dup(self):
66 if hasattr(posix, 'dup'):
Walter Dörwald21d3a322003-05-01 17:45:56 +000067 fp = open(test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +000068 try:
69 fd = posix.dup(fp.fileno())
Neal Norwitz2ff51a82003-02-17 22:40:31 +000070 self.assert_(isinstance(fd, int))
Neal Norwitze241ce82003-02-17 18:17:05 +000071 os.close(fd)
72 finally:
73 fp.close()
74
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000075 def test_confstr(self):
76 if hasattr(posix, 'confstr'):
77 self.assertRaises(ValueError, posix.confstr, "CS_garbage")
78 self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True)
79
Neal Norwitze241ce82003-02-17 18:17:05 +000080 def test_dup2(self):
81 if hasattr(posix, 'dup2'):
Walter Dörwald21d3a322003-05-01 17:45:56 +000082 fp1 = open(test_support.TESTFN)
83 fp2 = open(test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +000084 try:
85 posix.dup2(fp1.fileno(), fp2.fileno())
86 finally:
87 fp1.close()
88 fp2.close()
89
90 def fdopen_helper(self, *args):
Walter Dörwald21d3a322003-05-01 17:45:56 +000091 fd = os.open(test_support.TESTFN, os.O_RDONLY)
Neal Norwitze241ce82003-02-17 18:17:05 +000092 fp2 = posix.fdopen(fd, *args)
93 fp2.close()
94
95 def test_fdopen(self):
96 if hasattr(posix, 'fdopen'):
97 self.fdopen_helper()
98 self.fdopen_helper('r')
99 self.fdopen_helper('r', 100)
100
Skip Montanaro98470002005-06-17 01:14:49 +0000101 def test_osexlock(self):
102 if hasattr(posix, "O_EXLOCK"):
103 fd = os.open(test_support.TESTFN,
104 os.O_WRONLY|os.O_EXLOCK|os.O_CREAT)
105 self.assertRaises(OSError, os.open, test_support.TESTFN,
106 os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
107 os.close(fd)
108
109 if hasattr(posix, "O_SHLOCK"):
110 fd = os.open(test_support.TESTFN,
111 os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
112 self.assertRaises(OSError, os.open, test_support.TESTFN,
113 os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
114 os.close(fd)
115
116 def test_osshlock(self):
117 if hasattr(posix, "O_SHLOCK"):
118 fd1 = os.open(test_support.TESTFN,
119 os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
120 fd2 = os.open(test_support.TESTFN,
121 os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
122 os.close(fd2)
123 os.close(fd1)
124
125 if hasattr(posix, "O_EXLOCK"):
126 fd = os.open(test_support.TESTFN,
127 os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
128 self.assertRaises(OSError, os.open, test_support.TESTFN,
129 os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK)
130 os.close(fd)
131
Neal Norwitze241ce82003-02-17 18:17:05 +0000132 def test_fstat(self):
133 if hasattr(posix, 'fstat'):
Walter Dörwald21d3a322003-05-01 17:45:56 +0000134 fp = open(test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +0000135 try:
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000136 self.assert_(posix.fstat(fp.fileno()))
Neal Norwitze241ce82003-02-17 18:17:05 +0000137 finally:
138 fp.close()
139
140 def test_stat(self):
141 if hasattr(posix, 'stat'):
Walter Dörwald21d3a322003-05-01 17:45:56 +0000142 self.assert_(posix.stat(test_support.TESTFN))
Neal Norwitze241ce82003-02-17 18:17:05 +0000143
144 def test_chdir(self):
145 if hasattr(posix, 'chdir'):
146 posix.chdir(os.curdir)
Walter Dörwald21d3a322003-05-01 17:45:56 +0000147 self.assertRaises(OSError, posix.chdir, test_support.TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +0000148
149 def test_lsdir(self):
150 if hasattr(posix, 'lsdir'):
Walter Dörwald21d3a322003-05-01 17:45:56 +0000151 self.assert_(test_support.TESTFN in posix.lsdir(os.curdir))
Neal Norwitze241ce82003-02-17 18:17:05 +0000152
153 def test_access(self):
154 if hasattr(posix, 'access'):
Walter Dörwald21d3a322003-05-01 17:45:56 +0000155 self.assert_(posix.access(test_support.TESTFN, os.R_OK))
Neal Norwitze241ce82003-02-17 18:17:05 +0000156
157 def test_umask(self):
158 if hasattr(posix, 'umask'):
159 old_mask = posix.umask(0)
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000160 self.assert_(isinstance(old_mask, int))
Neal Norwitze241ce82003-02-17 18:17:05 +0000161 posix.umask(old_mask)
162
163 def test_strerror(self):
164 if hasattr(posix, 'strerror'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000165 self.assert_(posix.strerror(0))
Neal Norwitze241ce82003-02-17 18:17:05 +0000166
167 def test_pipe(self):
168 if hasattr(posix, 'pipe'):
169 reader, writer = posix.pipe()
170 os.close(reader)
171 os.close(writer)
172
Neal Norwitze241ce82003-02-17 18:17:05 +0000173 def test_utime(self):
174 if hasattr(posix, 'utime'):
175 now = time.time()
Walter Dörwald21d3a322003-05-01 17:45:56 +0000176 posix.utime(test_support.TESTFN, None)
Neal Norwitzc28e7ad2004-06-06 20:27:05 +0000177 self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, None))
178 self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (now, None))
179 self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, now))
180 posix.utime(test_support.TESTFN, (int(now), int(now)))
Walter Dörwald21d3a322003-05-01 17:45:56 +0000181 posix.utime(test_support.TESTFN, (now, now))
Neal Norwitze241ce82003-02-17 18:17:05 +0000182
Thomas Wouterscf297e42007-02-23 15:07:44 +0000183 def test_chflags(self):
184 if hasattr(posix, 'chflags'):
185 st = os.stat(test_support.TESTFN)
186 if hasattr(st, 'st_flags'):
187 posix.chflags(test_support.TESTFN, st.st_flags)
188
189 def test_lchflags(self):
190 if hasattr(posix, 'lchflags'):
191 st = os.stat(test_support.TESTFN)
192 if hasattr(st, 'st_flags'):
193 posix.lchflags(test_support.TESTFN, st.st_flags)
194
Guido van Rossum98297ee2007-11-06 21:34:58 +0000195 def test_environ(self):
196 for k, v in posix.environ.items():
197 self.assertEqual(type(k), str)
198 self.assertEqual(type(v), str)
199
Neal Norwitze241ce82003-02-17 18:17:05 +0000200def test_main():
Walter Dörwald21d3a322003-05-01 17:45:56 +0000201 test_support.run_unittest(PosixTester)
Neal Norwitze241ce82003-02-17 18:17:05 +0000202
203if __name__ == '__main__':
204 test_main()