| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | "Test posix functions" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  | from test import test_support | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 13:06:04 +00:00
										 |  |  | # Skip these tests if there is no posix module. | 
					
						
							|  |  |  | posix = test_support.import_module('posix') | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-02 20:37:54 +00:00
										 |  |  | import errno | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | import time | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2008-03-18 19:05:32 +00:00
										 |  |  | import pwd | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  | import shutil | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | import warnings | 
					
						
							| 
									
										
										
										
											2009-03-30 19:04:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | warnings.filterwarnings('ignore', '.* potential security risk .*', | 
					
						
							|  |  |  |                         RuntimeWarning) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PosixTester(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         # create empty file | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |         fp = open(test_support.TESTFN, 'w+') | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |         fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |         os.unlink(test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def testNoArgFunctions(self): | 
					
						
							|  |  |  |         # test posix functions which take no arguments and have | 
					
						
							|  |  |  |         # no side-effects which we need to cleanup (e.g., fork, wait, abort) | 
					
						
							|  |  |  |         NO_ARG_FUNCTIONS = [ "ctermid", "getcwd", "getcwdu", "uname", | 
					
						
							| 
									
										
										
										
											2003-02-23 22:12:24 +00:00
										 |  |  |                              "times", "getloadavg", "tmpnam", | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |                              "getegid", "geteuid", "getgid", "getgroups", | 
					
						
							|  |  |  |                              "getpid", "getpgrp", "getppid", "getuid", | 
					
						
							|  |  |  |                            ] | 
					
						
							| 
									
										
										
										
											2003-02-23 22:12:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |         for name in NO_ARG_FUNCTIONS: | 
					
						
							|  |  |  |             posix_func = getattr(posix, name, None) | 
					
						
							|  |  |  |             if posix_func is not None: | 
					
						
							|  |  |  |                 posix_func() | 
					
						
							| 
									
										
										
										
											2003-02-17 22:40:31 +00:00
										 |  |  |                 self.assertRaises(TypeError, posix_func, 1) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-27 13:56:01 +00:00
										 |  |  |     if hasattr(posix, 'getresuid'): | 
					
						
							|  |  |  |         def test_getresuid(self): | 
					
						
							|  |  |  |             user_ids = posix.getresuid() | 
					
						
							|  |  |  |             self.assertEqual(len(user_ids), 3) | 
					
						
							|  |  |  |             for val in user_ids: | 
					
						
							|  |  |  |                 self.assertGreaterEqual(val, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if hasattr(posix, 'getresgid'): | 
					
						
							|  |  |  |         def test_getresgid(self): | 
					
						
							|  |  |  |             group_ids = posix.getresgid() | 
					
						
							|  |  |  |             self.assertEqual(len(group_ids), 3) | 
					
						
							|  |  |  |             for val in group_ids: | 
					
						
							|  |  |  |                 self.assertGreaterEqual(val, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if hasattr(posix, 'setresuid'): | 
					
						
							|  |  |  |         def test_setresuid(self): | 
					
						
							|  |  |  |             current_user_ids = posix.getresuid() | 
					
						
							|  |  |  |             self.assertIsNone(posix.setresuid(*current_user_ids)) | 
					
						
							|  |  |  |             # -1 means don't change that value. | 
					
						
							|  |  |  |             self.assertIsNone(posix.setresuid(-1, -1, -1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_setresuid_exception(self): | 
					
						
							|  |  |  |             # Don't do this test if someone is silly enough to run us as root. | 
					
						
							|  |  |  |             current_user_ids = posix.getresuid() | 
					
						
							|  |  |  |             if 0 not in current_user_ids: | 
					
						
							|  |  |  |                 new_user_ids = (current_user_ids[0]+1, -1, -1) | 
					
						
							|  |  |  |                 self.assertRaises(OSError, posix.setresuid, *new_user_ids) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if hasattr(posix, 'setresgid'): | 
					
						
							|  |  |  |         def test_setresgid(self): | 
					
						
							|  |  |  |             current_group_ids = posix.getresgid() | 
					
						
							|  |  |  |             self.assertIsNone(posix.setresgid(*current_group_ids)) | 
					
						
							|  |  |  |             # -1 means don't change that value. | 
					
						
							|  |  |  |             self.assertIsNone(posix.setresgid(-1, -1, -1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_setresgid_exception(self): | 
					
						
							|  |  |  |             # Don't do this test if someone is silly enough to run us as root. | 
					
						
							|  |  |  |             current_group_ids = posix.getresgid() | 
					
						
							|  |  |  |             if 0 not in current_group_ids: | 
					
						
							|  |  |  |                 new_group_ids = (current_group_ids[0]+1, -1, -1) | 
					
						
							|  |  |  |                 self.assertRaises(OSError, posix.setresgid, *new_group_ids) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-02 20:37:54 +00:00
										 |  |  |     @unittest.skipUnless(hasattr(posix, 'initgroups'), | 
					
						
							|  |  |  |                          "test needs os.initgroups()") | 
					
						
							|  |  |  |     def test_initgroups(self): | 
					
						
							|  |  |  |         # It takes a string and an integer; check that it raises a TypeError | 
					
						
							|  |  |  |         # for other argument lists. | 
					
						
							|  |  |  |         self.assertRaises(TypeError, posix.initgroups) | 
					
						
							|  |  |  |         self.assertRaises(TypeError, posix.initgroups, None) | 
					
						
							|  |  |  |         self.assertRaises(TypeError, posix.initgroups, 3, "foo") | 
					
						
							|  |  |  |         self.assertRaises(TypeError, posix.initgroups, "foo", 3, object()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # If a non-privileged user invokes it, it should fail with OSError | 
					
						
							|  |  |  |         # EPERM. | 
					
						
							|  |  |  |         if os.getuid() != 0: | 
					
						
							|  |  |  |             name = pwd.getpwuid(posix.getuid()).pw_name | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 posix.initgroups(name, 13) | 
					
						
							|  |  |  |             except OSError as e: | 
					
						
							|  |  |  |                 self.assertEquals(e.errno, errno.EPERM) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 self.fail("Expected OSError to be raised by initgroups") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |     def test_statvfs(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'statvfs'): | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |             self.assertTrue(posix.statvfs(os.curdir)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_fstatvfs(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'fstatvfs'): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             fp = open(test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |                 self.assertTrue(posix.fstatvfs(fp.fileno())) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             finally: | 
					
						
							|  |  |  |                 fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_ftruncate(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'ftruncate'): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             fp = open(test_support.TESTFN, 'w+') | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 # we need to have some data to truncate | 
					
						
							|  |  |  |                 fp.write('test') | 
					
						
							|  |  |  |                 fp.flush() | 
					
						
							|  |  |  |                 posix.ftruncate(fp.fileno(), 0) | 
					
						
							|  |  |  |             finally: | 
					
						
							|  |  |  |                 fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_dup(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'dup'): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             fp = open(test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 fd = posix.dup(fp.fileno()) | 
					
						
							| 
									
										
										
										
											2010-01-24 16:58:36 +00:00
										 |  |  |                 self.assertIsInstance(fd, int) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |                 os.close(fd) | 
					
						
							|  |  |  |             finally: | 
					
						
							|  |  |  |                 fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-20 01:29:48 +00:00
										 |  |  |     def test_confstr(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'confstr'): | 
					
						
							|  |  |  |             self.assertRaises(ValueError, posix.confstr, "CS_garbage") | 
					
						
							|  |  |  |             self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |     def test_dup2(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'dup2'): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             fp1 = open(test_support.TESTFN) | 
					
						
							|  |  |  |             fp2 = open(test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 posix.dup2(fp1.fileno(), fp2.fileno()) | 
					
						
							|  |  |  |             finally: | 
					
						
							|  |  |  |                 fp1.close() | 
					
						
							|  |  |  |                 fp2.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def fdopen_helper(self, *args): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |         fd = os.open(test_support.TESTFN, os.O_RDONLY) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |         fp2 = posix.fdopen(fd, *args) | 
					
						
							|  |  |  |         fp2.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_fdopen(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'fdopen'): | 
					
						
							|  |  |  |             self.fdopen_helper() | 
					
						
							|  |  |  |             self.fdopen_helper('r') | 
					
						
							|  |  |  |             self.fdopen_helper('r', 100) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-17 01:14:49 +00:00
										 |  |  |     def test_osexlock(self): | 
					
						
							|  |  |  |         if hasattr(posix, "O_EXLOCK"): | 
					
						
							|  |  |  |             fd = os.open(test_support.TESTFN, | 
					
						
							|  |  |  |                          os.O_WRONLY|os.O_EXLOCK|os.O_CREAT) | 
					
						
							|  |  |  |             self.assertRaises(OSError, os.open, test_support.TESTFN, | 
					
						
							|  |  |  |                               os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK) | 
					
						
							|  |  |  |             os.close(fd) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if hasattr(posix, "O_SHLOCK"): | 
					
						
							|  |  |  |                 fd = os.open(test_support.TESTFN, | 
					
						
							|  |  |  |                              os.O_WRONLY|os.O_SHLOCK|os.O_CREAT) | 
					
						
							|  |  |  |                 self.assertRaises(OSError, os.open, test_support.TESTFN, | 
					
						
							|  |  |  |                                   os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK) | 
					
						
							|  |  |  |                 os.close(fd) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_osshlock(self): | 
					
						
							|  |  |  |         if hasattr(posix, "O_SHLOCK"): | 
					
						
							|  |  |  |             fd1 = os.open(test_support.TESTFN, | 
					
						
							|  |  |  |                          os.O_WRONLY|os.O_SHLOCK|os.O_CREAT) | 
					
						
							|  |  |  |             fd2 = os.open(test_support.TESTFN, | 
					
						
							|  |  |  |                           os.O_WRONLY|os.O_SHLOCK|os.O_CREAT) | 
					
						
							|  |  |  |             os.close(fd2) | 
					
						
							|  |  |  |             os.close(fd1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if hasattr(posix, "O_EXLOCK"): | 
					
						
							|  |  |  |                 fd = os.open(test_support.TESTFN, | 
					
						
							|  |  |  |                              os.O_WRONLY|os.O_SHLOCK|os.O_CREAT) | 
					
						
							|  |  |  |                 self.assertRaises(OSError, os.open, test_support.TESTFN, | 
					
						
							|  |  |  |                                   os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK) | 
					
						
							|  |  |  |                 os.close(fd) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |     def test_fstat(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'fstat'): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             fp = open(test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |                 self.assertTrue(posix.fstat(fp.fileno())) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             finally: | 
					
						
							|  |  |  |                 fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_stat(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'stat'): | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |             self.assertTrue(posix.stat(test_support.TESTFN)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-23 09:31:11 +00:00
										 |  |  |     def _test_all_chown_common(self, chown_func, first_param): | 
					
						
							|  |  |  |         """Common code for chown, fchown and lchown tests.""" | 
					
						
							|  |  |  |         if os.getuid() == 0: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 # Many linux distros have a nfsnobody user as MAX_UID-2 | 
					
						
							|  |  |  |                 # that makes a good test case for signedness issues. | 
					
						
							|  |  |  |                 #   http://bugs.python.org/issue1747858 | 
					
						
							|  |  |  |                 # This part of the test only runs when run as root. | 
					
						
							|  |  |  |                 # Only scary people run their tests as root. | 
					
						
							|  |  |  |                 ent = pwd.getpwnam('nfsnobody') | 
					
						
							|  |  |  |                 chown_func(first_param, ent.pw_uid, ent.pw_gid) | 
					
						
							|  |  |  |             except KeyError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             # non-root cannot chown to root, raises OSError | 
					
						
							|  |  |  |             self.assertRaises(OSError, chown_func, | 
					
						
							|  |  |  |                               first_param, 0, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # test a successful chown call | 
					
						
							|  |  |  |         chown_func(first_param, os.getuid(), os.getgid()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @unittest.skipUnless(hasattr(posix, 'chown'), "test needs os.chown()") | 
					
						
							|  |  |  |     def test_chown(self): | 
					
						
							|  |  |  |         # raise an OSError if the file does not exist | 
					
						
							|  |  |  |         os.unlink(test_support.TESTFN) | 
					
						
							|  |  |  |         self.assertRaises(OSError, posix.chown, test_support.TESTFN, -1, -1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # re-create the file | 
					
						
							|  |  |  |         open(test_support.TESTFN, 'w').close() | 
					
						
							|  |  |  |         self._test_all_chown_common(posix.chown, test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2008-03-18 19:05:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-23 09:31:11 +00:00
										 |  |  |     @unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()") | 
					
						
							|  |  |  |     def test_fchown(self): | 
					
						
							|  |  |  |         os.unlink(test_support.TESTFN) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # re-create the file | 
					
						
							|  |  |  |         test_file = open(test_support.TESTFN, 'w') | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             fd = test_file.fileno() | 
					
						
							|  |  |  |             self._test_all_chown_common(posix.fchown, fd) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             test_file.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @unittest.skipUnless(hasattr(posix, 'lchown'), "test needs os.lchown()") | 
					
						
							|  |  |  |     def test_lchown(self): | 
					
						
							|  |  |  |         os.unlink(test_support.TESTFN) | 
					
						
							|  |  |  |         # create a symlink | 
					
						
							|  |  |  |         os.symlink('/tmp/dummy-symlink-target', test_support.TESTFN) | 
					
						
							|  |  |  |         self._test_all_chown_common(posix.lchown, test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2008-03-18 19:05:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |     def test_chdir(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'chdir'): | 
					
						
							|  |  |  |             posix.chdir(os.curdir) | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             self.assertRaises(OSError, posix.chdir, test_support.TESTFN) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_lsdir(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'lsdir'): | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn(test_support.TESTFN, posix.lsdir(os.curdir)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_access(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'access'): | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |             self.assertTrue(posix.access(test_support.TESTFN, os.R_OK)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_umask(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'umask'): | 
					
						
							|  |  |  |             old_mask = posix.umask(0) | 
					
						
							| 
									
										
										
										
											2010-01-24 16:58:36 +00:00
										 |  |  |             self.assertIsInstance(old_mask, int) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  |             posix.umask(old_mask) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_strerror(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'strerror'): | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |             self.assertTrue(posix.strerror(0)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_pipe(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'pipe'): | 
					
						
							|  |  |  |             reader, writer = posix.pipe() | 
					
						
							|  |  |  |             os.close(reader) | 
					
						
							|  |  |  |             os.close(writer) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_tempnam(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'tempnam'): | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |             self.assertTrue(posix.tempnam()) | 
					
						
							|  |  |  |             self.assertTrue(posix.tempnam(os.curdir)) | 
					
						
							|  |  |  |             self.assertTrue(posix.tempnam(os.curdir, 'blah')) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_tmpfile(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'tmpfile'): | 
					
						
							|  |  |  |             fp = posix.tmpfile() | 
					
						
							|  |  |  |             fp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_utime(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'utime'): | 
					
						
							|  |  |  |             now = time.time() | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             posix.utime(test_support.TESTFN, None) | 
					
						
							| 
									
										
										
										
											2004-06-06 20:27:05 +00:00
										 |  |  |             self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, None)) | 
					
						
							|  |  |  |             self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (now, None)) | 
					
						
							|  |  |  |             self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, now)) | 
					
						
							|  |  |  |             posix.utime(test_support.TESTFN, (int(now), int(now))) | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |             posix.utime(test_support.TESTFN, (now, now)) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-19 10:55:19 +00:00
										 |  |  |     def test_chflags(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'chflags'): | 
					
						
							|  |  |  |             st = os.stat(test_support.TESTFN) | 
					
						
							|  |  |  |             if hasattr(st, 'st_flags'): | 
					
						
							|  |  |  |                 posix.chflags(test_support.TESTFN, st.st_flags) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_lchflags(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'lchflags'): | 
					
						
							|  |  |  |             st = os.stat(test_support.TESTFN) | 
					
						
							|  |  |  |             if hasattr(st, 'st_flags'): | 
					
						
							|  |  |  |                 posix.lchflags(test_support.TESTFN, st.st_flags) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  |     def test_getcwd_long_pathnames(self): | 
					
						
							|  |  |  |         if hasattr(posix, 'getcwd'): | 
					
						
							|  |  |  |             dirname = 'getcwd-test-directory-0123456789abcdef-01234567890abcdef' | 
					
						
							|  |  |  |             curdir = os.getcwd() | 
					
						
							| 
									
										
										
										
											2008-06-22 18:23:55 +00:00
										 |  |  |             base_path = os.path.abspath(test_support.TESTFN) + '.getcwd' | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 os.mkdir(base_path) | 
					
						
							|  |  |  |                 os.chdir(base_path) | 
					
						
							| 
									
										
										
										
											2008-06-22 18:23:55 +00:00
										 |  |  |             except: | 
					
						
							| 
									
										
										
										
											2009-03-26 20:48:25 +00:00
										 |  |  | #               Just returning nothing instead of the SkipTest exception, | 
					
						
							| 
									
										
										
										
											2008-06-22 19:35:24 +00:00
										 |  |  | #               because the test results in Error in that case. | 
					
						
							|  |  |  | #               Is that ok? | 
					
						
							| 
									
										
										
										
											2009-03-26 20:48:25 +00:00
										 |  |  | #                raise unittest.SkipTest, "cannot create directory for testing" | 
					
						
							| 
									
										
										
										
											2008-06-22 19:35:24 +00:00
										 |  |  |                 return | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-22 18:23:55 +00:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  |                 def _create_and_do_getcwd(dirname, current_path_length = 0): | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         os.mkdir(dirname) | 
					
						
							|  |  |  |                     except: | 
					
						
							| 
									
										
										
										
											2009-03-26 20:48:25 +00:00
										 |  |  |                         raise unittest.SkipTest, "mkdir cannot create directory sufficiently deep for getcwd test" | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                     os.chdir(dirname) | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         os.getcwd() | 
					
						
							|  |  |  |                         if current_path_length < 1027: | 
					
						
							|  |  |  |                             _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1) | 
					
						
							|  |  |  |                     finally: | 
					
						
							|  |  |  |                         os.chdir('..') | 
					
						
							|  |  |  |                         os.rmdir(dirname) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 _create_and_do_getcwd(dirname) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             finally: | 
					
						
							|  |  |  |                 os.chdir(curdir) | 
					
						
							| 
									
										
										
										
											2009-07-09 18:41:03 +00:00
										 |  |  |                 shutil.rmtree(base_path) | 
					
						
							| 
									
										
										
										
											2008-06-22 13:36:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2003-05-01 17:45:56 +00:00
										 |  |  |     test_support.run_unittest(PosixTester) | 
					
						
							| 
									
										
										
										
											2003-02-17 18:17:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |