btrfs: add basic qgroup testing
authorJosef Bacik <jbacik@fusionio.com>
Mon, 2 Dec 2013 23:29:29 +0000 (10:29 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 2 Dec 2013 23:29:29 +0000 (10:29 +1100)
We have no tests for testing qgroups, so we have no way of knowing
if our changes are breaking qgroups at all.  Get the ball rolling
with some basic functionality tests, these just make sure we can
enable quotas and do rescan and get sane values back, as well as
make sure the limiting stuff works properly.

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Reviewed-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
tests/btrfs/022 [new file with mode: 0644]
tests/btrfs/022.out [new file with mode: 0644]
tests/btrfs/group

diff --git a/tests/btrfs/022 b/tests/btrfs/022
new file mode 100644 (file)
index 0000000..5b18643
--- /dev/null
@@ -0,0 +1,129 @@
+#! /bin/bash
+# FS QA Test No. 022
+#
+# Test the basic functionality of qgroups
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2013 Fusion IO.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    cd /
+    rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+_supported_fs btrfs
+_supported_os Linux
+_require_scratch
+
+rm -f $seqres.full
+
+# Test to make sure we can actually turn it on and it makes sense
+_basic_test()
+{
+       run_check $BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/a
+       run_check $BTRFS_UTIL_PROG quota enable $SCRATCH_MNT/a
+       subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
+       $BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT | grep $subvolid >> \
+               $seqres.full 2>&1
+       [ $? -eq 0 ] || _fail "couldn't find our subvols quota group"
+       run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
+               $FSSTRESS_AVOID
+       run_check $BTRFS_UTIL_PROG subvolume snapshot $SCRATCH_MNT/a \
+               $SCRATCH_MNT/b
+
+       # the shared values of both the original subvol and snapshot should
+       # match
+       a_shared=$($BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT | grep $subvolid)
+       a_shared=$(echo $a_shared | awk '{ print $2 }')
+       subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
+       b_shared=$($BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT | grep $subvolid)
+       b_shared=$(echo $b_shared | awk '{ print $2 }')
+       [ $b_shared -eq $a_shared ] || _fail "shared values don't match"
+}
+
+#enable quotas, do some work, check our values and then rescan and make sure we
+#come up with the same answer
+_rescan_test()
+{
+       # first with a blank subvol
+       run_check $BTRFS_UTIL_PROG subvol create $SCRATCH_MNT/a
+       run_check $BTRFS_UTIL_PROG quota enable $SCRATCH_MNT/a
+       subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
+       run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
+               $FSSTRESS_AVOID
+       sync
+       output=$($BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT | grep $subvolid)
+       echo $output >> $seqres.full
+       refer=$(echo $output | awk '{ print $2 }')
+       excl=$(echo $output | awk '{ print $3 }')
+       run_check $BTRFS_UTIL_PROG quota rescan -w $SCRATCH_MNT
+       output=$($BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT | grep $subvolid)
+       echo $output >> $seqres.full
+       [ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
+               _fail "reference values don't match after rescan"
+       [ $excl -eq $(echo $output | awk '{ print $3 }') ] || \
+               _fail "exclusive values don't match after rescan"
+}
+
+#basic limit testing
+_limit_test()
+{
+       run_check $BTRFS_UTIL_PROG subvol create $SCRATCH_MNT/a
+       run_check $BTRFS_UTIL_PROG quota enable $SCRATCH_MNT
+       subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
+       run_check $BTRFS_UTIL_PROG qgroup limit 5M 0/$subvolid $SCRATCH_MNT
+       dd if=/dev/urandom of=$SCRATCH_MNT/a/file bs=10M count=1 >> \
+               $seqres.full 2>&1
+       [ $? -ne 0 ] || _fail "quota should have limited us"
+       dd if=/dev/urandom of=$SCRATCH_MNT/a/file bs=4M count=1 >> \
+               $seqres.full 2>&1
+       [ $? -eq 0 ] || _fail "should have been allowed to write"
+}
+
+_scratch_mkfs > /dev/null 2>&1
+_scratch_mount
+_basic_test
+_scratch_unmount
+
+_scratch_mkfs > /dev/null 2>&1
+_scratch_mount
+_rescan_test
+_scratch_unmount
+
+_scratch_mkfs > /dev/null 2>&1
+_scratch_mount
+_limit_test
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/btrfs/022.out b/tests/btrfs/022.out
new file mode 100644 (file)
index 0000000..394c6a7
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 022
+Silence is golden
index 410f8edba6014f9b37d296aeea55fc34e0c0e2a3..ac92d312e03d0fcff54f903ee5039614a811002e 100644 (file)
@@ -24,3 +24,4 @@
 019 auto quick
 020 auto quick
 021 auto quick
+022 auto