--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/testing/tools/genreruncfgs.pl Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,535 @@
+#
+# Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+
+#------------------------------------------------------------------------------------
+# Includes
+#------------------------------------------------------------------------------------
+#use strict;
+use warnings;
+use Cwd; # for cwd
+use FindBin; # for FindBin:Bin
+use File::Path; # for mkpath
+use Date::Calc;
+
+{ # No globals.
+ # Solve where the script is located.
+ $0=~/^(.+[\\\/])[^\\\/]+[\\\/]*$/;
+ my $cgidir= $1 || "./";
+
+ # And try to solve relative path.
+ if( index( $cgidir, "..\\" ) != -1 )
+ {
+ my $p = cwd;
+ $p =~ s/\//\\/g;
+ $cgidir =~ s/\//\\/g;
+ while(1)
+ {
+ my $pos = index( $cgidir, "..\\" );
+ last if( $pos == -1 );
+ $cgidir = substr( $cgidir, $pos+3 );
+
+ $pos = rindex( $p, "\\" );
+ last if( $pos == -1 );
+ $p = substr( $p, 0, $pos);
+ }
+ $cgidir = $p . "\\" . $cgidir;
+ }
+
+ if ( ! -e( $cgidir . "rerunsubs.pl" ) )
+ {
+ $cgidir = cwd;
+ my $domain = "VideoApp_Domain";
+ my $pos = index( $cgidir, $domain );
+ if( $pos != -1 )
+ {
+ $cgidir = substr( $cgidir, 0, $pos + length( $domain ) ) . "\\videoplayer\\tsrc\\testing\\tools\\";
+
+ }
+ }
+ require( $cgidir . "rerunsubs.pl" );
+ require( $cgidir . "utils.pl" );
+}
+
+#------------------------------------------------------------------------------------
+# GLOBAL CODE
+#------------------------------------------------------------------------------------
+
+my $lineFeed = "\n";
+
+my $regexpCaseName = '[<>\x3C\x3E\(\)\w.,\/:_\-&\' ]+';
+
+my $argcount = scalar(@ARGV);
+my $paramStartDir = "..";
+my $paramQuiet = 0;
+my $paramFilename = "";
+my $paramMakeSis = 1;
+my $paramGenCaseList = 0;
+
+if(scalar(@ARGV) <= 0)
+{
+ my @xmlFiles;
+ FindFiles(".", "xml", 1, \@xmlFiles, 0);
+
+ if( scalar(@xmlFiles) > 1 )
+ {
+ print("Multiple xml files. Can run without arguments only if there's one testreport xml.\n");
+ foreach my $file ( @xmlFiles )
+ {
+ print("$file\n");
+ }
+ ShowHelp();
+ }
+
+ if( scalar(@xmlFiles) <= 0 )
+ {
+ print("No testreport xml in current directory, cannot run without arguments.\n");
+ ShowHelp();
+ }
+
+ $paramFilename = $xmlFiles[0];
+ print("No arguments given. Picked file $paramFilename.\n");
+}
+else
+ {
+ while(scalar(@ARGV) >= 1)
+ {
+ my $argument = shift(@ARGV);
+
+ if($argument eq "-f")
+ {
+ $paramFilename = shift(@ARGV);
+ }
+ elsif($argument eq "-h")
+ {
+ ShowHelp();
+ }
+ elsif($argument eq "-q")
+ {
+ $paramQuiet = 1;
+ }
+ elsif($argument eq "-sis")
+ {
+ $paramMakeSis = 1;
+ }
+ elsif($argument eq "-caselist")
+ {
+ $paramGenCaseList = 1;
+ }
+ else {
+ print "arg: $argument\n";
+ ShowHelp();
+ }
+ }
+}
+
+my @incfiles;
+my $startDir = cwd;
+my @failedCfgs;
+
+if( ! -e ".\\init\\testframework.ini" )
+{
+ die("Must be run from tsrc and there must be .\\init\\\testframework.ini!\n");
+}
+
+if( Rerun_ReadFailedCases( $paramFilename, \@failedCfgs ) )
+{
+ die("Reading the Excel file failed!\n");
+}
+
+if( $paramGenCaseList )
+{
+ if(!open(FILE_HANDLE, ">" . "caselist.txt") )
+ {
+ print("ERROR! Could not open file for writing '" . "caselist.txt" . "'\n");
+ return 0;
+ }
+
+ my $currCfg = "";
+ foreach my $cfg( @failedCfgs )
+ {
+ $refCases = @$cfg[1];
+ $file = @$cfg[0];
+
+ if($file ne $currCfg)
+ {
+ print FILE_HANDLE ("cfg $file\n");
+ }
+
+ foreach my $failedCaseName (@$refCases)
+ {
+ print FILE_HANDLE ("case $failedCaseName\n");
+ }
+ }
+
+ close(FILE_HANDLE);
+
+ exit();
+}
+else
+{
+ if(scalar(@failedCfgs) <= 0)
+ {
+ print("No fails!\n");
+ exit();
+ }
+
+ system("rmdir /s /q 1rerun\\\n") if( -e "1rerun" );
+ mkdir("1rerun");
+
+ foreach my $cfg( @failedCfgs )
+ {
+ my $file = @$cfg[0];
+ Rerun_GenerateCfg( ".\\conf\\" . $file, $file, \@failedCfgs );
+ }
+
+ MakeSISX( \@failedCfgs ) if( $paramMakeSis );
+
+ foreach my $cfg( @failedCfgs )
+ {
+ my $file = @$cfg[0];
+ if( -e ".\\conf\\$file" )
+ {
+ AddCfgToRerunIni( ".\\init\\testframework.ini", $file );
+ system("move $file 1rerun\\$file");
+ }
+ }
+
+}
+chdir($startDir);
+
+chdir("1rerun");
+system("dir");
+
+exit();
+
+#------------------------------------------------------------------------------------
+# ShowHelp
+#------------------------------------------------------------------------------------
+sub ShowHelp {
+
+print <<USAGE_EOF;
+genreruncfgs.pl
+
+parameter -f <Excel xml testreport> (-sis)
+
+Creates cfg files into the run directory, the cfgs will have cases which have failed or are for setup.
+
+The current directory must be tsrc, there must be testframework.ini in ./init and STIF cfg files in ./cfg.
+
+The testreport can be in current directory and then no parameters are needed.
+
+-sis Creates STIF PU sis of the rerun CFGs.
+-caselist Creates caselist.txt which lists the failed cases
+
+USAGE_EOF
+
+ exit();
+
+};
+
+#------------------------------------------------------------------------------------
+# IniHasCfg
+#------------------------------------------------------------------------------------
+sub IniHasCfg
+{
+ my ($iniFile, $cfgFile) = @_;
+
+ if( !open(FILE_HANDLE, $iniFile) )
+ {
+ print("ERROR! Could not open file '" . $iniFile . "'\n");
+ return 0;
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ my $inNew_Module = 0; # We are parsing [New_Module] section from INI
+ my $lineCount = scalar(@array);
+ for(my $i=0; $i<$lineCount; $i++ )
+ {
+ $line = $array[$i];
+
+ $inNew_Module = 1 if($line =~ m/\[New_Module\]/);
+ $inNew_Module = 0 if($line =~ m/\[End_Module\]/);
+
+ if($inNew_Module)
+ {
+ if($line =~ m/$cfgFile/i)
+ {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+sub AddCfgToRerunIni
+{
+ my ($iniFile, $cfgFile) = @_;
+
+ my $destIniFile = "./1rerun/TestFramework.ini";
+
+ # Create directory for rerun ini
+ mkdir( substr($destIniFile, 0, rindex($destIniFile, "/")) );
+
+ # Rerun ini does not exist. Create one.
+ if( ! (-e $destIniFile) )
+ {
+ if( !open(FILE_HANDLE, $iniFile) )
+ {
+ print("ERROR! Could not open file '" . $iniFile . "'\n");
+ return 0;
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ if( !open(FILE_HANDLE, ">$destIniFile") )
+ {
+ print("ERROR! Could not open file '" . $destIniFile . "'\n");
+ return 0;
+ }
+
+ my $inNew_Module = 0;
+
+ foreach $line ( @array )
+ {
+ if($line =~ m/\[New_Module\]/)
+ {
+ $inNew_Module = 1;
+ print FILE_HANDLE ($line);
+ print FILE_HANDLE ("ModuleName= TestScripter\n");
+ }
+ if($line =~ m/\[End_Module\]/)
+ {
+ $inNew_Module = 0;
+ }
+
+ if($inNew_Module)
+ {
+ # Copy only setup cfgs if they are found.
+ if($line =~ m/setvalidservices/i)
+ {
+ print FILE_HANDLE ($line);
+ }
+ if($line =~ m/testprovisioning/i)
+ {
+ print FILE_HANDLE ($line);
+ }
+ }
+ else
+ {
+ print FILE_HANDLE ($line);
+ }
+ }
+
+ close(FILE_HANDLE);
+ }
+
+ # Read the existing file.
+
+ if( !open(FILE_HANDLE, $destIniFile) )
+ {
+ print("ERROR! Could not open file '" . $destIniFile . "'\n");
+ return 0;
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ # Check if CFG is already there.
+
+ my $inNew_Module = 0;
+
+ foreach $line ( @array )
+ {
+ if($line =~ m/\[New_Module\]/)
+ {
+ $inNew_Module = 1;
+ }
+ if($line =~ m/\[End_Module\]/)
+ {
+ $inNew_Module = 0;
+ }
+
+ if($inNew_Module)
+ {
+ if($line =~ m/$cfgFile/i)
+ {
+ return 1;
+ }
+ }
+ }
+
+ # Add the cfg to it.
+
+ if( !open(FILE_HANDLE, ">$destIniFile") )
+ {
+ print("ERROR! Could not open file '" . $destIniFile . "'\n");
+ return 0;
+ }
+
+ $inNew_Module = 0;
+
+ foreach $line ( @array )
+ {
+ if($line =~ m/\[End_Module\]/)
+ {
+ $inNew_Module = 0;
+ print FILE_HANDLE ("TestCaseFile= c:\\TestFramework\\$cfgFile\n");
+ }
+ print FILE_HANDLE ($line);
+ }
+
+ close(FILE_HANDLE);
+
+ return 1;
+}
+
+#------------------------------------------------------------------------------------
+# MakeSISX
+#
+# Parameters:
+# $refCfgs
+#------------------------------------------------------------------------------------
+sub MakeSISX
+{
+ my ($refCfgs) = @_;
+
+ my $pkgname = "STIF_failedcases.pkg";
+ my $sisname = "STIF_failedcases.sis";
+ my $sisnamex = "STIF_failedcases.sisx";
+
+ print("Writing pkg $pkgname\n");
+ if( !open(FILE_HANDLE, ">$pkgname") )
+ {
+ print("ERROR: could not write to file: $pkgname\n");
+ return 0;
+ }
+
+ print FILE_HANDLE (
+ "&EN" . $lineFeed .
+ "#{\"RERUN\"},(0x00000000),0,1,0,TYPE=PU" . $lineFeed .
+ "%{\"Nokia EN\"}" . $lineFeed .
+ ":\"Nokia\"" . $lineFeed
+ );
+
+ foreach my $cfg (@$refCfgs)
+ {
+ my $file = @$cfg[0];
+ if( -e $file )
+ {
+ print FILE_HANDLE ("\"$file\" - \"c:\\TestFramework\\$file\"" . $lineFeed );
+ }
+ }
+
+ close(FILE_HANDLE);
+
+ # Check that we have signing keys.
+
+ my $derFile = "RDTest_02.der";
+ my $keyFile = "RDTest_02.key";
+
+ if (-e $derFile and -e $keyFile)
+ {
+ # Keys are in current dir
+ }
+ elsif(-e "sis\\$derFile" and -e "sis\\$keyFile")
+ {
+ # Keys are in internal/sis dir
+ $derFile = "sis\\$derFile";
+ $keyFile = "sis\\$keyFile";
+ }
+ elsif(-e "group\\$derFile" and -e "group\\$keyFile")
+ {
+ # Keys are in internal/group dir
+ $derFile = "group\\$derFile";
+ $keyFile = "group\\$keyFile";
+ }
+ else
+ {
+ # Find em.
+ my @derFiles;
+ my @keyFiles;
+ FindFiles( ".", "$derFile", 0, \@derFiles );
+ FindFiles( ".", "$keyFile", 0, \@keyFiles );
+ $derFile = $derFiles[0] if( scalar(@derFiles) > 0 );
+ $keyFile = $keyFiles[0] if( scalar(@keyFiles) > 0 );
+ }
+
+ if (!-e $derFile or !-e $keyFile)
+ {
+ print("\nNeed signing keys: $derFile and $keyFile in current or subdirs.\n");
+ return;
+ }
+
+ # Create SISX
+
+ my $cmd = "makesis $pkgname $sisname";
+ print("$cmd\n");
+ system $cmd;
+
+ $cmd = "signsis $sisname $sisnamex $derFile $keyFile";
+ print("$cmd\n");
+ system $cmd;
+
+ system("move $sisnamex 1rerun\\$sisname");
+
+ system("del $pkgname");
+ system("del $sisname");
+}
+
+#------------------------------------------------------------------------------------
+# FindFiles
+# Parameters:
+# $goDir, where to start finding
+# $fileSearch, filename search
+# $searchType, 0 = fullname search, 1 = filetype search
+# $refIncfiles, reference to array which will hold found files
+#------------------------------------------------------------------------------------
+sub FindFiles
+{
+ my ($godir, $fileSearch, $searchType, $refIncfiles, $recurse) = @_;
+
+ my $startDir = cwd;
+
+ chdir($godir);
+
+ #print("Now in: " . cwd . "\n");
+
+ opendir(DIR, ".");
+ my @filelist = sort(readdir(DIR));
+ closedir(DIR);
+
+ foreach my $file(@filelist)
+ {
+ if($file eq "." or $file eq "..") {next};
+
+ if (-d $file)
+ {
+ FindFiles( $file, $fileSearch, $searchType, $refIncfiles) if( $recurse );
+ } else
+ {
+ if( ($file =~ m/$fileSearch/i and $searchType == 0 ) or ($file =~ m/$fileSearch$/i and $searchType == 1 ) )
+ {
+ $file = cwd . "/" . $file;
+ push @$refIncfiles, $file;
+ #print("$file\n");
+ }
+ }
+ }
+
+ chdir ($startDir);
+}