fstests: filter redundant output by getfattr
authorZorro Lang <zlang@redhat.com>
Thu, 23 Aug 2018 02:41:24 +0000 (10:41 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 26 Aug 2018 12:55:28 +0000 (20:55 +0800)
When getfattr dumps values of all extended attributes (-d option),
it doesn't print empty extended attributes. e.g: user.name. But from
attr-2.4.48 this behavior is changed,  new getfattr prints
user.name="".

The {=""} will break the golden image, so filter the redundant =""
at the end if it has.

Signed-off-by: Zorro Lang <zlang@redhat.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
24 files changed:
common/attr
tests/ext4/022
tests/ext4/026
tests/generic/020
tests/generic/037
tests/generic/062
tests/generic/066
tests/generic/093
tests/generic/097
tests/generic/337
tests/generic/364
tests/generic/403
tests/generic/454
tests/generic/489
tests/overlay/011
tests/overlay/026
tests/overlay/038
tests/overlay/041
tests/overlay/046
tests/overlay/056
tests/overlay/060
tests/shared/002
tests/xfs/021
tests/xfs/187

index 10b98eefcb17d2a57c56d3283f57a1ed3c8bd16d..20049de02b50e7b378d3249a0f0ebbb28bc55a24 100644 (file)
@@ -224,6 +224,18 @@ _sort_getfattr_output()
     awk '{a[FNR]=$0}END{n = asort(a); for(i=1; i <= n; i++) print a[i]"\n"}' RS=''
 }
 
+# Previously, when getfattr dumps values of all extended attributes, it prints
+# empty attr as 'user.name', but new getfattr (since attr-2.4.48) prints it as
+# 'user.name=""'. Filter out the ending '=""' so that both old and new getfattr
+# pints the same output.
+#
+# Note: This function returns the getfattr command result.
+_getfattr()
+{
+       $GETFATTR_PROG "$@" | sed -e 's/=\"\"//'
+       return ${PIPESTATUS[0]}
+}
+
 # set maximum total attr space based on fs type
 case "$FSTYP" in
 xfs|udf|pvfs2|9p|ceph)
index 7dc19e8ea1690cc4f2d93ab30f6df91c7f9e5e78..1123e7a2707a858457505b5ad94bfefba7721578 100755 (executable)
@@ -151,7 +151,7 @@ done
 
 # Dump all xattrs to see whether nothing broke
 for FILE in ${FNAMES[@]}; do
-       $GETFATTR_PROG -h -d --absolute-names $SCRATCH_MNT/$FILE 2>/dev/null | \
+       _getfattr -h -d --absolute-names $SCRATCH_MNT/$FILE 2>/dev/null | \
                _filter_scratch | sort
 done
 
index f651fe6e6ee5616fce9d717d66988c2579a9da1c..5e0e887957009e0af91a171896ca974c50ae576e 100755 (executable)
@@ -51,14 +51,14 @@ attr_set()
                $SETFATTR_PROG -n $name $file
        fi
 
-       tmp=$($GETFATTR_PROG --absolute-names --only-values -n $name $file)
+       tmp=$(_getfattr --absolute-names --only-values -n $name $file)
        [[ "$tmp" == "$value" ]] || echo "unexpected value returned: $tmp"
 }
 
 # List attributes on a file.
 attr_list()
 {
-       $GETFATTR_PROG --absolute-names $1 | grep -v '^#'
+       _getfattr --absolute-names $1 | grep -v '^#'
 }
 
 # Removes an extended attribute from a file.
index 8bd5fe04fb2f8180b54a350f064340c4996b9a18..936d848527cf85d5f31527c9c12f27cf9b0be2b0 100755 (executable)
@@ -35,9 +35,9 @@ _attr()
     return $exit
 }
 
