diff --git a/xCAT-test/autotest/linux.conf.template b/xCAT-test/autotest/linux.conf.template index 0d0fe77f7..6741543a5 100644 --- a/xCAT-test/autotest/linux.conf.template +++ b/xCAT-test/autotest/linux.conf.template @@ -1,3 +1,9 @@ +#Restapi configuration +[Restapi] +restapi-DefaultNRUser=wsuser +restapi-DefaultNRpasswd=cluster +restapi-Cert=/root/ca-cert.pem + #Table configuration [Table_passwd] key=system diff --git a/xCAT-test/restapitest b/xCAT-test/restapitest index c37c2995b..47eed21f3 100755 --- a/xCAT-test/restapitest +++ b/xCAT-test/restapitest @@ -72,19 +72,7 @@ if ( exit 1; } -############################################################## -# check result -############################################################## -if ($output) { - if ($method or $resource) { - &usage; - exit 1; - } - my $res = check_result($output,$loperator,$outputfile); - print_debug( "check result runs with $output and $loperator, result is $res\n" ); - exit $res; -} ############################################################## # return help ############################################################## @@ -92,84 +80,144 @@ if ($help) { &usage; exit 0; } +############################################################## +# flag check +############################################################## +if ($method ) { + unless( $resource ) { + print "-m must be used with -r \n"; + &usage; + exit 0; + } +} +if ($resource ) { + unless($method) { + print "-r must be used with -m \n"; + &usage; + exit 0; + } +} + + +############################################################## +# ONLY check result,exit immediately +############################################################## +if ($output and !defined($method)) { + my $res = check_result($output,$loperator,$outputfile); + log_debug(2, "check result runs with $output and $loperator, result is $res\n" ); + exit $res; +} + ############################################################## # Give default values for optional vars. ############################################################### my $rootdir = "$::XCATROOT/share/xcat/tools/autotest"; my $resultdir = "$rootdir/result"; -my $logfile = "$rootdir/result/restapitest.log"; #/opt/xcat/share/xcat/tools/autotest/result/restapitest.log -my $cert1 = "/root/ca-cert.pem"; +my $logfile = "$rootdir/result/restapitest.log"; +#/opt/xcat/share/xcat/tools/autotest/result/restapitest.log +my $confile = "$rootdir/default.conf"; + + +# read configuration file +if (!open (CONF, "<$confile")) { + log_debug(1,"can't open configuration file $confile"); + exit 1; +} +my %confhash; +while (){ + if (/restapi-(\w+)=(\S+)/) { + $confhash{$1}=$2; + } +} + # get token -my $gettoken = `curl -X POST -k 'https://127.0.0.1/xcatws/tokens?userName=root&password=cluster' -H Content-Type:application/json --data '{"userName":"root","password":"cluster"}' 2>/dev/null`; +my $defaultserver = $confhash{DefaultServer}; +my $defaultuser = $confhash{DefaultUser1}; +my $DefaultPasswd = $confhash{DefaultPasswd1}; +my $gettoken = `curl -X POST -k 'https://$defaultserver/xcatws/tokens?userName=$defaultuser&password=$DefaultPasswd' -H Content-Type:application/json --data '{"userName":"$defaultuser","password":"$DefaultPasswd"}' 2>/dev/null`; my $reshash = parse_json($gettoken); my $token1 = $$reshash{token}{id}; - # get hostname unless ($hostname) { $hostname = `hostname`; chomp($hostname); - +} +unless ($defaultserver) { + $host = "127.0.0.1"; +} else { + $host = $defaultserver; } # keey default test result for save -my $res = run_restapi($method, $resource, $data, "", $port, "127.0.0.1", "root", "cluster"); +my $res = run_restapi($method, $resource, $data, "", $port, "$host", "$defaultuser", "$DefaultPasswd"); $defaulthash = parse_json($res); $defaulthttpresult = check_errcode(); -# debug info -print_debug( "get token $token1. \n" ); -print_debug( "get hostname $hostname.\n"); -print_debug( "default result is $res. \n" ); -print_debug( "default resulthash is: \n" ); -print_debug($defaulthash); -print_debug( "default errcode is $defaulthttpresult \n" ); +# debug and log info +log_debug(3, "get token $token1. \n" ); +log_debug(3, "get first default user $confhash{DefaultUser1} \n" ); +log_debug(3, "get first default user's passwd is $confhash{DefaultPasswd1} \n" ); +log_debug(3, "get second default user $confhash{DefaultUser2} \n" ); +log_debug(3, "get second default user's passwd is $confhash{DefaultPasswd2} \n" ); +log_debug(3, "get path of ca $confhash{Cert} \n" ); +log_debug(3, "get server $defaultserver from configuration file and it is $host\n" ); +log_debug(3, "get hostname $hostname.\n"); +log_debug(3, "default result is $res. \n" ); +log_debug(3, "default resulthash is: \n" ); +log_debug(3,$defaulthash); +log_debug(3, "default errcode is $defaulthttpresult \n" ); +log_debug(3,"**************begin to run more restapi test, stop when post***************"); #################################################### # Begin to run test cases #################################################### -my @users = ("root","wsuser", $user); -my @passwds = ("cluster","cluster", $passwd); +my @users = ($confhash{DefaultUser1},$confhash{DefaultUser2}, $user); +my @passwds = ($confhash{DefaultPasswd1},$confhash{DefaultPasswd2}, $passwd); my @tokens = ("", $token1, $token); -my @certs = ("", $cert1, $cert); -unless ($host) { - $host = "127.0.0.1"; -} -log_me("**************begin restapi test***************"); +my @certs = ("", $confhash{Cert}, $cert); my $i = 0; -for my $u (@users) { - next unless($u); - my $p = $passwds[$i]; - $i++; - for my $t (@tokens) { - for my $c (@certs){ - if ($method eq "POST" and ($resource =~ /^\/nodes\/(\w+)$/)) { - `/opt/xcat/bin/rmdef $1`; - print_debug("restapi test rmdef $1\n"); - } - - my $res = run_restapi($method, $resource, $data, $c, $port, $host, $u, $p, $t); - if($res){ - my $reshash = parse_json($res); - print_debug("parse curl result and got:\n"); - print_debug($reshash); - if (%$reshash != %$defaulthash) { - log_me("restapi test cases run different result"); - print_debug( "restapi test cases run different result with $method, $resource, $data, $c, $port, $host, $u, $p, $t\n" ); - exit 1; - } - } - my $errcode = check_errcode(); - print_debug("get curl error code: $errcode\n"); - if ($errcode != $defaulthttpresult) { - log_me("restapi test cases run different errcode"); - print_debug( "restapi test cases run different error code with $method, $resource, $data, $c, $port, $host, $u, $p, $t\n" ); - exit 1; +unless ($method eq "POST") { # Should not post sevral times + for my $u (@users) { + next unless($u); + my $p = $passwds[$i]; + $i++; + for my $t (@tokens) { + for my $c (@certs){ + #if ($method eq "POST" and ($resource =~ /^\/nodes\/(\w+)$/)) { + # `/opt/xcat/bin/rmdef $1`; + # log_debug(2,"restapi test rmdef $1\n"); + #} + my $res = run_restapi($method, $resource, $data, $c, $port, $host, $u, $p, $t); + if($res){ + my $reshash = parse_json($res); + log_debug(2,"parse curl result and got:\n"); + log_debug(2,$reshash); + if (%$reshash != %$defaulthash) { + log_debug(3, "restapi test cases run different result with $method, $resource, $data, $c, $port, $host, $u, $p, $t\n" ); + exit 1; + } + } + my $errcode = check_errcode(); + log_debug(2,"get curl error code: $errcode\n"); + if ($errcode != $defaulthttpresult) { + log_debug(3, "restapi test cases run different error code with $method, $resource, $data, $c, $port, $host, $u, $p, $t\n" ); + exit 1; + } } } } } +############################################################## +# check result +############################################################## +if ($output) { + my $res = check_result($output,$loperator,$res); + log_debug(2, "check result runs with $output and $loperator, result is $res\n" ); + exit $res; +} + exit $defaulthttpresult; ################################################ @@ -192,31 +240,33 @@ sub usage return; } -############### -# record log # -############### -sub log_me -{ - my $msg = shift; - open (LOG, ">>$logfile") - or return 1; - my $date = `date`; - print LOG "$date\: $msg\n"; -} -##################### -# print debug infor # -##################### -sub print_debug +####################### +# print debug infor # +# 1 for only log # +# 2 for only debug # +# 3 for log and debug # +####################### +sub log_debug { + my $flag = shift; my $msg = shift; - return 0 unless($debug); - if(ref($msg) eq 'HASH') { - print Dumper($msg); - } elsif( ref($msg) eq 'ARRAY') { - print Dumper($msg); - } else { - print "$msg"; + if ($flag & 0x2) { + if($debug){ + if(ref($msg) eq 'HASH') { + print Dumper($msg); + } elsif( ref($msg) eq 'ARRAY') { + print Dumper($msg); + } else { + print "$msg"; + } + } + } + if ($flag & 0x1) { + open (LOG, ">>$logfile") + or return 1; + my $date = `date`; + print LOG "$date\: $msg\n"; } } ######################### @@ -254,12 +304,12 @@ sub run_restapi $cmd .= " -H Content-Type:application/json --data '$d'"; } $cmd .= " -D /tmp/err.log"; - log_me("Begin to run restapi test with $cmd"); + log_debug(1,"Begin to run restapi test with $cmd"); my $res = `$cmd 2>/dev/null`; - print_debug("run curl: $cmd\n"); - print_debug("result is $res\n"); + log_debug(2,"run curl: $cmd\n"); + log_debug(2,"result is $res\n"); if (!open (RESULT, ">$outputfile")) { - log_me("wirte outputfile error"); + log_debug(1,"wirte outputfile error"); } print RESULT $res; close RESULT; @@ -278,7 +328,7 @@ sub parse_json # {"networks":[{"mgtifname":"eth1","mask":"255.255.255.0"},{"mgtifname":"eth1","mask":"255.255.255.0"}]} if ($input =~ /^\[(.*)\]$/s) { my $content = $1; - print "[:] content is $content \n" if($debug); + log_debug(2, "[:] content is $content \n" ); parse_json($content); } # for those who look like: @@ -289,7 +339,7 @@ sub parse_json my @reval; # record result foreach my $t (@contents) { - print ":{}, content is $t \n" if($debug); + log_debug(2, ":{}, content is $t \n" ); my $re = parse_json($t); push @reval, $re; } @@ -309,7 +359,7 @@ sub parse_json my @reval; # record result foreach my $t (@contents) { - print "{},{}, content is $t \n" if($debug); + log_debug(2, "{},{}, content is $t \n" ); my $re = parse_json($t); push @reval, $re; } @@ -328,16 +378,16 @@ sub parse_json # {"clustersite":{"domain":"cluster.com","master":"192.168.1.15"}} elsif ($input =~ /^\s*{(.*)}\s*$/s) { my $content = $1; - print "{} content is $content \n" if($debug); + log_debug(2, "{} content is $content \n" ); parse_json($content); } - elsif( $input =~ /],\"\S+\":/)){ - $input =~ s/],\"\S+\":/]%\"\S+\":/; + elsif( $input =~ /],\"\S+\":/){ + $input =~ s/],\"(\S+)\":/]%\"$1\":/; my @contents = split /%/, $input; my @reval; # record result foreach my $t (@contents) { - print "],:, content is $t \n" if($debug); + log_debug(2, "],:, content is $t \n" ); my $re = parse_json($t); push @reval, $re; } @@ -350,7 +400,7 @@ sub parse_json } } return \%hash; - } + } # for those who look like # "domain":"cluster.com","master":"192.168.1.15" elsif ($input =~ /,/ and !($input =~ /}/)) { @@ -358,7 +408,7 @@ sub parse_json my @reval; # record result foreach my $t (@contents) { - print ", content is $t \n" if($debug); + log_debug(2, ", content is $t \n"); my $re = parse_json($t); push @reval, $re; } @@ -381,7 +431,7 @@ sub parse_json my $value = $2; if ($value =~ /{/) { # "clustersite":{"domain":"cluster.com","master":"192.168.1.15"} - print "{ content is $value \n" if($debug); + log_debug(2, "{ content is $value \n" ); $hash{$key} = parse_json($value, $key); return \%hash; } else { @@ -397,7 +447,7 @@ sub parse_json else { if ($input =~ /^\[(.*)\]/s) { my $content = $1; - print "[] content is $content \n" if($debug); + log_debug(2, "[] content is $content \n"); my @all = split /,/, $content; foreach my $n (@all) { $n =~ /\"(.*)\"/; @@ -414,7 +464,7 @@ sub parse_json sub check_errcode { if(!open (ERRLOG, "