summaryrefslogtreecommitdiffstats
path: root/tests/bugs/quota/inode-quota.t
blob: 12a18945d8bf3f16857e07e3db2c8973bc176ec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash

. $(dirname $0)/../../include.rc
. $(dirname $0)/../../volume.rc
. $(dirname $0)/../../nfs.rc

function quota_list_field () {
        local QUOTA_PATH=$1
        local FIELD=$2
        $CLI volume quota $V0 list $QUOTA_PATH | grep $QUOTA_PATH\
                                               | awk '{print $FIELD}'
}

function quota_object_list_field () {
        local QUOTA_PATH=$1
        local FIELD=$2
        $CLI volume quota $V0 list-objects $QUOTA_PATH | grep $QUOTA_PATH\
                                                       | awk '{print $FIELD}'
}

cleanup;

TESTS_EXPECTED_IN_LOOP=9

TEST glusterd
TEST pidof glusterd

# --------------------------------------------------
# Create, start and mount a volume with single brick
# --------------------------------------------------

TEST $CLI volume create $V0 $H0:$B0/{V0}
EXPECT "$V0" volinfo_field $V0 'Volume Name'
EXPECT 'Created' volinfo_field $V0 'Status'

TEST $CLI volume start $V0
EXPECT 'Started' volinfo_field $V0 'Status'

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-usage /test_dir 100MB
EXPECT "100.0MB" quota_list_field "/test_dir" 2

TEST $CLI volume quota $V0 limit-objects /test_dir 100
EXPECT "100" quota_object_list_field "/test_dir" 2

TEST $CLI volume quota $V0 remove /test_dir
EXPECT "" quota_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-usage /test_dir 10MB
EXPECT "10.0MB" quota_list_field "/test_dir" 2

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 usage
#-----------------------------------------------------

# Compile the program which basically created a file
# of required size
TEST $CC $(dirname $0)/../../basic/quota.c -o $(dirname $0)/quota

# try creating a 8MB file and it should fail
TEST $(dirname $0)/quota $M0/test_dir/test1.txt '8388608'
EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "8.0MB" quota_list_field "/test_dir" 2
TEST rm -f $M0/test_dir/test1.txt
EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0Bytes" quota_list_field "/test_dir" 2

# try creating a 15MB file and it should succeed
TEST ! $(dirname $0)/quota $M0/test_dir/test2.txt '15728640'
TEST rm -f $M0/test_dir/test2.txt


#------------------------------------------------------
# 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 "10" quota_object_list_field "/test_dir" 4

# Check available limit
EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0" quota_object_list_field "/test_dir" 5

# Check if hard-limit exceeded
EXPECT "Yes" quota_object_list_field "/test_dir" 7

# Check if soft-limit exceeded
EXPECT "Yes" quota_object_list_field "/test_dir" 6

# 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

TEST $CLI volume stop $V0
TEST $CLI volume delete $V0

cleanup;