]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #15747: skip chflags UF_IMMUTABLE tests if EOPNOTSUPP is raised.
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 4 Dec 2012 09:07:16 +0000 (10:07 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 4 Dec 2012 09:07:16 +0000 (10:07 +0100)
This is necessary for ZFS systems, which don't support UF_IMMUTABLE.
--
Kubilay Kocak (koobs) asked me on IRC to backport this fix to Python 2.7: done!

Lib/test/test_posix.py
Misc/NEWS

index 2eba77043e16fda5b4fcb757e7bdc314bd062767..7214efa323d9c2583ca68cdadf33c1b7ec30d772 100644 (file)
@@ -334,7 +334,16 @@ class PosixTester(unittest.TestCase):
     def _test_chflags_regular_file(self, chflags_func, target_file):
         st = os.stat(target_file)
         self.assertTrue(hasattr(st, 'st_flags'))
-        chflags_func(target_file, st.st_flags | stat.UF_IMMUTABLE)
+
+        # ZFS returns EOPNOTSUPP when attempting to set flag UF_IMMUTABLE.
+        try:
+            chflags_func(target_file, st.st_flags | stat.UF_IMMUTABLE)
+        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)
@@ -363,8 +372,16 @@ class PosixTester(unittest.TestCase):
         self.teardown_files.append(_DUMMY_SYMLINK)
         dummy_symlink_st = os.lstat(_DUMMY_SYMLINK)
 
-        posix.lchflags(_DUMMY_SYMLINK,
-                       dummy_symlink_st.st_flags | stat.UF_IMMUTABLE)
+        # ZFS returns EOPNOTSUPP when attempting to set flag UF_IMMUTABLE.
+        try:
+            posix.lchflags(_DUMMY_SYMLINK,
+                           dummy_symlink_st.st_flags | stat.UF_IMMUTABLE)
+        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(test_support.TESTFN)
             new_dummy_symlink_st = os.lstat(_DUMMY_SYMLINK)
index 3d49637a88a716c439fdfb87c7b945f2f64b772e..cc69557ebd401c5f7d1214d1ffc8f117469dbe70 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -530,6 +530,10 @@ Extension Modules
 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 #16549: Add tests for json.tools.  Initial patch by Berker Peksag
   and Serhiy Storchaka.