#!/usr/bin/perl use Amazon::S3; use Data::Dumper; use strict; use IO::File; use Getopt::Long; use Digest::MD5; use S3Lib qw(get_hostname get_user_info $rgw_user delete_user _write_log_entry _exit_result); my $exit_status=0; my $tc; my $mytestfilename; my $logmsg; my $kruft; my $counter; my $fillfile; my $maxcount=1000; my $sec; my $min; my $hour; my $mon; my $year; my $mday; my $wday; my $yday; my $isdst; my $s3; my $domain = "front.sepia.ceph.com"; my $host = get_hostname(); chomp($host); my $hostname = "$host.$domain"; sub _exit_result { open (TCOMP, '>>test_completed.txt'); close (TCOMP); exit($exit_status); } sub _write_log_entry { open(TC,'>>log.txt'); print TC "[Log] $logmsg\n"; close(TC); } sub get_timestamp { ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($mon < 10) { $mon = "0$mon"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } $year=$year+1900; return $year . '_' . $mon . '_' . $mday . '__' . $hour . '_' . $min . '_' . $sec } # # one time write to log with ceph version # open (TC,'>>log.txt'); print TC "[Log] "; system ("ceph -v >> log.txt"); #************************************************************************** # Modify access keys to suit the target account my ($access_key, $secret_key) = get_user_info(); if ( ($access_key) && ($secret_key) ) { # Make S3 connection # modify the host name if this test is run outside of QA. $s3 = Amazon::S3->new( { aws_access_key_id => $access_key, aws_secret_access_key => $secret_key, host => $hostname, secure => 0, retry => 1, } ); } #************************************************************************** # List the existing buckets my $response = $s3->buckets; foreach my $bucket ( @{ $response->{buckets} } ) { print "You have a bucket: " . $bucket->bucket . "\n"; } # create a new bucket (the test bucket) my $bucketname = 'kftestbucket' . get_timestamp(); print "Attempting to create bucket = $bucketname\n"; my $bucket = $s3->add_bucket( { bucket => $bucketname } ) or die $s3->err . $s3->errstr; print "Bucket Created: $bucketname\n"; $logmsg = "Bucket Created: $bucketname (add_bucket)"; _write_log_entry(); # create files in the bucket print "Generating files....\n"; for($counter = 1; $counter <= $maxcount; $counter++){ $fillfile = 'bogus'.$counter; $bucket->add_key( $fillfile, 'this is file #$counter' ) or die $s3->err . ": " . $s3->errstr; if ($counter%10 == 0){print "Created $counter files...\n"} } $logmsg = "$maxcount files created in bucket $bucketname (add_key)"; _write_log_entry(); # list files in the bucket and count them - must be = max count print "Verifying correct number of files created....\n"; $counter=0; $response = $bucket->list_all or die $s3->err . ": " . $s3->errstr; foreach my $key ( @{ $response->{keys} } ) { my $key_name = $key->{key}; my $key_size = $key->{size}; # print "Bucket contains key '$key_name' of size $key_size\n"; $counter = $counter + 1; } $logmsg = "list_all method successful"; _write_log_entry(); if ($counter==$maxcount) { $logmsg = "File count verified = $maxcount - Pass"; _write_log_entry(); } else { $logmsg = "[Log] File count fail $counter vs $maxcount"; _write_log_entry(); $exit_status=3; } # delete files in the bucket print "Deleting $maxcount files...\n"; $response = $bucket->list_all or die $s3->err . ": " . $s3->errstr; foreach my $key ( @{ $response->{keys} } ) { my $key_name = $key->{key}; $bucket->delete_key($key_name) or die $s3->err . ": " . $s3->errstr; } $logmsg = "$maxcount files deleted (delete_key)"; _write_log_entry(); # and finally delete the bucket $bucket->delete_bucket or die $s3->err . ": " . $s3->errstr; $logmsg = "Test bucket deleted (delete_bucket)"; _write_log_entry(); delete_user(); if ($exit_status == 0){ open(TC,'>>log.txt'); print TC "[Success]\n"; close(TC); _exit_result(); } else { open(TC,'>>log.txt'); print TC "[Failure]\n"; close(TC); _exit_result(); }