diff --git a/xCAT-test/autotest/testcase/genesis/cases0 b/xCAT-test/autotest/testcase/genesis/cases0 new file mode 100644 index 000000000..a42c2101a --- /dev/null +++ b/xCAT-test/autotest/testcase/genesis/cases0 @@ -0,0 +1,48 @@ +start:nodeset_shell +description: verify could log in genesis shell +cmd:nodeset $$CN shell +check:rc==0 +cmd:rpower $$CN boot +check:rc==0 +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -t -n $$CN +cmd:xdsh $$CN cat /proc/cmdline +check:rc==0 +check:output=~BOOT_IMAGE=/xcat/genesis.kernel +cmd:nodeset $$CN boot +cmd:rpower $$CN boot +check:rc==0 +end + +start:nodeset_cmdline +description:verify could run cmdline successfully +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -d -r __GETNODEATTR($$CN,arch)__ +cmd:nodeset $$CN runcmd="cmdtest,shell" +check:rc==0 +cmd:rpower $$CN boot +check:rc==0 +cmd: perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -t -n $$CN +cmd:xdsh $$CN "cat /tmp/testresult" +check:rc==0 +check:output=~testcmd +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -c -n $$CN -r __GETNODEATTR($$CN,arch)__ +check:rc==0 +cmd:rpower $$CN boot +check:rc==0 +end + +start:nodeset_runimg +description:verify runimg could work +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -g -n $$CN -i $$imgip +check:rc==0 +cmd:rpower $$CN boot +check:rc==0 +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -t -n $$CN +check:rc==0 +cmd:xdsh $$CN "cat /tmp/testresult" +check:output=~testimg +check:rc==0 +cmd:perl /opt/xcat/share/xcat/tools/autotest/testcase/genesis/genesistest.pl -c -n $$CN -r __GETNODEATTR($$CN,arch)__ +check:rc==0 +cmd:rpower $$CN boot +check:rc==0 +end diff --git a/xCAT-test/autotest/testcase/genesis/cmdtest.pl b/xCAT-test/autotest/testcase/genesis/cmdtest.pl new file mode 100755 index 000000000..7422961d7 --- /dev/null +++ b/xCAT-test/autotest/testcase/genesis/cmdtest.pl @@ -0,0 +1,124 @@ +#!/usr/bin/env perl +# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html + +use strict; +use warnings; +use Getopt::Long; +use Data::Dumper; +use Term::ANSIColor; +use Time::Local; +BEGIN +{ + $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr'; +} +use lib "$::XCATROOT/lib/perl"; +my $needhelp = 0; +my $rungenesiscmd = 0; +my $rungenesisimg = 0; +my $shellmode = 0; +my $cmdtest="/tmp/cmdtest"; +my $genesisdir="/opt/xcat/share/xcat/netboot/genesis/"; +my $timesleep = 0; +my $runimgtest="/tmp/runme.sh"; +if ( + !GetOptions("h|?" => \$needhelp, + "c"=>\$rungenesiscmd, + "i"=>\$rungenesisimg, + "t"=>\$timesleep, + "s"=>\$shellmode) +) +{ + &usage; + exit 1; +} +sub usage +{ + print "Usage:run genesis cases.\n"; + print " genesistest.pl [-?|-h]\n"; + print " genesistest.pl [-s] set up genesis in shell mode \n"; + print " genesistest.pl [-i] runimg in genesis\n"; + print "\n"; + return; +} +sub runcmd +{ + my ($cmd) = @_; + my $rc = 0; + $::RUNCMD_RC = 0; + my $outref = []; + @$outref = `$cmd 2>&1`; + if ($?) + { + $rc = $? ; + $rc = $rc >> 8; + $::RUNCMD_RC = $rc; + } + chomp(@$outref); + return @$outref; + +} + +sub rungenesiscmd +{ + `echo "#!/bin/bash">>$cmdtest`; + `echo "#This is test for genesis scripts">>$cmdtest`; + `echo "echo \"test\" >> $cmdtest">>$cmdtest`; + `chmod 777 $cmdtest`; + if ($ARGV[0] =~ /ppc64/){ + `cp -rf $cmdtest "$genesisdir""ppc64"/fs/bin`; + `mknb ppc64`; + print "mknb ppc64\n"; + }else{ + `cp -rf $cmdtest "$genesisdir""$ARGV[0]"/fs/bin`; + `mknb $ARGV[0]`; + print "mkmn $ARGV[0]\n"; + } +} +sub rungenesisimg +{ + my $rc=0; + runcmd("mkdir -p /install/my_image"); + `echo "#!/bin/bash">>$runimgtest`; + `echo "#This is test for genesis scripts">>$runimgtest`; + `echo "echo "test" >> /tmp/cmdtest" >>$runimgtest`; + `chmod +x $runimgtest`; + `cp $runimgtest /install/my_image`; + `cd /install/my_image ;tar -zcvf my_image.tgz .`; + ` nodeset $ARGV[0] "runimage=http://$ARGV[1]/install/my_image/my_image.tgz",shell`; +} +sub timesleep +{ + my @output = runcmd("ping $ARGV[0] -c 10"); + my $value = 0; + print "output is $value ,@output\n"; + if ($::RUNCMD_RC){ + foreach $value (1 .. 60) { + @output = runcmd("ping $ARGV[0] -c 10"); + last if ($::RUNCMD_RC == 0); + } + } + my @output1 = runcmd("xdsh $ARGV[0] date"); + if ($::RUNCMD_RC){ + foreach $value (1 .. 60) { + @output1 = runcmd("xdsh $ARGV[0] date"); + last if ($::RUNCMD_RC == 0); + } + } + if ($::RUNCMD_RC == 0){ + print "test ok\n"; + } +} +if ($rungenesiscmd) + { + &rungenesiscmd; + } +if ($timesleep) + { + ×leep; + } +if($rungenesisimg) + { + &rungenesisimg; + } + + diff --git a/xCAT-test/autotest/testcase/genesis/genesistest.pl b/xCAT-test/autotest/testcase/genesis/genesistest.pl new file mode 100755 index 000000000..570374923 --- /dev/null +++ b/xCAT-test/autotest/testcase/genesis/genesistest.pl @@ -0,0 +1,184 @@ +#!/usr/bin/env perl +# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html + +use strict; +use warnings; +use Getopt::Long; +use Data::Dumper; +use Term::ANSIColor; +use Time::Local; +use File::Basename; +use File::Path; +use File::Copy; +BEGIN +{ + $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr'; +} +use lib "$::XCATROOT/lib/perl"; +my $rungenesiscmd = 0; +my $rungenesisimg = 0; +my $shellmode = 0; +my $cmdtest = "/tmp/cmdtest"; +my $timesleep = 0; +my $noderange ; +my $clearenv = 0; +my $arch ; +my $imgip ; +my $runimgtest = "/tmp/imgtest"; +my $testresult = "/tmp/testresult"; +my $genesisdir = "/opt/xcat/share/xcat/netboot/genesis"; +my $genesisfiledir ; + +if ( + !GetOptions("h|?" => \$::HELP, + "d"=>\$rungenesiscmd, + "g"=>\$rungenesisimg, + "t"=>\$timesleep, + "c"=>\$clearenv, + "n=s"=>\$::NODE, + "i=s"=>\$::IMGIP, + "r=s"=>\$::ARCH) +) +{ + &usage; + exit 1; +} +sub usage +{ + print "Usage:run for genesis cases.\n"; + print " genesistest.pl [-?|-h]\n"; + print " genesistest.pl [-d] [-n node] [-r arch] Test runcmd for genesis \n"; + print " genesistest.pl [-g] [-n ndoe] [-i imgip] Test runimg for genesis\n"; + print " genesistest.pl [-t] [-n node] Sleep for genesis test\n"; + print " genesistest.pl [-c] [-n node][-r arch] Clear environment for genesis test\n"; + print "\n"; + return; +} +sub runcmd +{ + my ($cmd) = @_; + my $rc = 0; + $::RUNCMD_RC = 0; + my $outref = []; + @$outref = `$cmd 2>&1`; + if ($?) + { + $rc = $? ; + $rc = $rc >> 8; + $::RUNCMD_RC = $rc; + } + chomp(@$outref); + return @$outref; + +} +sub rungenesiscmd +{ + open(TESTCMD, ">$cmdtest") + or die "Can't open testscripts for writing: $!"; + print TESTCMD join("\n", "#!/bin/bash"), "\n"; + print TESTCMD join("\n", "#This is test for genesis scripts"), "\n"; + print TESTCMD join("\n", "echo \"testcmd\" >> $testresult"), "\n"; + close(TESTCMD); + if ($arch =~ /ppc64/) + { + $arch = "ppc64"; + } + $genesisfiledir="$genesisdir/$arch/fs/bin"; + copy("$cmdtest" ,"$genesisfiledir"); + chmod 0755, "$genesisfiledir/cmdtest"; + `mknb $arch`; + print "mknb $arch\n"; +} +sub rungenesisimg +{ + mkdir("/install/my_image"); + open(TESTIMG, ">$runimgtest") + or die "Can't open testscripts for writing: $!"; + print TESTIMG join("\n", "#!/bin/bash"), "\n"; + print TESTIMG join("\n", "#This is test for genesis scripts"), "\n"; + print TESTIMG join("\n", "echo \"testimg\" >> $testresult"), "\n"; + close(TESTIMG); + copy("$runimgtest" ,"/install/my_image/runme.sh" ) or die "Copy failed: $!"; + chmod 0755,"/install/my_image/runme.sh"; + `cd /install/my_image ;tar -zcvf my_image.tgz .`; + `nodeset $noderange "runimage=http://$imgip/install/my_image/my_image.tgz",shell`; +} +sub timesleep +{ + my @output = runcmd("ping $noderange -c 10"); + my $value = 0; + print "output is $value ,@output\n"; + if ($::RUNCMD_RC){ + foreach $value (1 .. 60) { + @output = runcmd("ping $noderange -c 10"); + last if ($::RUNCMD_RC == 0); + } + } + my @output1 = runcmd("xdsh $noderange date"); + if ($::RUNCMD_RC){ + foreach $value (1 .. 60) { + @output1 = runcmd("xdsh $noderange -t 1 date"); + print "sleep $value\n"; + last if ($::RUNCMD_RC == 0); + } + } + if ($::RUNCMD_RC == 0){ + print "test ok\n"; + } +} +sub clearenv +{ + if (-f "/tmp/imgtest"){ + unlink("/install/my_image/runme.sh"); + unlink("/install/my_image/my_image.tgz"); + unlink("$runimgtest"); + rmdir("/install/my_image"); + print "img del ok\n"; + } + if (-f "/tmp/cmdtest"){ + if ($arch =~ /ppc64/) + { + $arch = "ppc64"; + } + + $genesisfiledir="$genesisdir/$arch/fs/bin"; + my $genesisfile = "$genesisfiledir/cmdtest"; + print "genesis file is $genesisfile\n"; + unlink("$genesisfile"); + unlink("$cmdtest"); + `mknb $arch`; + print "mknb $arch\n"; + } + `nodeset $noderange boot`; +} +if ($::NODE) +{ + $noderange = $::NODE; +} +if($::ARCH) +{ + $arch = $::ARCH; +} +if($::IMGIP) +{ + $imgip = $::IMGIP; +} +if ($::HELP) { +usage; +} +if ($rungenesiscmd) +{ + &rungenesiscmd; +} +if ($timesleep) +{ + ×leep; +} +if($rungenesisimg) + { + &rungenesisimg; + } +if($clearenv) +{ + &clearenv; +}