5 s3_user_quota.pl - Script to test the rgw user quota functionality using s3 interface.
10 perl s3_user_quota.pl [--help]
15 perl s3_user_quota.pl --help
19 This script intends to test the rgw user quota funcionality using s3 interface
20 and reports the test results
24 s3_user_quota.pl takes the following arguments:
26 (optional) Displays the usage message.
37 use lib $FindBin::Bin;
39 use Net::Domain qw(hostfqdn);
43 Getopt::Long::GetOptions(
46 Pod::Usage::pod2usage(-verbose => 1) && exit if ($help);
48 #== local variables ===
54 my $hostdom = $ENV{RGW_FQDN}||hostfqdn();
55 my $port = $ENV{RGW_PORT}||7280;
56 our $hostname = "$hostdom:$port";
60 sub quota_set_max_size_per_user {
61 my ($maxsize, $size1,$rgw_user) = @_;
63 my $set_quota = `$radosgw_admin quota set --uid=$rgw_user --quota-scope=user --max-size=$maxsize`;
64 if (($set_quota !~ /./)&&($maxsize == 0)){
65 my $ret = test_max_objs($size1, $rgw_user);
67 pass("quota set for user: $rgw_user with max_size=$maxsize passed" );
69 fail("quota set for user: $rgw_user with max_size=$maxsize failed" );
71 } elsif (($set_quota !~ /./) && ($maxsize != 0)) {
72 my $ret = test_max_objs($size1, $rgw_user);
74 pass("quota set for user: $rgw_user with max_size=$maxsize passed" );
76 fail("quota set for user: $rgw_user with max_size=$maxsize failed" );
79 delete_keys($mytestfilename);
80 purge_data($rgw_user);
84 sub max_size_per_user {
85 my ($maxsize, $size1,$rgw_user) = @_;
87 my $set_quota = `$radosgw_admin quota set --uid=$rgw_user --quota-scope=user --max-size=$maxsize`;
88 if (($set_quota !~ /./) && ($maxsize != 0)) {
89 my $ret = test_max_objs($size1, $rgw_user);
97 sub quota_set_max_obj_per_user {
99 my ($maxobjs, $size1, $rgw_user) = @_;
101 my $set_quota = `$radosgw_admin quota set --uid=$rgw_user --quota-scope=user --max-objects=$maxobjs`;
102 if (($set_quota !~ /./) && ($maxobjs == 0)){
103 my $ret = test_max_objs($size1, $rgw_user);
105 pass("quota set for user: $rgw_user with max_objects=$maxobjs passed" );
107 fail("quota set for user: $rgw_user with max_objects=$maxobjs failed" );
109 } elsif (($set_quota !~ /./) && ($maxobjs == 1)) {
110 my $ret = test_max_objs($size1, $rgw_user);
112 pass("quota set for user: $rgw_user with max_objects=$maxobjs passed" );
114 fail("quota set for user: $rgw_user with max_objects=$maxobjs failed" );
117 delete_keys($mytestfilename);
118 purge_data($rgw_user);
121 sub quota_enable_user {
123 my $en_quota = `$radosgw_admin quota enable --uid=$rgw_user --quota-scope=user`;
124 if ($en_quota !~ /./){
125 print "quota enabled for the user $rgw_user \n";
127 print "quota enable failed for the user $rgw_user \n";
133 sub quota_disable_user {
134 my $dis_quota = `$radosgw_admin quota disable --uid=$rgw_user --quota-scope=user`;
135 if ($dis_quota !~ /./){
136 print "quota disabled for the user $rgw_user \n";
138 print "quota disable failed for the user $rgw_user \n";
144 # upload a file to the bucket
146 print "adding file to bucket $bucketname: $mytestfilename\n";
147 ($bucket->add_key_filename( $mytestfilename, $testfileloc,
148 { content_type => 'text/plain', },
149 ) and (print "upload file successful\n" ) and return 0 ) or (return 1);
154 ($bucket->delete_bucket) and (print "bucket delete succeeded \n") or die $s3->err . "delete bucket failed\n" . $s3->errstr;
157 #Function to upload the given file size to bucket and verify
159 my ($size, $rgw_user) = @_;
161 quota_enable_user($rgw_user);
162 my $ret_value = upload_file();
166 # set user quota and ensure it is validated
167 sub test_user_quota_max_size{
168 my ($max_buckets,$size, $fsize) = @_;
170 foreach my $i (1..$max_buckets){
171 my $ret_value = max_size_per_user($size, $fsize, $usr );
173 if ($ret_value == $max_buckets){
174 fail( "user quota max size for $usr failed on $max_buckets buckets" );
176 pass( "user quota max size for $usr passed on $max_buckets buckets" );
178 delete_keys($mytestfilename);
182 #== Main starts here===
185 quota_set_max_obj_per_user('0', '10Mb', 'usr1');
186 quota_set_max_obj_per_user('1', '10Mb', 'usr2');
187 quota_set_max_size_per_user(0, '10Mb', 'usr1');
188 quota_set_max_size_per_user(1048576000, '1Gb', 'usr2');
189 test_user_quota_max_size(3,1048576000,'100Mb');
190 test_user_quota_max_size(2,1048576000, '1Gb');