-_getfattr()
+do_getfattr()
 {
-    $GETFATTR_PROG $* 2>$tmp.err >$tmp.out
+    _getfattr $* 2>$tmp.err >$tmp.out
     exit=$?
     _filter $tmp.out
     _filter $tmp.err 1>&2
@@ -49,7 +49,7 @@ _attr_list()
     file=$1
     
     echo "   *** print attributes"
-    if ! _getfattr -d -e text --absolute-names $file
+    if ! do_getfattr -d -e text --absolute-names $file
     then
         echo "      !!! error return"
         return 1
@@ -110,7 +110,7 @@ done
 
 echo "*** check"
 # don't print it all out...
-getfattr --absolute-names $testfile \
+_getfattr --absolute-names $testfile \
     | tee -a $seqres.full \
     | $AWK_PROG '
        /^#/ { next }
index b5edd0336a5f769586d633b4bfddef7d29cfbee4..d08232ae1653c2295a35989c42eede24d8f0f592 100755 (executable)
@@ -76,7 +76,7 @@ set_xattr_loop $test_file &
 setter_pid=$!
 
 for ((i = 0; i < 1000; i++)); do
-       $GETFATTR_PROG --absolute-names -n $xattr_name \
+       _getfattr --absolute-names -n $xattr_name \
                $SCRATCH_MNT/$test_file | value_filter
 done
 
index df67960dd80ba93a1536a52b1e8f06e65827dd85..b6e28e0fd34808c65f9c8ef9940238d158ad5b10 100755 (executable)
@@ -31,7 +31,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
 
 getfattr()
 {
-    $GETFATTR_PROG --absolute-names -dh $@ 2>&1 | _filter_scratch
+    _getfattr --absolute-names -dh $@ 2>&1 | _filter_scratch
 }
 
 setfattr()
@@ -166,7 +166,7 @@ _backup()
        # we *do* sort the output by path, since it otherwise would depend on
        # readdir order, which on some filesystems may change after re-creating
        # the files.
-       $GETFATTR_PROG --absolute-names -dh -R -m '.' $SCRATCH_MNT | _sort_getfattr_output >$1
+       _getfattr --absolute-names -dh -R -m '.' $SCRATCH_MNT | _sort_getfattr_output >$1
        echo BACKUP $1 >>$seqres.full
        cat $1 >> $seqres.full
        [ ! -s $1 ] && echo "warning: $1 (backup file) is empty"
index 7ad142186e87ccaf0cd1f0f729e81c399cbba3db..3b3ff2bbb823c660faf43de4fb6d25c3ea3aa451 100755 (executable)
@@ -72,7 +72,7 @@ _flakey_drop_and_remount
 # with the 3 xattrs that we had before deleting the second one and fsyncing the
 # file.
 echo "xattr names and values after first fsync log replay:"
-$GETFATTR_PROG --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
+_getfattr --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
 
 # Now write some data to our file, fsync it, remove the first xattr, add a new
 # hard link to our file and commit the fsync log by fsyncing some other new
@@ -89,7 +89,7 @@ _flakey_drop_and_remount
 
 # Now only the xattr with name user.attr3 should be set in our file.
 echo "xattr names and values after second fsync log replay:"
-$GETFATTR_PROG --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
+_getfattr --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
 
 status=0
 exit
index fc609b062dd83a0486a7fa63295125b95f1c7e06..a2467a5bb9e0926c7142cbc79803aeb68d7b1aa7 100755 (executable)
@@ -63,7 +63,7 @@ $SETCAP_PROG cap_chown+ep $file
 $SETFATTR_PROG -n trusted.name -v value $file
 echo data2 >> $file
 cat $file
-$GETFATTR_PROG -m '^trusted\.*' --absolute-names $file | filefilter
+_getfattr -m '^trusted\.*' --absolute-names $file | filefilter
 
 echo "**** Verifying that chmod doesn't affect open file descriptors ****"
 rm -f $file
index db8dc71a5fab176bd1c198ed2bde325c3657476b..679f1a24b9068425605518a246a8af1f76b73539 100755 (executable)
@@ -30,7 +30,7 @@ _cleanup()
 
 getfattr()
 {
-       $GETFATTR_PROG --absolute-names "$@" |& _filter_test_dir
+       _getfattr --absolute-names "$@" |& _filter_test_dir
 }
 
 setfattr()
index a76aa612413268d3f7e7ff5d294e3ef6173c978a..344a3659dfaca3188ed8669f0e64235c21f9e591 100755 (executable)
@@ -49,7 +49,7 @@ $SETFATTR_PROG -n user.ping -v pong $SCRATCH_MNT/testfile
 
 # Now call getfattr with --dump, which calls the listxattrs system call.
 # It should list all the xattrs we have set before.
-$GETFATTR_PROG --absolute-names --dump $SCRATCH_MNT/testfile | _filter_scratch
+_getfattr --absolute-names --dump $SCRATCH_MNT/testfile | _filter_scratch
 
 status=0
 exit
index 6bed9ca2647dca3694256eeeb743741236c07589..b4634a4420513c21693a841628be76ecf972f0ca 100755 (executable)
@@ -23,6 +23,7 @@ _cleanup()
 
 # get standard environment, filters and checks
 . ./common/rc
+. ./common/attr
 
 # remove previous $seqres.full before test
 rm -f $seqres.full
@@ -59,11 +60,11 @@ $GETRICHACL_PROG x
 mkdir sub
 $SETRICHACL_PROG --set 'everyone@:rwpxd:fd:allow' sub
 stat -c %A+ sub
-$GETFATTR_PROG -m system\.richacl sub
+_getfattr -m system\.richacl sub
 
 chmod 775 sub
 stat -c %A+ sub
-$GETFATTR_PROG -m system\.richacl sub
+_getfattr -m system\.richacl sub
 $GETRICHACL_PROG sub
 
 touch sub/f
index 9309d71335b7303a2292c99f3e4c852c99fd9fcf..39c64061935f0be53e586682c6c7af0ab8d5d9d8 100755 (executable)
@@ -49,7 +49,7 @@ $SETFATTR_PROG -n trusted.small -v a $SCRATCH_MNT/file
 runfile="$tmp.getfattr"
 touch $runfile
 while [ -e $runfile ]; do
-       $GETFATTR_PROG --absolute-names -n trusted.small $SCRATCH_MNT/file \
+       _getfattr --absolute-names -n trusted.small $SCRATCH_MNT/file \
                > /dev/null || break
 done &
 getfattr_pid=$!
index d9faf366dece365f07d5969cc30d9079a3a8ddfc..4a0936c5da244256a1e573b87ae4af535af1015a 100755 (executable)
@@ -58,7 +58,7 @@ testf() {
 
        echo "Testing ${key} ($(hexbytes "${key}")) -> ${value}" >> $seqres.full
 
-       actual_value="$($GETFATTR_PROG --absolute-names --only-values -n "user.${key}" "${testfile}")"
+       actual_value="$(_getfattr --absolute-names --only-values -n "user.${key}" "${testfile}")"
        if [ "${actual_value}" != "${value}" ]; then
                echo "Key ${key} has value ${actual_value}, expected ${value}."
        fi
@@ -127,7 +127,7 @@ setf "zerojoin_moo\xe2\x80\x8ccow.txt" "zero width joiners"
 setf "combmark_\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.txt" "combining marks"
 setf "combmark_\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.txt" "combining marks"
 
-$GETFATTR_PROG --absolute-names -d "${testfile}" >> $seqres.full
+_getfattr --absolute-names -d "${testfile}" >> $seqres.full
 
 echo "Test files"
 testf "french_caf\xc3\xa9.txt" "NFC"
@@ -175,7 +175,7 @@ testf "combmark_\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.txt" "combining marks"
 testf "combmark_\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.txt" "combining marks"
 
 echo "Uniqueness of keys?"
-crazy_keys="$($GETFATTR_PROG --absolute-names -d "${testfile}" | egrep -c '(french_|chinese_|greek_|arabic_|urk)')"
+crazy_keys="$(_getfattr --absolute-names -d "${testfile}" | egrep -c '(french_|chinese_|greek_|arabic_|urk)')"
 expected_keys=11
 test "${crazy_keys}" -ne "${expected_keys}" && echo "Expected ${expected_keys} keys, saw ${crazy_keys}."
 
index 1d3a916e3e445623b8a833abe3b23d4e3503d7fe..b3a0972fc3cd89298bb6d61bf058610172562382 100755 (executable)
@@ -58,7 +58,7 @@ $XFS_IO_PROG -c "pwrite -S 0xea 0 64K" \
 # were not lost and neither was the data we wrote.
 _flakey_drop_and_remount
 echo "File xattrs after power failure:"
-$GETFATTR_PROG --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
+_getfattr --absolute-names --dump $SCRATCH_MNT/foobar | _filter_scratch
 echo "File data after power failure:"
 od -t x1 $SCRATCH_MNT/foobar
 
index e2fedc90d23aa28eb30553f2abcdc4e70f6e2f87..1d09341b250aec311163064657ccf6f8399960a2 100755 (executable)
@@ -56,7 +56,7 @@ $SETFATTR_PROG -n "trusted.overlay.opaque" -v "y" $upperdir/testdir
 $MOUNT_PROG -t overlay -o ro -o lowerdir=$upperdir:$lowerdir $OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
 
 # Dump trusted.overlay xattr, we should not see the "opaque" xattr
-$GETFATTR_PROG -d -m overlay $SCRATCH_MNT/testdir
+_getfattr -d -m overlay $SCRATCH_MNT/testdir
 echo "Silence is golden"
 
 # success, all done
index 08cad42fc5142972a626661032aff42ccabf9332..d0d2a5bf9f2a621c8696a3a4b1b2f1f97e858315 100755 (executable)
@@ -71,7 +71,7 @@ touch $SCRATCH_MNT/testf1
 $SETFATTR_PROG -n "trusted.overlayfsrz" -v "n" \
   $SCRATCH_MNT/testf0 2>&1 | _filter_scratch
 
-$GETFATTR_PROG --absolute-names -n "trusted.overlayfsrz" \
+_getfattr --absolute-names -n "trusted.overlayfsrz" \
   $SCRATCH_MNT/testf0 2>&1 | _filter_scratch
 
 # {s,g}etfattr of "trusted.overlay.xxx" should fail.
@@ -86,7 +86,7 @@ $SETFATTR_PROG -n "trusted.overlay.fsz" -v "n" \
   $SCRATCH_MNT/testf1 2>&1 | _filter_scratch | \
   sed -e 's/permitted/supported/g'
 
-$GETFATTR_PROG --absolute-names -n "trusted.overlay.fsz" \
+_getfattr --absolute-names -n "trusted.overlay.fsz" \
   $SCRATCH_MNT/testf1 2>&1 | _filter_scratch | \
   sed -e 's/permitted/supported/g'
 
index 716d0fcaa492720fe066c2e9a4c3285283e2f529..25f9979bec9be50d0354024e1420870a23fcff02 100755 (executable)
@@ -77,7 +77,7 @@ subdir_d=$($here/src/t_dir_type $impure_dir $impure_subdir_st_ino)
 mv $SCRATCH_MNT/test_file $impure_dir
 test_file_st_ino=$(stat -c '%i' $impure_dir/test_file)
 
-impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
+impure=$(_getfattr --absolute-names --only-values -n 'trusted.overlay.impure' \
                        $upperdir/test_dir/impure_dir)
 [[ $impure == "y" ]] || echo "Impure directory missing impure xattr"
 
@@ -109,7 +109,7 @@ $here/src/t_dir_type $impure_dir $test_file_st_ino
 $here/src/t_dir_type $impure_dir $impure_subdir_st_ino
 [[ $? != 0 ]] || echo "Directory's readdir cache has stale subdir entries"
 
-impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
+impure=$(_getfattr --absolute-names --only-values -n 'trusted.overlay.impure' \
                        $upperdir/test_dir/impure_dir 2>/dev/null)
 [[ -z $impure ]] || echo "Pure directory has impure xattr"
 
index 2c4f9fd1df6939f5325c0820394fc24a50cf26d1..277fb913016deec1d50ad5edd6c17539e4b01bad 100755 (executable)
@@ -89,7 +89,7 @@ subdir_d=$($here/src/t_dir_type $impure_dir $impure_subdir_st_ino)
 mv $SCRATCH_MNT/test_file $impure_dir
 test_file_st_ino=$(stat -c '%i' $impure_dir/test_file)
 
-impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
+impure=$(_getfattr --absolute-names --only-values -n 'trusted.overlay.impure' \
                        $upperdir/test_dir/impure_dir)
 [[ $impure == "y" ]] || echo "Impure directory missing impure xattr"
 
@@ -121,7 +121,7 @@ $here/src/t_dir_type $impure_dir $test_file_st_ino
 $here/src/t_dir_type $impure_dir $impure_subdir_st_ino
 [[ $? != 0 ]] || echo "Directory's readdir cache has stale subdir entries"
 
-impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
+impure=$(_getfattr --absolute-names --only-values -n 'trusted.overlay.impure' \
                        $upperdir/test_dir/impure_dir 2>/dev/null)
 [[ -z $impure ]] || echo "Pure directory has impure xattr"
 
index 1c09609c38ec9a818b2837028c288b3fd836ae73..6338a383b4719c3e2fc74b094ab1234b7d49186f 100755 (executable)
@@ -57,7 +57,7 @@ check_redirect()
        local target=$1
        local expect=$2
 
-       value=$($GETFATTR_PROG --absolute-names --only-values -n \
+       value=$(_getfattr --absolute-names --only-values -n \
                $OVL_XATTR_REDIRECT $target)
 
        [[ "$value" == "$expect" ]] || echo "Redirect xattr incorrect"
@@ -67,7 +67,7 @@ check_no_redirect()
 {
        local target=$1
 
-       value=$($GETFATTR_PROG --absolute-names -d -m \
+       value=$(_getfattr --absolute-names -d -m \
                $OVL_XATTR_REDIRECT $target)
 
        [[ -z "$value" ]] || echo "Redirect xattr not empty"
@@ -78,7 +78,7 @@ check_opaque()
 {
        local target=$1
 
-       value=$($GETFATTR_PROG --absolute-names --only-values -n \
+       value=$(_getfattr --absolute-names --only-values -n \
                $OVL_XATTR_OPAQUE $target)
 
        [[ "$value" == "$OVL_XATTR_OPAQUE_VAL" ]] || \
index 778e1f6a93b5d5e772f0cbb910f5b7faf2a458a9..44ffb54a74492343484c66660273c6ec735fe8e6 100755 (executable)
@@ -64,7 +64,7 @@ check_impure()
 {
        local target=$1
 
-       value=$($GETFATTR_PROG --absolute-names --only-values -n \
+       value=$(_getfattr --absolute-names --only-values -n \
                $OVL_XATTR_IMPURE $target)
 
        [[ "$value" == "$OVL_XATTR_IMPURE_VAL" ]] || echo "Missing impure xattr"
index 68b8776ea4755e53f81a417970e6b6ca26549340..2e0764e9450f96024945c3208184f87496154c8f 100755 (executable)
@@ -24,6 +24,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common/rc
 . ./common/filter
+. ./common/attr
 
 # remove previous $seqres.full before test
 rm -f $seqres.full
@@ -58,7 +59,7 @@ check_metacopy()
        local out_f target_f
        local msg
 
-        out_f=$($GETFATTR_PROG --absolute-names --only-values -n \
+        out_f=$(_getfattr --absolute-names --only-values -n \
                $OVL_XATTR_METACOPY $target 2>&1 | _filter_scratch)
 
        if [ "$exist" == "y" ];then
@@ -86,7 +87,7 @@ check_redirect()
        local target=$1
        local expect=$2
 
-       value=$($GETFATTR_PROG --absolute-names --only-values -n \
+       value=$(_getfattr --absolute-names --only-values -n \
                $OVL_XATTR_REDIRECT $target)
 
        [[ "$value" == "$expect" ]] || echo "Redirect xattr incorrect. Expected=\"$expect\", actual=\"$value\""
index 30ece33706017ad8719e1c3d4951a84890ed4696..305b32273c51d4232c46dff628252f073a82b3ac 100755 (executable)
@@ -90,7 +90,7 @@ echo "File xattrs after crash and log replay:"
 for ((i = 1; i <= $num_xattrs; i++)); do
        name="user.attr_$(printf "%04d" $i)"
        echo -n "$name="
-       $GETFATTR_PROG --absolute-names -n $name --only-values $SCRATCH_MNT/foo
+       _getfattr --absolute-names -n $name --only-values $SCRATCH_MNT/foo
        echo
 done
 
index e600b81846a3da2c3d8932adeb1f8e29c7a22381..336b5980057233c9800ee1a1bcbb54a6722377e2 100755 (executable)
@@ -41,9 +41,9 @@ _attr()
        return $exit
 }
 
-_getfattr()
+do_getfattr()
 {
-       ${GETFATTR_PROG} $* 2>$tmp.err >$tmp.out
+       _getfattr $* 2>$tmp.err >$tmp.out
        exit=$?
        sed \
            -e "s#$SCRATCH_MNT[^ .:]*#<TESTFILE>#g" \
@@ -79,7 +79,7 @@ echo "*** make test file 1"
 touch $testfile.1
 echo "v1" | _attr -s "a1" $testfile.1 >/dev/null
 echo "v2--" | _attr -s "a2--" $testfile.1 >/dev/null
-_getfattr --absolute-names $testfile.1
+do_getfattr --absolute-names $testfile.1
 inum_1=`ls -li $testfile.1 | $AWK_PROG '{ print $1 }'`
 
 echo "*** make test file 2"
@@ -89,7 +89,7 @@ echo "value_1" | _attr -s "a1" $testfile.2 >/dev/null
 echo "value_2" | _attr -s "a2-----" $testfile.2 >/dev/null
 ( echo start; POSIXLY_CORRECT=yes dd if=/dev/zero bs=65525 count=1; echo end )\
        | _attr -s "a3" $testfile.2 >/dev/null
-_getfattr --absolute-names $testfile.2
+do_getfattr --absolute-names $testfile.2
 
 # print name and size from 1st line of output
 _attr -g "a3" $testfile.2 > $tmp.hahahahaplonk
index e705cf553467281af958b4fb946ca86853eb2cea..b666f94d3f903f5f009043a70646c3d6bfb71883 100755 (executable)
@@ -105,7 +105,7 @@ _scratch_mount -o noattr2
 cd $SCRATCH_MNT
 touch testfile
 $SETFATTR_PROG -n user.test -v 0xbabe testfile
-$GETFATTR_PROG testfile
+_getfattr testfile
 cd $here
 $UMOUNT_PROG $SCRATCH_MNT
 _scratch_xfs_db -r -c version 2>&1 | _filter_version