xfs: test the xfs_db path command
authorDarrick J. Wong <djwong@kernel.org>
Tue, 23 Mar 2021 04:20:24 +0000 (21:20 -0700)
committerEryu Guan <guaneryu@gmail.com>
Sun, 28 Mar 2021 17:02:29 +0000 (01:02 +0800)
Add a new test to make sure the xfs_db path command works the way the
author thinks it should.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/xfs/150 [new file with mode: 0755]
tests/xfs/150.out [new file with mode: 0644]

diff --git a/tests/xfs/150 b/tests/xfs/150
new file mode 100755 (executable)
index 0000000..a0bad47
--- /dev/null
@@ -0,0 +1,98 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2021 Oracle.  All Rights Reserved.
+# FS QA Test No. 150
+# Make sure the xfs_db path command works the way the author thinks it does.
+# This means that it can navigate to random inodes, fails on paths that don't
+# resolve.
+seq=`basename $0`
+echo "QA output created by $seq"
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+       cd /
+       rm -f $tmp.*
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+# real QA test starts here
+_supported_fs xfs
+_require_xfs_db_command "path"
+echo "Format filesystem and populate"
+_scratch_mkfs > $seqres.full
+_scratch_mount >> $seqres.full
+mkdir $SCRATCH_MNT/a
+mkdir $SCRATCH_MNT/a/b
+$XFS_IO_PROG -f -c 'pwrite 0 61' $SCRATCH_MNT/a/c >> $seqres.full
+ln -s -f c $SCRATCH_MNT/a/d
+mknod $SCRATCH_MNT/a/e b 8 0
+ln -s -f b $SCRATCH_MNT/a/f
+echo "Check xfs_db path on directories"
+_scratch_xfs_db -c 'path /a' -c print | grep -q 'sfdir.*count.* 5$' || \
+       echo "Did not find directory /a"
+_scratch_xfs_db -c 'path /a/b' -c print | grep -q sfdir || \
+       echo "Did not find empty sf directory /a/b"
+echo "Check xfs_db path on files"
+_scratch_xfs_db -c 'path /a/c' -c print | grep -q 'core.size.*61' || \
+       echo "Did not find 61-byte file /a/c"
+echo "Check xfs_db path on file symlinks"
+_scratch_xfs_db -c 'path /a/d' -c print | grep -q symlink || \
+       echo "Did not find symlink /a/d"
+echo "Check xfs_db path on bdevs"
+_scratch_xfs_db -c 'path /a/e' -c print | grep -q 'format.*dev' || \
+       echo "Did not find bdev /a/e"
+echo "Check xfs_db path on dir symlinks"
+_scratch_xfs_db -c 'path /a/f' -c print | grep -q symlink || \
+       echo "Did not find symlink /a/f"
+echo "Check nonexistent path"
+_scratch_xfs_db -c 'path /does/not/exist'
+echo "Check xfs_db path on file path with multiple slashes"
+_scratch_xfs_db -c 'path /a////////c' -c print | grep -q 'core.size.*61' || \
+       echo "Did not find 61-byte file /a////////c"
+echo "Check xfs_db path on file path going in and out of /a to get to /a/c"
+_scratch_xfs_db -c 'path /a/.././a/.././a/c' -c print | grep -q 'core.size.*61' || \
+       echo "Did not find 61-byte file /a/.././a/.././a/c"
+echo "Check xfs_db path on file path going above the root to get to /a/c"
+_scratch_xfs_db -c 'path /../../../a/c' -c print | grep -q 'core.size.*61' || \
+       echo "Did not find 61-byte file  /../../../a/c"
+echo "Check xfs_db path on file path going to then above the root to get to /a/c"
+_scratch_xfs_db -c 'path /a/../../../a/c' -c print | grep -q 'core.size.*61' || \
+       echo "Did not find 61-byte file  /a/../../../a/c"
+echo "Check xfs_db path component that isn't a directory"
+_scratch_xfs_db -c 'path /a/c/b' -c print
+echo "Check xfs_db path on a dot-dot applied to a non-directory"
+_scratch_xfs_db -c 'path /a/c/../b' -c print
+# success, all done
diff --git a/tests/xfs/150.out b/tests/xfs/150.out
new file mode 100644 (file)
index 0000000..4cd534f
--- /dev/null
@@ -0,0 +1,19 @@
+QA output created by 150
+Format filesystem and populate
+Check xfs_db path on directories
+Check xfs_db path on files
+Check xfs_db path on file symlinks
+Check xfs_db path on bdevs
+Check xfs_db path on dir symlinks
+Check nonexistent path
+/does/not/exist: No such file or directory
+Check xfs_db path on file path with multiple slashes
+Check xfs_db path on file path going in and out of /a to get to /a/c
+Check xfs_db path on file path going above the root to get to /a/c
+Check xfs_db path on file path going to then above the root to get to /a/c
+Check xfs_db path component that isn't a directory
+/a/c/b: Not a directory
+no current type
+Check xfs_db path on a dot-dot applied to a non-directory
+/a/c/../b: Not a directory
+no current type
index 74fd05d..a8b61a7 100644 (file)
 147 auto quick rw realtime collapse insert unshare zero prealloc
 148 auto quick fuzzers
 149 auto quick growfs
+150 auto quick db
 164 rw pattern auto prealloc quick
 165 rw pattern auto prealloc quick
 166 rw metadata auto quick