blob: feb033d54db531d9542fd42d7588a4f859e0e201 [file] [log] [blame]
Neal Norwitze241ce82003-02-17 18:17:05 +00001"Test posix functions"
2
Tim Peters003eb302003-02-17 21:48:48 +00003from test.test_support import TestSkipped, TestFailed, TESTFN, run_suite
Neal Norwitze241ce82003-02-17 18:17:05 +00004
5try:
6 import posix
7except ImportError:
8 raise TestSkipped, "posix is not available"
9
10import time
11import os
12import sys
13import unittest
14import warnings
15warnings.filterwarnings('ignore', '.* potential security risk .*',
16 RuntimeWarning)
17
18class PosixTester(unittest.TestCase):
19
20 def setUp(self):
21 # create empty file
22 fp = open(TESTFN, 'w+')
23 fp.close()
24
25 def tearDown(self):
26 os.unlink(TESTFN)
27
28 def testNoArgFunctions(self):
29 # test posix functions which take no arguments and have
30 # no side-effects which we need to cleanup (e.g., fork, wait, abort)
31 NO_ARG_FUNCTIONS = [ "ctermid", "getcwd", "getcwdu", "uname",
Neal Norwitz71b13e82003-02-23 22:12:24 +000032 "times", "getloadavg", "tmpnam",
Neal Norwitze241ce82003-02-17 18:17:05 +000033 "getegid", "geteuid", "getgid", "getgroups",
34 "getpid", "getpgrp", "getppid", "getuid",
35 ]
Neal Norwitz71b13e82003-02-23 22:12:24 +000036 # getlogin() only works when run from a tty (terminal)
37 try:
38 if os.isatty(sys.stdin.fileno()):
39 NO_ARG_FUNCTIONS.append("getlogin")
40 except:
41 pass
42
Neal Norwitze241ce82003-02-17 18:17:05 +000043 for name in NO_ARG_FUNCTIONS:
44 posix_func = getattr(posix, name, None)
45 if posix_func is not None:
46 posix_func()
Neal Norwitz2ff51a82003-02-17 22:40:31 +000047 self.assertRaises(TypeError, posix_func, 1)
Neal Norwitze241ce82003-02-17 18:17:05 +000048
49 def test_statvfs(self):
50 if hasattr(posix, 'statvfs'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +000051 self.assert_(posix.statvfs(os.curdir))
Neal Norwitze241ce82003-02-17 18:17:05 +000052
53 def test_fstatvfs(self):
54 if hasattr(posix, 'fstatvfs'):
55 fp = open(TESTFN)
56 try:
Neal Norwitz2ff51a82003-02-17 22:40:31 +000057 self.assert_(posix.fstatvfs(fp.fileno()))
Neal Norwitze241ce82003-02-17 18:17:05 +000058 finally:
59 fp.close()
60
61 def test_ftruncate(self):
62 if hasattr(posix, 'ftruncate'):
63 fp = open(TESTFN, 'w+')
64 try:
65 # we need to have some data to truncate
66 fp.write('test')
67 fp.flush()
68 posix.ftruncate(fp.fileno(), 0)
69 finally:
70 fp.close()
71
72 def test_dup(self):
73 if hasattr(posix, 'dup'):
74 fp = open(TESTFN)
75 try:
76 fd = posix.dup(fp.fileno())
Neal Norwitz2ff51a82003-02-17 22:40:31 +000077 self.assert_(isinstance(fd, int))
Neal Norwitze241ce82003-02-17 18:17:05 +000078 os.close(fd)
79 finally:
80 fp.close()
81
82 def test_dup2(self):
83 if hasattr(posix, 'dup2'):
84 fp1 = open(TESTFN)
85 fp2 = open(TESTFN)
86 try:
87 posix.dup2(fp1.fileno(), fp2.fileno())
88 finally:
89 fp1.close()
90 fp2.close()
91
92 def fdopen_helper(self, *args):
93 fd = os.open(TESTFN, os.O_RDONLY)
94 fp2 = posix.fdopen(fd, *args)
95 fp2.close()
96
97 def test_fdopen(self):
98 if hasattr(posix, 'fdopen'):
99 self.fdopen_helper()
100 self.fdopen_helper('r')
101 self.fdopen_helper('r', 100)
102
103 def test_fstat(self):
104 if hasattr(posix, 'fstat'):
105 fp = open(TESTFN)
106 try:
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000107 self.assert_(posix.fstat(fp.fileno()))
Neal Norwitze241ce82003-02-17 18:17:05 +0000108 finally:
109 fp.close()
110
111 def test_stat(self):
112 if hasattr(posix, 'stat'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000113 self.assert_(posix.stat(TESTFN))
Neal Norwitze241ce82003-02-17 18:17:05 +0000114
115 def test_chdir(self):
116 if hasattr(posix, 'chdir'):
117 posix.chdir(os.curdir)
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000118 self.assertRaises(OSError, posix.chdir, TESTFN)
Neal Norwitze241ce82003-02-17 18:17:05 +0000119
120 def test_lsdir(self):
121 if hasattr(posix, 'lsdir'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000122 self.assert_(TESTFN in posix.lsdir(os.curdir))
Neal Norwitze241ce82003-02-17 18:17:05 +0000123
124 def test_access(self):
125 if hasattr(posix, 'access'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000126 self.assert_(posix.access(TESTFN, os.R_OK))
Neal Norwitze241ce82003-02-17 18:17:05 +0000127
128 def test_umask(self):
129 if hasattr(posix, 'umask'):
130 old_mask = posix.umask(0)
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000131 self.assert_(isinstance(old_mask, int))
Neal Norwitze241ce82003-02-17 18:17:05 +0000132 posix.umask(old_mask)
133
134 def test_strerror(self):
135 if hasattr(posix, 'strerror'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000136 self.assert_(posix.strerror(0))
Neal Norwitze241ce82003-02-17 18:17:05 +0000137
138 def test_pipe(self):
139 if hasattr(posix, 'pipe'):
140 reader, writer = posix.pipe()
141 os.close(reader)
142 os.close(writer)
143
144 def test_tempnam(self):
145 if hasattr(posix, 'tempnam'):
Neal Norwitz2ff51a82003-02-17 22:40:31 +0000146 self.assert_(posix.tempnam())
147 self.assert_(posix.tempnam(os.curdir))
148 self.assert_(posix.tempnam(os.curdir, 'blah'))
Neal Norwitze241ce82003-02-17 18:17:05 +0000149
150 def test_tmpfile(self):
151 if hasattr(posix, 'tmpfile'):
152 fp = posix.tmpfile()
153 fp.close()
154
155 def test_utime(self):
156 if hasattr(posix, 'utime'):
157 now = time.time()
158 posix.utime(TESTFN, None)
159 posix.utime(TESTFN, (now, now))
160
161def test_main():
162 suite = unittest.TestSuite()
163 suite.addTest(unittest.makeSuite(PosixTester))
164 run_suite(suite)
165
166if __name__ == '__main__':
167 test_main()