Issue #15747: skip chflags UF_IMMUTABLE tests if EOPNOTSUPP is raised.

This is necessary for ZFS systems, which don't support UF_IMMUTABLE.

(Note: this commit is a manual merge of 78699:019a2390b014 as both
_test_chflags_regular_file and test_lchflags_symlink differ between
3.2 and default.)
This commit is contained in:
Trent Nelson 2012-08-21 23:59:31 +00:00
parent dda5edc007
commit 75959cf247
2 changed files with 24 additions and 3 deletions

View file

@ -534,7 +534,17 @@ class PosixTester(unittest.TestCase):
def _test_chflags_regular_file(self, chflags_func, target_file, **kwargs): def _test_chflags_regular_file(self, chflags_func, target_file, **kwargs):
st = os.stat(target_file) st = os.stat(target_file)
self.assertTrue(hasattr(st, 'st_flags')) self.assertTrue(hasattr(st, 'st_flags'))
chflags_func(target_file, st.st_flags | stat.UF_IMMUTABLE, **kwargs)
# ZFS returns EOPNOTSUPP when attempting to set flag UF_IMMUTABLE.
flags = st.st_flags | stat.UF_IMMUTABLE
try:
chflags_func(target_file, flags, **kwargs)
except OSError as err:
if err.errno != errno.EOPNOTSUPP:
raise
msg = 'chflag UF_IMMUTABLE not supported by underlying fs'
self.skipTest(msg)
try: try:
new_st = os.stat(target_file) new_st = os.stat(target_file)
self.assertEqual(st.st_flags | stat.UF_IMMUTABLE, new_st.st_flags) self.assertEqual(st.st_flags | stat.UF_IMMUTABLE, new_st.st_flags)
@ -568,8 +578,15 @@ class PosixTester(unittest.TestCase):
return posix.chflags(path, flags, follow_symlinks=False) return posix.chflags(path, flags, follow_symlinks=False)
for fn in (posix.lchflags, chflags_nofollow): for fn in (posix.lchflags, chflags_nofollow):
fn(_DUMMY_SYMLINK, # ZFS returns EOPNOTSUPP when attempting to set flag UF_IMMUTABLE.
dummy_symlink_st.st_flags | stat.UF_IMMUTABLE) flags = dummy_symlink_st.st_flags | stat.UF_IMMUTABLE
try:
fn(_DUMMY_SYMLINK, flags)
except OSError as err:
if err.errno != errno.EOPNOTSUPP:
raise
msg = 'chflag UF_IMMUTABLE not supported by underlying fs'
self.skipTest(msg)
try: try:
new_testfn_st = os.stat(support.TESTFN) new_testfn_st = os.stat(support.TESTFN)
new_dummy_symlink_st = os.lstat(_DUMMY_SYMLINK) new_dummy_symlink_st = os.lstat(_DUMMY_SYMLINK)

View file

@ -86,6 +86,10 @@ Documentation
Tests Tests
----- -----
- Issue #15747: ZFS always returns EOPNOTSUPP when attempting to set the
UF_IMMUTABLE flag (via either chflags or lchflags); refactor affected
tests in test_posix.py to account for this.
- Issue #15285: Refactor the approach for testing connect timeouts using - Issue #15285: Refactor the approach for testing connect timeouts using
two external hosts that have been configured specifically for this type two external hosts that have been configured specifically for this type
of test. of test.