btrfs-progs: tests: filter output for run_check_stdout

Since run_check_stdout() can insert INSTRUMENT for all btrfs related
programs, which could easily pollute the stdout, any caller of
run_check_stdout() should do proper filter.

The following callers are affected:
- misc/004
  Filter the output of "btrfs ins min-dev-size"

- misc/009
- misc/013
- misc/024
  They are all calling "btrfs ins rootid", so introduce get_subvolid()
  function to grab the subvolid properly.

- misc/031
  Loose the filter for "btrfs qgroup show". No need for "tail -n 1".

So we still have the same coverage, but now these tests won't cause
false alert if we insert INSTRUMENT for all btrfs commands.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo 2020-04-07 15:18:44 +08:00 committed by David Sterba
parent 82464a03e7
commit 8c759d5a06
6 changed files with 33 additions and 20 deletions

View file

@ -169,6 +169,9 @@ run_check()
# same as run_check but the stderr+stdout output is duplicated on stdout and
# can be processed further
#
# NOTE: If this function is called on btrfs related commands, caller should
# filter the output, as INSTRUMENT can easily pollute the output.
run_check_stdout()
{
local spec
@ -636,6 +639,16 @@ check_min_kernel_version()
return 0
}
# Get subvolume id for specified path
_get_subvolid()
{
# run_check_stdout may have INSTRUMENT polluting the output, we need to
# filter the output
run_check_stdout "$TOP/btrfs" inspect-internal rootid "$1" | \
grep -e "^[[:digit:]]\+$"
}
# compare running kernel version to the given parameter, return success
# if running is newer than requested (let caller decide if to fail or skip)
# $1: minimum version of running kernel in major.minor format (eg. 4.19)

View file

@ -11,11 +11,18 @@ check_prereq btrfs
setup_root_helper
_get_min_dev_size()
{
size=$(run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal \
min-dev-size ${1:+--id "$1"} "$TEST_MNT" | \
grep -e "^[[:digit:]]\+.*)$" | cut -d ' ' -f 1)
echo "$size"
}
# Optionally take id of the device to shrink
shrink_test()
{
min_size=$(run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal min-dev-size ${1:+--id "$1"} "$TEST_MNT")
min_size=$(echo "$min_size" | cut -d ' ' -f 1)
min_size=$(_get_min_dev_size "$1")
_log "min size = ${min_size}"
if [ -z "$min_size" ]; then
_fail "Failed to parse minimum size"

View file

@ -31,7 +31,7 @@ done
run_check $SUDO_HELPER "$TOP/btrfs" subvolume list .
run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d .
idtodel=`run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal rootid snap3`
idtodel=$(_get_subvolid snap3)
# delete, sync after some time
run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete -c snap3

View file

@ -32,7 +32,7 @@ done
run_check $SUDO_HELPER "$TOP/btrfs" subvolume list .
run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d .
idtodel=`run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal rootid snap3`
idtodel=`$SUDO_HELPER "$TOP/btrfs" inspect-internal rootid snap3`
# delete, sync after some time
run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete -c snap*

View file

@ -21,20 +21,13 @@ run_check touch file1
run_check touch dir/file2
run_check touch sub/file3
id1=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid .) \
|| { echo $id1; exit 1; }
id2=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub) \
|| { echo $id2; exit 1; }
id3=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub/subsub) \
|| { echo $id3; exit 1; }
id4=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid dir) \
|| { echo $id4; exit 1; }
id5=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid file1) \
|| { echo $id5; exit 1; }
id6=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid dir/file2) \
|| { echo $id6; exit 1; }
id7=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub/file3) \
|| { echo $id7; exit 1; }
id1=$(_get_subvolid .) || { echo $id1; exit 1; }
id2=$(_get_subvolid sub) || { echo $id2; exit 1; }
id3=$(_get_subvolid sub/subsub) || { echo $id3; exit 1; }
id4=$(_get_subvolid dir) || { echo $id4; exit 1; }
id5=$(_get_subvolid file1) || { echo $id5; exit 1; }
id6=$(_get_subvolid dir/file2) || { echo $id6; exit 1; }
id7=$(_get_subvolid sub/file3) || { echo $id7; exit 1; }
if ! ([ "$id1" -ne "$id2" ] && [ "$id1" -ne "$id3" ] && [ "$id2" -ne "$id3" ]); then
_fail "inspect-internal rootid: each subvolume must have different id"

View file

@ -18,10 +18,10 @@ run_check $SUDO_HELPER "$TOP/btrfs" qgroup assign 0/5 1/0 "$TEST_MNT"
run_check $SUDO_HELPER "$TOP/btrfs" quota rescan -w "$TEST_MNT"
run_check_stdout $SUDO_HELPER "$TOP/btrfs" qgroup show --sort=-qgroupid \
-p "$TEST_MNT" | tail -n 1 | grep -q "1/0" \
-p "$TEST_MNT" | grep -q "1/0" \
|| _fail "parent qgroup check failed, please check the log"
run_check_stdout $SUDO_HELPER "$TOP/btrfs" qgroup show --sort=qgroupid \
-c "$TEST_MNT" | tail -n 1 | grep -q "0/5" \
-c "$TEST_MNT" | grep -q "0/5" \
|| _fail "child qgroup check failed, please check the log"
run_check_umount_test_dev "$TEST_MNT"