From 15be1c1a00089ad4d9de18f1351c17d067949b61 Mon Sep 17 00:00:00 2001 From: Manikandan Selvaganesh Date: Tue, 12 Jan 2016 16:58:57 +0530 Subject: tests/quota : improving tests for quota tests/basic/quota.t includes all the basic test that needs to be tested for quota. In most of the other tests specific to bugs(tests/bugs/quota/*), tests such as creating and starting volume, enabling quota, setting limit, writing data, doing list have been done which is essential to write a individual quota test file, but, if the specific bug just needs to test *few* particular cases, I have moved those tests under tests/basic itself to speedup the regressions. Basics of inode-quota and it's enforcing, renaming with quota are basic tests and is hence moved under tests/basic folder. In other files, I have removed tests which are not needed, such as 'pidof glusterd' or checking for 'gluster volume info' or if there are any test which is already being tested under tests/basic and is being written again. Change-Id: Iefd6d9529246d59829cc5bf02687a1861d8462a8 BUG: 1294826 Signed-off-by: Manikandan Selvaganesh Reviewed-on: http://review.gluster.org/13216 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Vijaikumar Mallikarjuna Reviewed-by: Jeff Darcy --- tests/basic/inode-quota-enforcing.t | 84 +++++++++++++++++++++++++++++++++++++ tests/basic/inode-quota.t | 40 ++++++++++++++++++ tests/basic/quota-rename.t | 37 ++++++++++++++++ tests/basic/quota.t | 71 +++++++++++++++++++++++++++---- 4 files changed, 225 insertions(+), 7 deletions(-) create mode 100644 tests/basic/inode-quota-enforcing.t create mode 100644 tests/basic/inode-quota.t create mode 100644 tests/basic/quota-rename.t (limited to 'tests/basic') diff --git a/tests/basic/inode-quota-enforcing.t b/tests/basic/inode-quota-enforcing.t new file mode 100644 index 00000000000..44b6c52a1ed --- /dev/null +++ b/tests/basic/inode-quota-enforcing.t @@ -0,0 +1,84 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc +. $(dirname $0)/../nfs.rc + +cleanup; + +TESTS_EXPECTED_IN_LOOP=9 + +TEST glusterd + +# -------------------------------------------------- +# Create, start and mount a volume with single brick +# -------------------------------------------------- + +TEST $CLI volume create $V0 $H0:$B0/{V0} + +TEST $CLI volume start $V0 + +TEST $GFS -s $H0 --volfile-id $V0 $M0 +TEST mkdir -p $M0/test_dir + +#-------------------------------------------------------- +# Enable quota of the volume and set hard and soft timeout +#------------------------------------------------------ + +TEST $CLI volume quota $V0 enable +EXPECT 'on' volinfo_field $V0 'features.quota' +TEST $CLI volume quota $V0 soft-timeout 0 +EXPECT '0' volinfo_field $V0 'features.soft-timeout' +TEST $CLI volume quota $V0 hard-timeout 0 +EXPECT '0' volinfo_field $V0 'features.hard-timeout' + + +#------------------------------------------------------- +# Set and remove quota limits on the directory and +# verify if the limits are being reflected properly +#------------------------------------------------------ + +TEST $CLI volume quota $V0 limit-objects /test_dir 100 +EXPECT "100" quota_object_list_field "/test_dir" 2 + +# Need to verify this once +TEST $CLI volume quota $V0 remove-objects /test_dir +EXPECT "" quota_object_list_field "/test_dir" 2 + +# Set back the limits + +TEST $CLI volume quota $V0 limit-objects /test_dir 10 +EXPECT "10" quota_object_list_field "/test_dir" 2 + +#------------------------------------------------------ +# Check the quota enforcement mechanism for object count +#------------------------------------------------------- + +# Try creating 9 files and it should succeed as object limit +# is set to 10, since directory where limit is set is accounted +# as well. + +for i in {1..9}; do + TEST_IN_LOOP touch $M0/test_dir/test$i.txt +done +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "9" quota_object_list_field "/test_dir" 4 + +# Check available limit +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0" quota_object_list_field "/test_dir" 6 + +# Check if hard-limit exceeded +EXPECT "Yes" quota_object_list_field "/test_dir" 8 + +# Check if soft-limit exceeded +EXPECT "Yes" quota_object_list_field "/test_dir" 7 + +# Creation of 11th file should throw out an error +TEST ! touch $M0/test_dir/test11.txt + +TEST rm -rf $M0/test_dir/test* +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0" quota_object_list_field "/test_dir" 4 + +TEST $CLI volume quota $V0 remove-objects /test_dir + +rm -f $QDD +cleanup; diff --git a/tests/basic/inode-quota.t b/tests/basic/inode-quota.t new file mode 100644 index 00000000000..4b5ac44ee19 --- /dev/null +++ b/tests/basic/inode-quota.t @@ -0,0 +1,40 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +function get_quota_value() +{ + local LIST_TYPE=$1 + local LIMIT_PATH=$2; + $CLI volume quota $V0 $LIST_TYPE $LIMIT_PATH | grep "$LIMIT_PATH"\ + | awk '{print $2}' +} + +cleanup; + +TEST glusterd; + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1,2}; +TEST $CLI volume start $V0; +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0; + +TEST $CLI volume quota $V0 enable; +EXPECT "on" volinfo_field $V0 'features.quota' +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "Y" quotad_up_status; + +TEST mkdir $M0/dir; + +TEST $CLI volume quota $V0 limit-usage /dir 10MB; +EXPECT "10.0MB" get_quota_value "list" "/dir" + +TEST $CLI volume quota $V0 limit-objects /dir 10; +EXPECT "10" get_quota_value "list-objects" "/dir" + +TEST $CLI volume quota $V0 remove /dir; +EXPECT "" get_quota_value "list" "/dir" + +TEST $CLI volume quota $V0 remove-objects /dir; +EXPECT "" get_quota_value "list-objects" "/dir" + +cleanup; diff --git a/tests/basic/quota-rename.t b/tests/basic/quota-rename.t new file mode 100644 index 00000000000..37438689d9f --- /dev/null +++ b/tests/basic/quota-rename.t @@ -0,0 +1,37 @@ +#!/bin/bash + +# This regression test tries to ensure renaming a directory with content, and +# no limit set, is accounted properly, when moved into a directory with quota +# limit set. + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd + +TEST $CLI volume create $V0 $H0:$B0/${V0} +TEST $CLI volume start $V0; + +TEST $CLI volume quota $V0 enable; + +TEST glusterfs --volfile-id=$V0 --volfile-server=$H0 $M0; + +TEST $CLI volume quota $V0 hard-timeout 0 +TEST $CLI volume quota $V0 soft-timeout 0 + +TEST mkdir -p $M0/dir/dir1 +TEST $CLI volume quota $V0 limit-objects /dir 20 + +TEST mkdir $M0/dir/dir1/d{1..5} +TEST touch $M0/dir/dir1/f{1..5} +TEST mv $M0/dir/dir1 $M0/dir/dir2 + +#Number of files under /dir is 5 +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "5" quota_object_list_field "/dir" 4 + +#Number of directories under /dir is 7 +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "7" quota_object_list_field "/dir" 5 + +cleanup; diff --git a/tests/basic/quota.t b/tests/basic/quota.t index ec8fa0afcb9..887fbfc32bc 100755 --- a/tests/basic/quota.t +++ b/tests/basic/quota.t @@ -31,12 +31,20 @@ TEST $GFS -s $H0 --volfile-id $V0 $M0; TEST mkdir -p $M0/test_dir/in_test_dir -## ------------------------------ -## Verify quota commands -## ------------------------------ +## -------------------------------------------------------------------------- +## Verify quota commands and check if quota-deem-statfs is enabled by default +## -------------------------------------------------------------------------- TEST $CLI volume quota $V0 enable +EXPECT 'on' volinfo_field $V0 'features.quota' +EXPECT 'on' volinfo_field $V0 'features.inode-quota' +EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs' + +#Wait for the auxiliarymount to come up +sleep 3 TEST $CLI volume quota $V0 limit-usage /test_dir 100MB +# Checking for auxiliary mount +EXPECT "0" get_aux TEST $CLI volume quota $V0 limit-usage /test_dir/in_test_dir 150MB @@ -67,6 +75,19 @@ EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0Bytes" quotausage "/test_dir" TEST $QDD $M0/test_dir/2.txt 256 32 EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "8.0MB" quotausage "/test_dir" + +# Checking internal xattr +# This confirms that pgfid is also filtered +TEST ! "getfattr -d -e hex -m . $M0/test_dir/2.txt | grep pgfid "; +# just check for quota xattr are visible or not +TEST ! "getfattr -d -e hex -m . $M0/test_dir | grep quota"; + +# setfattr should fail +TEST ! setfattr -n trusted.glusterfs.quota.limit-set -v 10 $M0/test_dir; + +# remove xattr should fail +TEST ! setfattr -x trusted.glusterfs.quota.limit-set $M0/test_dir; + TEST rm $M0/test_dir/2.txt EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0Bytes" quotausage "/test_dir" @@ -78,6 +99,19 @@ EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "8.0MB" quotausage "/test_dir" TEST rm $M0/test_dir/0 EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0Bytes" quotausage "/test_dir" +## rename tests under different directories +TEST mkdir -p $M0/1/2; +TEST $CLI volume quota $V0 limit-usage /1/2 100MB 70%; + +# The corresponding write(3) should fail with EDQUOT ("Disk quota exceeded") +TEST ! $QDD $M0/1/2/file 256 408 + +TEST mkdir -p $M0/1/3; +TEST $QDD $M0/1/3/file 256 408 + +#The corresponding rename(3) should fail with EDQUOT ("Disk quota exceeded") +TEST ! mv $M0/1/3/ $M0/1/2/3_mvd; + ## --------------------------- ## ------------------------------ @@ -169,13 +203,36 @@ TEST getfattr -d -m "trusted.glusterfs.quota.limit-set" -e hex \ EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0 +## --------------------------- +## Test quota volume options +## --------------------------- +TEST $CLI volume reset $V0 +EXPECT 'on' volinfo_field $V0 'features.quota' +EXPECT 'on' volinfo_field $V0 'features.inode-quota' +EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs' + +TEST $CLI volume reset $V0 force +EXPECT 'on' volinfo_field $V0 'features.quota' +EXPECT 'on' volinfo_field $V0 'features.inode-quota' +EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs' + +TEST $CLI volume reset $V0 features.quota-deem-statfs +EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs' + +TEST $CLI volume set $V0 features.quota-deem-statfs off +EXPECT 'off' volinfo_field $V0 'features.quota-deem-statfs' + +TEST $CLI volume set $V0 features.quota-deem-statfs on +EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs' + TEST $CLI volume quota $V0 disable +EXPECT 'off' volinfo_field $V0 'features.quota' +EXPECT 'off' volinfo_field $V0 'features.inode-quota' +EXPECT '' volinfo_field $V0 'features.quota-deem-statfs' + +# aux mount should be removed TEST $CLI volume stop $V0; EXPECT "1" get_aux -EXPECT 'Stopped' volinfo_field $V0 'Status'; - -TEST $CLI volume delete $V0; -TEST ! $CLI volume info $V0; rm -f $QDD cleanup; -- cgit