xfstests: add _require_attrs
authorChristoph Hellwig <hch@lst.de>
Thu, 21 Oct 2010 19:11:48 +0000 (21:11 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 21 Oct 2010 19:11:48 +0000 (21:11 +0200)
Add a new helper to check if extended attributes are supported.  It
errors out if any of the attr tools are not found, or if a filesystem
does not support setting attributes.

Remove the opencoded checks for the attr tools from various tests
now that we do them in common code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alex Elder <aelder@sgi.com>
16 files changed:
020
021
062
063
067
070
077
079
093
114
115
117
136
186
187
common.attr

diff --git a/020 b/020
index 7f4fb5acec3ca8a7de50ff2b9f194101eded0179..56b9c3c3d9eda76b5760696e6b06ca04aacb081e 100755 (executable)
--- a/020
+++ b/020
@@ -35,6 +35,7 @@ trap "_cleanup; rm -f $tmp.* $testfile; exit \$status" 0 1 2 3 15
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _cleanup()
 {
@@ -82,8 +83,7 @@ _attr_list()
 _supported_fs xfs udf
 _supported_os Linux
 
-[ -n $ATTR_PROG ] || _notrun "attr is not installed"
-[ -n $GETFATTR_PROG ] || _notrun "getfattr is not installed"
+_require_attrs
 
 _setup_testdir
 
diff --git a/021 b/021
index 10c46114e3c2962bfc7072a22b7ca55610900a8f..3dac45155b0e2232f719994c26124e6e8f870fd5 100755 (executable)
--- a/021
+++ b/021
@@ -33,6 +33,7 @@ status=0      # success is the default!
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _cleanup()
 {
@@ -76,10 +77,8 @@ _getfattr()
 _supported_fs xfs
 _supported_os Linux
 
-[ -n $ATTR_PROG ] || _notrun "attr is not installed"
-[ -n $GETFATTR_PROG ] || _notrun "getfattr is not installed"
-
 _require_scratch
+_require_attrs
 
 rm -f $seq.full
 umount $SCRATCH_DEV >/dev/null 2>&1
diff --git a/062 b/062
index 2bae6a3da11600a2927015fc151bfe474b989eb3..b29512b0d22ec32cb20994053c0c32d40dc17477 100755 (executable)
--- a/062
+++ b/062
@@ -35,6 +35,7 @@ status=1      # failure is the default!
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _cleanup()
 {
@@ -120,6 +121,8 @@ _supported_fs xfs udf nfs
 _supported_os Linux
 
 _require_scratch
+_require_attrs
+
 rm -f $tmp.backup1 $tmp.backup2 $seq.full
 
 # real QA test starts here
diff --git a/063 b/063
index d2b8a9fc14fd6c2a11c26edcdfb31d6ea308563e..42a323a96e7af26d78400245a4c96f341fca63dc 100755 (executable)
--- a/063
+++ b/063
@@ -36,11 +36,14 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
 . ./common.rc
 . ./common.filter
 . ./common.dump
+. ./common.attr
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
 
+_require_attrs
+
 # create files with EAs
 _create_dumpdir_fill_ea
 
diff --git a/067 b/067
index 2669f15a32dc2445d7b196c803a87e5c85445c46..8c67a5aab9238807a6bab659eb9d55a5dddc7b7e 100755 (executable)
--- a/067
+++ b/067
@@ -42,6 +42,7 @@ _supported_fs xfs
 _supported_os Linux
 
 _need_to_be_root
+_require_attrs
 _require_acls
 _require_scratch
 
diff --git a/070 b/070
index 5dca47678ef054db80e47a3bd1faf0a24fa2fab2..4458011825494c181968fe018b8df3b56345d358 100755 (executable)
--- a/070
+++ b/070
@@ -42,11 +42,14 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
 
+_require_attrs
+
 _setup_testdir
 
 $FSSTRESS_PROG \
diff --git a/077 b/077
index 4e12163cfa8edeb49a4d0dc3315369c2c77eae67..3fb3e817b5ec7f426d69e910ab3cab8d95b34501 100755 (executable)
--- a/077
+++ b/077
@@ -52,7 +52,7 @@ _supported_os Linux
 
 [ ! -d $filler ] && _notrun "No directory to source files from"
 
-_require_scratch
+_require_attrs
 _require_acls
 _require_user
 
diff --git a/079 b/079
index 151835c8017d088ae92cf78174d27180db1910ac..6c43fe7edb606c3ebab156398910b272d0b9fdca 100755 (executable)
--- a/079
+++ b/079
@@ -44,11 +44,14 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _supported_fs xfs
 _supported_os Linux
 
+_require_attrs
 _require_scratch
+
 [ -x $timmutable ] || _notrun "t_immutable was not built for this platform"
 
 # real QA test starts here
diff --git a/093 b/093
index 4f14d86ae99b978d197ab35cf3af2324e0c85420..4682c885408d6a9826062313143c554663fcaadb 100755 (executable)
--- a/093
+++ b/093
@@ -60,6 +60,8 @@ _filefilter()
 _supported_fs generic
 _supported_os IRIX
 
+_require_attrs
+
 [ -x $runas ] || _notrun "$runas executable not found"
 
 rm -f $seq.full
diff --git a/114 b/114
index 8787937b0fb8796eeb1681d0217e016ce61d388c..76792229a285984a942c71fb326306dd00f2672d 100755 (executable)
--- a/114
+++ b/114
@@ -308,11 +308,13 @@ _test_dirstress()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _supported_fs xfs
 _supported_os IRIX
 
 _require_scratch
+_require_attrs
 _need_to_be_root
 
 rm -f $here/$seq.full
diff --git a/115 b/115
index 8ef0e4ccdcebf983300c91d60a6b3b42d2d5c343..26895f7d0c5590ff0ae96b6b451da63f34be3c18 100755 (executable)
--- a/115
+++ b/115
@@ -95,11 +95,13 @@ _filter()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 _supported_fs xfs
 _supported_os IRIX
 
 _require_scratch
+_require_attrs
 
 rm -f $here/$seq.full
 
diff --git a/117 b/117
index 915520fafda129c84e9da0a10b91758c0aa7d52f..dd880cbba35cc6ed6f0c3dc3adb08911e8fd6154 100755 (executable)
--- a/117
+++ b/117
@@ -48,6 +48,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 # real QA test starts here
 _supported_fs xfs
@@ -55,6 +56,7 @@ _supported_os IRIX Linux
 
 _setup_testdir
 _require_scratch
+_require_attrs
 
 rm -f $seq.full
 umount $SCRATCH_DEV >/dev/null 2>&1
diff --git a/136 b/136
index abc23e968c98cb77544f256f27c89e89e665fcee..109180ac3ef91f8c747b45681a432503d4a7bb44 100755 (executable)
--- a/136
+++ b/136
@@ -43,6 +43,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 # real QA test starts here
 
@@ -51,7 +52,9 @@ _cleanup()
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os IRIX Linux
+
 _require_scratch
+_require_attrs
 
 export MKFS_OPTIONS="-i size=512,attr=2"
 _scratch_mkfs_xfs > /dev/null 2>&1
diff --git a/186 b/186
index 80c406df816b59fb38589bdccd449d55c374370b..a2d7e1441d5e20b696fa6f625bdeae3cf7c8ade1 100755 (executable)
--- a/186
+++ b/186
@@ -139,13 +139,17 @@ _changeto_attr1()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 # real QA test starts here
 
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os Linux
+
 _require_scratch
+_require_attrs
+
 rm -f $seq.full
 
 _scratch_mkfs -i attr=2,size=512 -l lazy-count=1 >/dev/null 2>&1
diff --git a/187 b/187
index ad2805155d899f28d01bdb71227c0a49d3973db5..8086c8e342e506ccda43a5bd8195a93ac7717c71 100755 (executable)
--- a/187
+++ b/187
@@ -51,11 +51,15 @@ _filter_version()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.attr
 
 # real QA test starts here
-_require_scratch
 _supported_fs xfs
 _supported_os Linux
+
+_require_scratch
+_require_attrs
+
 rm -f $seq.full
 
 # lazysb and attr2 are in features2 and will require morebitsbit on
index 3dde55323d66c0b69928cc254d4637c390863a7d..343edfcafb1488f4c0352188aea34dcfe8b445a6 100644 (file)
@@ -148,5 +148,33 @@ _list_acl()
     ls -dD $file | _acl_filter_id
 }
 
+_require_attrs()
+{
+    [ -n $ATTR_PROG ] || _notrun "attr command not found"
+    [ -n $GETFATTR_PROG ] || _notrun "getfattr command not found"
+    [ -n $SETFATTR_PROG ] || _notrun "setfattr command not found"
+
+    #
+    # Test if chacl is able to write an attribute on the target filesystems.
+    # On really old kernels the system calls might not be implemented at all,
+    # but the more common case is that the tested filesystem simply doesn't
+    # support attributes.  Note that we can't simply list attributes as
+    # various security modules generate synthetic attributes not actually
+    # stored on disk.
+    #
+    touch $TEST_DIR/syscalltest
+    attr -s "user.xfstests" -V "attr" /mnt/test/ > $TEST_DIR/syscalltest.out 2>&1
+    cat $TEST_DIR/syscalltest.out >> $here/$seq.full
+
+    if grep -q 'Function not implemented' $TEST_DIR/syscalltest.out; then
+      _notrun "kernel does not support attrs"
+    fi
+    if grep -q 'Operation not supported' $TEST_DIR/syscalltest.out; then
+      _notrun "attrs not supported by this filesystem type: $FSTYP"
+    fi
+
+    rm -f $TEST_DIR/syscalltest.out
+}
+
 # make sure this script returns success
 /bin/true