diff options
-rwxr-xr-x | extras/rpc-coverage.sh | 189 |
1 files changed, 88 insertions, 101 deletions
diff --git a/extras/rpc-coverage.sh b/extras/rpc-coverage.sh index ce12fddb4d4..ebb92a2a148 100755 --- a/extras/rpc-coverage.sh +++ b/extras/rpc-coverage.sh @@ -44,14 +44,18 @@ # WRITE # XATTROP -set -e; +#set -e; set -o pipefail; +function fail() { + echo "$*: failed."; + exit 1; +} + function test_mkdir() { mkdir -p $PFX/dir; - - test $(stat -c '%F' $PFX/dir) == "directory"; + test $(stat -c '%F' $PFX/dir) == "directory" || fail "mkdir" } @@ -59,7 +63,7 @@ function test_create() { : > $PFX/dir/file; - test "$(stat -c '%F' $PFX/dir/file)" == "regular empty file"; + test "$(stat -c '%F' $PFX/dir/file)" == "regular empty file" || fail "create" } @@ -68,23 +72,21 @@ function test_statfs() local size; size=$(stat -f -c '%s' $PFX/dir/file); - - test "x$size" != "x0"; + test "x$size" != "x0" || fail "statfs" } function test_open() { - exec 4<$PFX/dir/file; - exec 4>&-; + exec 4<$PFX/dir/file || fail "open" + exec 4>&- || fail "open" } function test_write() { dd if=/dev/zero of=$PFX/dir/file bs=65536 count=16 2>/dev/null; - - test $(stat -c '%s' $PFX/dir/file) == 1048576; + test $(stat -c '%s' $PFX/dir/file) == 1048576 || fail "open" } @@ -93,20 +95,17 @@ function test_read() local count; count=$(dd if=$PFX/dir/file bs=64k count=16 2>/dev/null | wc -c); - - test $count == 1048576; + test $count == 1048576 || fail "read" } function test_truncate() { truncate -s 512 $PFX/dir/file; - - test $(stat -c '%s' $PFX/dir/file) == 512; + test $(stat -c '%s' $PFX/dir/file) == 512 || fail "truncate" truncate -s 0 $PFX/dir/file; - - test $(stat -c '%s' $PFX/dir/file) == 0; + test $(stat -c '%s' $PFX/dir/file) == 0 || fail "truncate" } @@ -116,24 +115,23 @@ function test_fstat() export PFX; msg=$(sh -c 'tail -f $PFX/dir/file --pid=$$ & sleep 1 && echo hooha > $PFX/dir/file && sleep 1'); - - test "x$msg" == "xhooha"; + test "x$msg" == "xhooha" || fail "fstat" } function test_mknod() { mknod -m 0666 $PFX/dir/block b 13 42; - - test "$(stat -c '%F %a %t %T' $PFX/dir/block)" == "block special file 666 d 2a"; + test "$(stat -c '%F %a %t %T' $PFX/dir/block)" == "block special file 666 d 2a" \ + || fail "mknod for block device" mknod -m 0666 $PFX/dir/char c 13 42; - - test "$(stat -c '%F %a %t %T' $PFX/dir/char)" == "character special file 666 d 2a"; + test "$(stat -c '%F %a %t %T' $PFX/dir/char)" == "character special file 666 d 2a" \ + || fail "mknod for character device" mknod -m 0666 $PFX/dir/fifo p; - - test "$(stat -c '%F %a' $PFX/dir/fifo)" == "fifo 666"; + test "$(stat -c '%F %a' $PFX/dir/fifo)" == "fifo 666" || \ + fail "mknod for fifo" } @@ -142,12 +140,10 @@ function test_symlink() local msg; ln -s $PFX/dir/file $PFX/dir/symlink; - - test "$(stat -c '%F' $PFX/dir/symlink)" == "symbolic link"; + test "$(stat -c '%F' $PFX/dir/symlink)" == "symbolic link" || fail "Creation of symlink" msg=$(cat $PFX/dir/symlink); - - test "x$msg" == "xhooha"; + test "x$msg" == "xhooha" || fail "Content match for symlink" } @@ -166,13 +162,13 @@ function test_hardlink() ino2=$(stat -c '%i' $PFX/dir/hardlink); nlink2=$(stat -c '%h' $PFX/dir/hardlink); - test $ino1 == $ino2; - test $nlink1 == 2; - test $nlink2 == 2; + test $ino1 == $ino2 || fail "Inode comparison for hardlink" + test $nlink1 == 2 || fail "Link count for hardlink" + test $nlink2 == 2 || fail "Link count for hardlink" msg=$(cat $PFX/dir/hardlink); - test "x$msg" == "xhooha"; + test "x$msg" == "xhooha" || fail "Content match for hardlinks" } @@ -187,35 +183,31 @@ function test_rename() ino1=$(stat -c '%i' $PFX/dir/file); - mv $PFX/dir/file $PFX/dir/file2; - + mv $PFX/dir/file $PFX/dir/file2 || fail "mv" msg=$(cat $PFX/dir/file2); - test "x$msg" == "xhooha"; + test "x$msg" == "xhooha" || fail "File contents comparison after mv" ino2=$(stat -c '%i' $PFX/dir/file2); - test $ino1 == $ino2; + test $ino1 == $ino2 || fail "Inode comparison after mv" mv $PFX/dir/file2 $PFX/dir/file; - msg=$(cat $PFX/dir/file); - test "x$msg" == "xhooha"; + test "x$msg" == "xhooha" || fail "File contents comparison after mv" ino3=$(stat -c '%i' $PFX/dir/file); - test $ino1 == $ino3; + test $ino1 == $ino3 || fail "Inode comparison after mv" #### dir ino1=$(stat -c '%i' $PFX/dir); - mv $PFX/dir $PFX/dir2; - + mv $PFX/dir $PFX/dir2 || fail "Directory mv" ino2=$(stat -c '%i' $PFX/dir2); - test $ino1 == $ino2; - - mv $PFX/dir2 $PFX/dir; + test $ino1 == $ino2 || fail "Inode comparison after directory mv" + mv $PFX/dir2 $PFX/dir || fail "Directory mv" ino3=$(stat -c '%i' $PFX/dir); - test $ino1 == $ino3; + test $ino1 == $ino3 || fail "Inode comparison after directory mv" } @@ -229,32 +221,26 @@ function test_chmod() #### file mode0=$(stat -c '%a' $PFX/dir/file); - - chmod 0753 $PFX/dir/file; + chmod 0753 $PFX/dir/file || fail "chmod" mode1=$(stat -c '%a' $PFX/dir/file); - test 0$mode1 == 0753; - - chmod 0$mode0 $PFX/dir/file; + test 0$mode1 == 0753 || fail "Mode comparison after chmod" + chmod 0$mode0 $PFX/dir/file || fail "chmod" mode2=$(stat -c '%a' $PFX/dir/file); - - test 0$mode2 == 0$mode0; + test 0$mode2 == 0$mode0 || fail "Mode comparison after chmod" #### dir mode0=$(stat -c '%a' $PFX/dir); - - chmod 0753 $PFX/dir; + chmod 0753 $PFX/dir || fail "chmod" mode1=$(stat -c '%a' $PFX/dir); - test 0$mode1 == 0753; - - chmod 0$mode0 $PFX/dir; + test 0$mode1 == 0753 || fail "Mode comparison after chmod" + chmod 0$mode0 $PFX/dir || fail "chmod" mode2=$(stat -c '%a' $PFX/dir); - - test 0$mode2 == 0$mode0; + test 0$mode2 == 0$mode0 || fail "Mode comparison after chmod" } @@ -270,42 +256,42 @@ function test_chown() user1=$(stat -c '%u' $PFX/dir/file); group1=$(stat -c '%g' $PFX/dir/file); - chown 13:42 $PFX/dir/file; + chown 13:42 $PFX/dir/file || fail "chown" user2=$(stat -c '%u' $PFX/dir/file); group2=$(stat -c '%g' $PFX/dir/file); - test $user2 == 13; - test $group2 == 42; + test $user2 == 13 || fail "User comparison after chown" + test $group2 == 42 || fail "Group comparison after chown" - chown $user1:$group1 $PFX/dir/file; + chown $user1:$group1 $PFX/dir/file || fail "chown" user2=$(stat -c '%u' $PFX/dir/file); group2=$(stat -c '%g' $PFX/dir/file); - test $user2 == $user1; - test $group2 == $group1; + test $user2 == $user1 || fail "User comparison after chown" + test $group2 == $group1 || fail "Group comparison after chown" #### dir user1=$(stat -c '%u' $PFX/dir); group1=$(stat -c '%g' $PFX/dir); - chown 13:42 $PFX/dir; + chown 13:42 $PFX/dir || fail "chown" user2=$(stat -c '%u' $PFX/dir); group2=$(stat -c '%g' $PFX/dir); - test $user2 == 13; - test $group2 == 42; + test $user2 == 13 || fail "User comparison after chown" + test $group2 == 42 || fail "Group comparison after chown" - chown $user1:$group1 $PFX/dir; + chown $user1:$group1 $PFX/dir || fail "chown" user2=$(stat -c '%u' $PFX/dir); group2=$(stat -c '%g' $PFX/dir); - test $user2 == $user1; - test $group2 == $group1; + test $user2 == $user1 || fail "User comparison after chown" + test $group2 == $group1 || fail "Group comparison after chown" } @@ -324,21 +310,21 @@ function test_utimes() mod0=$(stat -c '%Y' $PFX/dir/file); sleep 1; - touch -a $PFX/dir/file; + touch -a $PFX/dir/file || fail "atime change on file" acc1=$(stat -c '%X' $PFX/dir/file); mod1=$(stat -c '%Y' $PFX/dir/file); sleep 1; - touch -m $PFX/dir/file; + touch -m $PFX/dir/file || fail "mtime change on file" acc2=$(stat -c '%X' $PFX/dir/file); mod2=$(stat -c '%Y' $PFX/dir/file); - test $acc0 != $acc1; - test $acc1 == $acc2; - test $mod0 == $mod1; - test $mod1 != $mod2; + test $acc0 != $acc1 || fail "atime mismatch comparison on file" + test $acc1 == $acc2 || fail "atime match comparison on file" + test $mod0 == $mod1 || fail "mtime match comparison on file" + test $mod1 != $mod2 || fail "mtime mismatch comparison on file" #### dir @@ -346,85 +332,86 @@ function test_utimes() mod0=$(stat -c '%Y' $PFX/dir); sleep 1; - touch -a $PFX/dir; + touch -a $PFX/dir || fail "atime change on directory" acc1=$(stat -c '%X' $PFX/dir); mod1=$(stat -c '%Y' $PFX/dir); sleep 1; - touch -m $PFX/dir; + touch -m $PFX/dir || fail "mtime change on directory" acc2=$(stat -c '%X' $PFX/dir); mod2=$(stat -c '%Y' $PFX/dir); - test $acc0 != $acc1; - test $acc1 == $acc2; - test $mod0 == $mod1; - test $mod1 != $mod2; + test $acc0 != $acc1 || fail "atime mismatch comparison on directory" + test $acc1 == $acc2 || fail "atime match comparison on directory" + test $mod0 == $mod1 || fail "mtime match comparison on directory" + test $mod1 != $mod2 || fail "mtime mismatch comparison on directory" } function test_locks() { - exec 200>$PFX/dir/lockfile; + exec 200>$PFX/dir/lockfile || fail "exec" ## exclusive locks test - flock -e 200; - ! flock -n -e $PFX/dir/lockfile -c true; - ! flock -n -s $PFX/dir/lockfile -c true; - flock -u 200; + flock -e 200 || fail "flock -e" + ! flock -n -e $PFX/dir/lockfile -c true || fail "! flock -n -e" + ! flock -n -s $PFX/dir/lockfile -c true || fail "! flock -n -s" + flock -u 200 || fail "flock -u" ## shared locks test - flock -s 200; - ! flock -n -e $PFX/dir/lockfile -c true; - flock -n -s $PFX/dir/lockfile -c true; - flock -u 200; + flock -s 200 || fail "flock -s" + ! flock -n -e $PFX/dir/lockfile -c true || fail "! flock -n -e" + flock -n -s $PFX/dir/lockfile -c true || fail "! flock -n -s" + flock -u 200 || fail "flock -u" - exec 200>&-; + exec 200>&- || fail "exec" } function test_readdir() { - /bin/ls $PFX/dir >/dev/null + /bin/ls $PFX/dir >/dev/null || fail "ls" } function test_setxattr() { - setfattr -n trusted.testing -v c00k33 $PFX/dir/file; + setfattr -n trusted.testing -v c00k33 $PFX/dir/file || fail "setfattr" } function test_listxattr() { - getfattr -m trusted $PFX/dir/file 2>/dev/null | grep -q trusted.testing; + getfattr -m trusted $PFX/dir/file 2>/dev/null | grep -q trusted.testing || fail "getfattr" } function test_getxattr() { - getfattr -n trusted.testing $PFX/dir/file 2>/dev/null | grep -q c00k33; + getfattr -n trusted.testing $PFX/dir/file 2>/dev/null | grep -q c00k33 || fail "getfattr" } function test_removexattr() { - setfattr -x trusted.testing $PFX/dir/file; - getfattr -n trusted.testing $PFX/dir/file 2>&1 | grep -q 'No such attribute'; + setfattr -x trusted.testing $PFX/dir/file || fail "setfattr remove" + getfattr -n trusted.testing $PFX/dir/file 2>&1 | grep -q 'No such attribute' \ + || fail "getfattr" } function test_unlink() { - rm $PFX/dir/file; + rm $PFX/dir/file || fail "rm" } function test_rmdir() { - rm -rf $PFX; + rm -rf $PFX || fail "rm -rf" } |