diff -r 000000000000 -r 96612d01cf9f tsrc/testing/tools/genreruncfgs.pl --- /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 < (-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 = ; + 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 = ; + 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 = ; + 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); +}