cpython: 32c5b9aeee82 (original) (raw)
--- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -4,6 +4,7 @@ import os import errno +import getpass import unittest import warnings import sys @@ -45,12 +46,30 @@ try: except ImportError: _winapi = None try:
- import grp
- groups = [g.gr_gid for g in grp.getgrall() if getpass.getuser() in g.gr_mem]
- if hasattr(os, 'getgid'):
process_gid = os.getgid()[](#l1.18)
if process_gid not in groups:[](#l1.19)
groups.append(process_gid)[](#l1.20)
+try: from _testcapi import INT_MAX, PY_SSIZE_T_MAX except ImportError: INT_MAX = PY_SSIZE_T_MAX = sys.maxsize from test.script_helper import assert_python_ok +root_in_posix = False +if hasattr(os, 'geteuid'):
+ with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) os.stat_float_times(True) @@ -962,17 +981,6 @@ class MakedirTests(unittest.TestCase): os.makedirs(path, mode=mode, exist_ok=True) os.umask(old_mask)
- @unittest.skipUnless(hasattr(os, 'chown'), 'test needs os.chown')
- def test_chown_uid_gid_arguments_must_be_index(self):
stat = os.stat(support.TESTFN)[](#l1.48)
uid = stat.st_uid[](#l1.49)
gid = stat.st_gid[](#l1.50)
for value in (-1.0, -1j, decimal.Decimal(-1), fractions.Fraction(-2, 2)):[](#l1.51)
self.assertRaises(TypeError, os.chown, support.TESTFN, value, gid)[](#l1.52)
self.assertRaises(TypeError, os.chown, support.TESTFN, uid, value)[](#l1.53)
self.assertIsNone(os.chown(support.TESTFN, uid, gid))[](#l1.54)
self.assertIsNone(os.chown(support.TESTFN, -1, -1))[](#l1.55)
- def test_exist_ok_s_isgid_directory(self): path = os.path.join(support.TESTFN, 'dir1') S_ISGID = stat.S_ISGID @@ -1023,6 +1031,58 @@ class MakedirTests(unittest.TestCase): os.removedirs(path) +@unittest.skipUnless(hasattr(os, 'chown'), "Test needs chown") +class ChownFileTests(unittest.TestCase): +
- def test_chown_uid_gid_arguments_must_be_index(self):
stat = os.stat(support.TESTFN)[](#l1.71)
uid = stat.st_uid[](#l1.72)
gid = stat.st_gid[](#l1.73)
for value in (-1.0, -1j, decimal.Decimal(-1), fractions.Fraction(-2, 2)):[](#l1.74)
self.assertRaises(TypeError, os.chown, support.TESTFN, value, gid)[](#l1.75)
self.assertRaises(TypeError, os.chown, support.TESTFN, uid, value)[](#l1.76)
self.assertIsNone(os.chown(support.TESTFN, uid, gid))[](#l1.77)
self.assertIsNone(os.chown(support.TESTFN, -1, -1))[](#l1.78)
- @unittest.skipUnless(len(groups) > 1, "test needs more than one group")
- def test_chown(self):
gid_1, gid_2 = groups[:2][](#l1.82)
uid = os.stat(support.TESTFN).st_uid[](#l1.83)
os.chown(support.TESTFN, uid, gid_1)[](#l1.84)
gid = os.stat(support.TESTFN).st_gid[](#l1.85)
self.assertEqual(gid, gid_1)[](#l1.86)
os.chown(support.TESTFN, uid, gid_2)[](#l1.87)
gid = os.stat(support.TESTFN).st_gid[](#l1.88)
self.assertEqual(gid, gid_2)[](#l1.89)
- @unittest.skipUnless(root_in_posix and len(all_users) > 1,
"test needs root privilege and more than one user")[](#l1.92)
- def test_chown_with_root(self):
uid_1, uid_2 = all_users[:2][](#l1.94)
gid = os.stat(support.TESTFN).st_gid[](#l1.95)
os.chown(support.TESTFN, uid_1, gid)[](#l1.96)
uid = os.stat(support.TESTFN).st_uid[](#l1.97)
self.assertEqual(uid, uid_1)[](#l1.98)
os.chown(support.TESTFN, uid_2, gid)[](#l1.99)
uid = os.stat(support.TESTFN).st_uid[](#l1.100)
self.assertEqual(uid, uid_2)[](#l1.101)
- @unittest.skipUnless(not root_in_posix and len(all_users) > 1,
"test needs non-root account and more than one user")[](#l1.104)
- def test_chown_without_permission(self):
uid_1, uid_2 = all_users[:2][](#l1.106)
gid = os.stat(support.TESTFN).st_gid[](#l1.107)
with self.assertRaisesRegex(PermissionError, "Operation not permitted"):[](#l1.108)
os.chown(support.TESTFN, uid_1, gid)[](#l1.109)
os.chown(support.TESTFN, uid_2, gid)[](#l1.110)
+ + class RemoveDirsTests(unittest.TestCase): def setUp(self): os.makedirs(support.TESTFN) @@ -2083,11 +2143,13 @@ class TestSendfile(unittest.TestCase): @classmethod def setUpClass(cls):
cls.key = support.threading_setup()[](#l1.123) with open(support.TESTFN, "wb") as f:[](#l1.124) f.write(cls.DATA)[](#l1.125)
@classmethod def tearDownClass(cls):
support.threading_cleanup(*cls.key)[](#l1.129) support.unlink(support.TESTFN)[](#l1.130)
def setUp(self): @@ -2636,44 +2698,5 @@ class ExportsTests(unittest.TestCase): self.assertIn('walk', os.all) -@support.reap_threads -def test_main():
- support.run_unittest(
FileTests,[](#l1.140)
StatAttributeTests,[](#l1.141)
EnvironTests,[](#l1.142)
WalkTests,[](#l1.143)
FwalkTests,[](#l1.144)
MakedirTests,[](#l1.145)
DevNullTests,[](#l1.146)
URandomTests,[](#l1.147)
ExecTests,[](#l1.148)
Win32ErrorTests,[](#l1.149)
TestInvalidFD,[](#l1.150)
PosixUidGidTests,[](#l1.151)
Pep383Tests,[](#l1.152)
Win32KillTests,[](#l1.153)
Win32ListdirTests,[](#l1.154)
Win32SymlinkTests,[](#l1.155)
NonLocalSymlinkTests,[](#l1.156)
FSEncodingTests,[](#l1.157)
DeviceEncodingTests,[](#l1.158)
PidTests,[](#l1.159)
LoginTests,[](#l1.160)
LinkTests,[](#l1.161)
TestSendfile,[](#l1.162)
ProgramPriorityTests,[](#l1.163)
ExtendedAttributeTests,[](#l1.164)
Win32DeprecatedBytesAPI,[](#l1.165)
TermsizeTests,[](#l1.166)
OSErrorTests,[](#l1.167)
RemoveDirsTests,[](#l1.168)
CPUCountTests,[](#l1.169)
FDInheritanceTests,[](#l1.170)
Win32JunctionTests,[](#l1.171)
BlockingTests,[](#l1.172)
ExportsTests,[](#l1.173)
- )