diff --git a/tests/common b/tests/common index d7d2e9be..ccdadd5f 100644 --- a/tests/common +++ b/tests/common @@ -9,6 +9,12 @@ _fail() exit 1 } +_not_run() +{ + echo " [NOTRUN] $*" + exit 0 +} + run_check() { echo "############### $@" >> $RESULT 2>&1 @@ -51,14 +57,44 @@ check_all_images() # some tests need to mount the recovered image and do verifications call # 'setup_root_helper' and then check for have_root_helper == 1 if the test # needs to fail otherwise; using sudo by default for now -sudo= -have_root_helper=0 -export sudo -export have_root_helper +_sudo= +need_validate=-1 +export _sudo +export need_validate +root_helper() +{ + if [ $UID -eq 0 ]; then + $* + else + if [ $need_validate -eq 1 ]; then + sudo -v -n &> /dev/null || \ + _not_run "Need validate sudo credential" + sudo -n $* + elif [ $need_validate -eq 0 ]; then + sudo -n true &> /dev/null || \ + _not_run "Need validate sudo user setting" + sudo -n $* + else + # should not happen + _not_run "Need validate root privilege" + fi + fi +} + setup_root_helper() { - if [ $UID != 0 ]; then - sudo="sudo --non-interactive" + if [ $UID -eq 0 ]; then + return fi - have_root_helper=1 + # Test for old sudo or special setting, which makes sudo -v fails even + # user is set NOPASSWD + sudo -n true &> /dev/null && need_validate=0 + + # Newer sudo or default sudo setting + sudo -v -n &> /dev/null && need_validate=1 + + if [ $need_validate -eq -1 ]; then + _not_run "Need validate root privilege" + fi + _sudo=root_helper } diff --git a/tests/fsck-tests/012-leaf-corruption/test.sh b/tests/fsck-tests/012-leaf-corruption/test.sh index 896f717a..5873e3fb 100755 --- a/tests/fsck-tests/012-leaf-corruption/test.sh +++ b/tests/fsck-tests/012-leaf-corruption/test.sh @@ -55,20 +55,20 @@ check_inode() name=$5 # Check whether the inode exists - exists=$($sudo find $path -inum $ino) + exists=$($_sudo find $path -inum $ino) if [ -z "$exists" ]; then _fail "inode $ino not recovered correctly" fi # Check inode type - found_mode=$(printf "%o" 0x$($sudo stat $exists -c %f)) + found_mode=$(printf "%o" 0x$($_sudo stat $exists -c %f)) if [ $found_mode -ne $mode ]; then echo "$found_mode" _fail "inode $ino modes not recovered" fi # Check inode size - found_size=$($sudo stat $exists -c %s) + found_size=$($_sudo stat $exists -c %s) if [ $mode -ne 41700 -a $found_size -ne $size ]; then _fail "inode $ino size not recovered correctly" fi @@ -85,16 +85,12 @@ check_inode() check_leaf_corrupt_no_data_ext() { image=$1 - if [ $have_root_helper -ne 1 ]; then - echo " [NOTRUN] root privileges needed to verify recovery" - exit 0 - fi if [ -z $TEST_MNT ]; then echo "\$TEST_MNT not set, use $(pwd)/tmp as fallback" TEST_MNT="$(pwd)/tmp" fi mkdir -p $TEST_MNT || _fail "failed to create mount point" - $sudo mount $image -o ro $TEST_MNT + $_sudo mount $image -o ro $TEST_MNT i=0 while [ $i -lt ${#leaf_no_data_ext_list[@]} ]; do @@ -106,7 +102,7 @@ check_leaf_corrupt_no_data_ext() ${leaf_no_data_ext_list[i + 4]} ((i+=4)) done - $sudo umount $TEST_MNT + $_sudo umount $TEST_MNT } setup_root_helper