]> granicus.if.org Git - python/commitdiff
Issue #15747: skip chflags UF_IMMUTABLE tests if EOPNOTSUPP is raised.
authorTrent Nelson <trent@trent.me>
Tue, 21 Aug 2012 23:59:31 +0000 (23:59 +0000)
committerTrent Nelson <trent@trent.me>
Tue, 21 Aug 2012 23:59:31 +0000 (23:59 +0000)
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.)

Lib/test/test_posix.py
Misc/NEWS

index 11b3ba05fbe0a7cb3bd92769422b85242933cb05..4e7a37c8585f6f142ebed52c684c635890c5f41a 100644 (file)
@@ -534,7 +534,17 @@ class PosixTester(unittest.TestCase):
     def _test_chflags_regular_file(self, chflags_func, target_file, **kwargs):
         st = os.stat(target_file)
         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:
             new_st = os.stat(target_file)
             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)
 
         for fn in (posix.lchflags, chflags_nofollow):
-            fn(_DUMMY_SYMLINK,
-                           dummy_symlink_st.st_flags | stat.UF_IMMUTABLE)
+            # ZFS returns EOPNOTSUPP when attempting to set flag 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:
                 new_testfn_st = os.stat(support.TESTFN)
                 new_dummy_symlink_st = os.lstat(_DUMMY_SYMLINK)
index 29d11f3025c422c00e57753d75965d3a31d40f5c..408250741bc28c8b1b17b4d79077d94b6ee4d0fa 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -86,6 +86,10 @@ Documentation
 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
   two external hosts that have been configured specifically for this type
   of test.