-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathS3Lib.pm
166 lines (148 loc) · 4.28 KB
/
S3Lib.pm
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#! /usr/bin/perl
=head1 NAME
S3Lib.pm - Perl Module that contains the functions used by S3 test scripts for testing Rados gateway.
=cut
package S3Lib;
use Cwd;
use Exporter;
@ISA = 'Exporter';
@EXPORT_OK = qw(display_ceph_os_info get_timestamp get_hostname get_user_info $rgw_user delete_user _write_log_entry _exit_result get_status);
#==variables ===
my $rgw_user = "qa_user";
my $sec;
my $min;
my $hour;
my $mon;
my $year;
my $mday;
my $wday;
my $yday;
my $isdst;
# function to get the current time stamp from the test set up
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;
}
# Function to get the Ceph and distro info
sub ceph_os_info
{
my $ceph_v = get_command_output ( "ceph -v" );
my @ceph_arr = split(" ",$ceph_v);
$ceph_v = "Ceph Version: $ceph_arr[2]";
my $os_distro = get_command_output ( "lsb_release -d" );
my @os_arr = split(":",$os_distro);
$os_distro = "Linux Flavor:$os_arr[1]";
return ($ceph_v, $os_distro);
}
# Function to log ceph info to log file
sub display_ceph_os_info
{
my ($vceph, $vos) = ceph_os_info();
my $msg = "The Tests are running on";
_write_log_entry ( "$msg\n$vos$vceph" );
}
# function to execute the command and return output
sub get_cmd_op
{
my $cmd = shift;
my $excmd = `$cmd`;
return $excmd;
}
# Function to check if radosgw is already running
sub get_status {
my $service = "radosgw";
my $cmd = "ps -ef | grep $service | grep -v grep";
my $status = get_cmd_op($cmd);
if ($status =~ /client.radosgw.gateway/ ){
return 0;
}
return 1;
}
#Function that executes the CLI commands and returns the output of the command
sub get_command_output {
my $cmd_output = shift;
open( FH, ">>$test_log" );
print FH "\"$cmd_output\"\n";
my $exec_cmd = `$cmd_output 2>&1`;
print FH "$exec_cmd\n";
close(FH);
return $exec_cmd;
}
# Function that enters the given msg to log.txt
sub _write_log_entry {
my $logmsg = shift;
open(TC,'>>log.txt');
print TC "[Log] $logmsg\n";
close(TC);
}
# Function that creates the test_completed.txt and reports success/failure to log.txt as required by xstudio run at the end of the test
sub _exit_result {
my $exit_status = shift;
my $REPORT_LOG = "SUCCESS";
open (TCOMP, '>>test_completed.txt');
close (TCOMP);
if ($exit_status != 0) {
$REPORT_LOG = "FAILURE";
}
open(TC,'>>log.txt');
print TC "[$REPORT_LOG]\n";
close(TC);
exit($exit_status);
}
# Function to create the user "qa_user" and extract the user access_key and secret_key of the user
sub get_user_info
{
my $cmd = "sudo radosgw-admin user create --uid=$rgw_user --display-name=$rgw_user";
my $cmd_op = get_command_output($cmd);
if ($cmd_op !~ /keys/){
_write_log_entry( "user $rgw_user NOT created" );
return (0,0);
}
_write_log_entry( "user $rgw_user created" );
my @get_user = (split/,/,$cmd_op);
foreach (@get_user) {
if ($_ =~ /access_key/ ){
$get_acc_key = $_;
} elsif ($_ =~ /secret_key/ ){
$get_sec_key = $_;
}
}
my $access_key = $get_acc_key;
my $acc_key = (split /:/, $access_key)[1];
$acc_key =~ s/\\//g;
$acc_key =~ s/ //g;
$acc_key =~ s/"//g;
my $secret_key = $get_sec_key;
my $sec_key = (split /:/, $secret_key)[1];
chop($sec_key);
chop($sec_key);
$sec_key =~ s/\\//g;
$sec_key =~ s/ //g;
$sec_key =~ s/"//g;
return ($acc_key, $sec_key);
}
# Function that deletes the user $rgw_user and write to logfile.
sub delete_user
{
my $cmd = "sudo radosgw-admin user rm --uid=$rgw_user";
my $cmd_op = get_command_output($cmd);
if ($cmd_op !~ /aborting/){
_write_log_entry( "user $rgw_user deleted" );
} else {
_write_log_entry( "user $rgw_user NOT deleted" );
}
}
# Function to get the hostname
sub get_hostname
{
my $cmd = "hostname";
my $get_host = get_command_output($cmd);
chomp($get_host);
return($get_host);
}
1;