--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/testing/tools/genATSdrop.pl Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,2380 @@
+#
+# 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;
+use File::Copy;
+use lib "$FindBin::Bin/../lib";
+
+{ # No globals.
+ my $cgidir = GetCgiDir();
+
+ 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 . "utils.pl" );
+ require( $cgidir . "rerunsubs.pl" );
+}
+
+#------------------------------------------------------------------------------------
+# GLOBAL CODE
+#------------------------------------------------------------------------------------
+
+my $basePath = "testdrop"; # ATS XML
+my $dropFilePath = "ATS3Drop\\"; # All other files
+my $dropImagePath = "ATS3Drop\\images\\";
+my $dropBinaryPath = "ATS3Drop\\armv5_urel\\"; # Binaries
+
+my $currentPlanId = 0;
+my $currentSessionId = 0;
+my $currentSetId = 0;
+my $currentCaseId = 0;
+my $currentStepId = 0;
+
+# Attributes for files which are copied to device. Or SIS installations.
+my $ATSFILE_NAME = 0;
+my $ATSFILE_HARNESS = 1;
+my $ATSFILE_ENABLED = 2;
+my $ATSFILE_PASSRATE = 3;
+my $ATSFILE_SIGNIFICANT = 4;
+my $ATSFILE_TYPE = 5;
+my $ATSFILE_SRC = 6;
+my $ATSFILE_DST = 7;
+my $ATSFILE_COMMAND = 9;
+my $ATSFILE_DROPFULL_PATH = 10; # Contains the path in drop to the file
+my $ATSFILE_STEP_XML = 11; # XML defining the step
+my $ATSFILE_STEP_TIMEOUT = 12; # only for SIS file
+
+# These must be replaced when writing a step into XML file
+my $ATSXML_DROPPRIORITY = "ATSXML_DROPPRIORITY";
+my $ATSXML_TESTNAME = "ATSXML_TESTNAME";
+my $ATSXML_FLASH_IMAGE_NAME = "ATSXML_FLASH_IMAGE_NAME";
+my $ATSXML_TESTDEVICE = "ATSXML_TESTDEVICE";
+my $ATSXML_TESTPLAN_NAME = "ATSXML_TESTPLAN_NAME";
+my $ATSXML_TESTSESSION_NAME = "ATSXML_TESTSESSION_NAME";
+my $ATSXML_TESTSET_NAME = "ATSXML_TESTSET_NAME";
+my $ATSXML_STEP_NAME = "ATSXML_STEP_NAME";
+my $ATSXML_TESTCASE_NAME = "ATSXML_TESTCASE_NAME";
+my $ATSXML_STEP_HARNESS = "ATSXML_STEP_HARNESS";
+my $ATSXML_STEP_ENABLED = "ATSXML_STEP_ENABLED";
+my $ATSXML_STEP_PASSRATE = "ATSXML_STEP_PASSRATE";
+my $ATSXML_STEP_SIGNIFICANT = "ATSXML_STEP_SIGNIFICANT";
+my $ATSXML_STEP_COMMAND = "ATSXML_STEP_COMMAND";
+my $ATSXML_STEP_PARAM_TYPE = "ATSXML_STEP_PARAM_TYPE";
+my $ATSXML_STEP_PARAM_SRC = "ATSXML_STEP_PARAM_SRC";
+my $ATSXML_STEP_PARAM_DST = "ATSXML_STEP_PARAM_DST";
+my $ATSXML_STEP_RUNCASES_FILENAME = "ATSXML_STEP_RUNCASES_FILENAME";
+my $ATSXML_STEP_RUNCASES_TIMEOUT = "ATSXML_STEP_RUNCASES_TIMEOUT";
+#my $ATSXML_STEP_PARAM_COMPONENT_PATH = "ATSXML_STEP_PARAM_COMPONENT_PATH";
+my $ATSXML_STEP_RUNCASE_CASENAME = "ATSXML_STEP_RUNCASE_CASENAME";
+my $ATSXML_STEP_RUNCASE_FILENAME = "ATSXML_STEP_RUNCASE_FILENAME";
+my $ATSXML_EMAIL = "ATSXML_EMAIL";
+my $ATSXML_SIS_FILENAME = "ATSXML_SIS_FILENAME";
+my $ATSXML_STEP_TIMEOUT = "ATSXML_STEP_TIMEOUT";
+my $ATSXML_FETCH_PATH = "ATSXML_FETCH_PATH";
+my $ATSXML_CTC_PATH = "ATSXML_CTC_PATH";
+
+# These are initialized in the InitXml()
+my $ATSXML_HEADER_START;
+my $ATSXML_HEADER_END;
+my $ATSXML_FOOTER;
+my $ATSXML_PLANSTART;
+my $ATSXML_CREATEDIRS;
+my $ATSXML_FLASH;
+my $ATSXML_FORMAT_DRIVES;
+my $ATSXML_PLANEND;
+my $ATSXML_STEP;
+my $ATSXML_FETCH_STEPS;
+my $ATSXML_FETCH_STEP;
+my $ATSXML_CTCWRITE_STEP;
+my $ATSXML_STEP_DEFAULT;
+my $ATSXML_STEP_BINARY;
+my $ATSXML_STEP_RUNCASES;
+my $ATSXML_STEP_RUNCASES_WITH_BOOT;
+my $ATSXML_STEP_RUNCASES_INI;
+my $ATSXML_STEP_RUNCASES_INI_WITH_BOOT;
+my $ATSXML_STEP_RUNCASE;
+my $ATSXML_STEP_INSTALLSIS;
+my $ATSXML_POSTACTION;
+
+my $atsCfgFileName = "";
+my $atsUsername = "";
+my $atsPassword = "";
+
+my $paramStartDir = "..";
+my $paramVerbose = 1;
+my $paramDebug = 0;
+my $paramFindPkgFilePath = "";
+my $paramExecuteDrop = "";
+my $paramDontDeleteGeneratedFiles = 0;
+my $paramCTC = 0;
+my $paramNameFilter = "";
+my $paramSkipFlashCopy = 0;
+my $paramForcedBuild = "";
+my $paramRerunXml = 0;
+my $paramUseSecondaryIni = 0;
+my $paramCaseClass = "";
+
+my $globalAtsHost = "10.11.2.4";
+my $globalCtcExePath = "xxx";
+my @globalFlashFiles;
+my @globalSisFiles;
+my @globalPkgFiles;
+my $globalDeviceName = "";
+my $globalDeviceVersion = "";
+my $globalDeviceHWID = "";
+my $globalEmail = "";
+my $globalIgnoreSis = 0;
+my @globalFailedCfgs;
+
+# The code
+
+InitXml();
+
+ReadArgs();
+
+if($paramExecuteDrop ne "")
+{
+ ExecuteDrop($paramExecuteDrop, 1);
+}
+else
+{
+ if($atsCfgFileName eq "")
+ {
+ ShowHelp();
+ }
+
+ ParseFile( $atsCfgFileName );
+}
+
+exit();
+
+
+#------------------------------------------------------------------------------------
+# ReadArgs
+#------------------------------------------------------------------------------------
+sub ReadArgs
+ {
+ ShowHelp() if(scalar(@ARGV) == 0);
+
+ while(scalar(@ARGV) >= 1)
+ {
+ my $argument = shift(@ARGV);
+
+ if($argument eq "-f")
+ {
+ $atsCfgFileName = shift(@ARGV)
+ }
+ elsif($argument eq "-u")
+ {
+ $atsUsername = shift(@ARGV)
+ }
+ elsif($argument eq "-p")
+ {
+ $atsPassword = shift(@ARGV)
+ }
+ elsif($argument eq "-h")
+ {
+ ShowHelp();
+ }
+ elsif($argument eq "-q")
+ {
+ $paramVerbose = 0;
+ }
+ elsif($argument eq "-d")
+ {
+ $paramVerbose = 1;
+ $paramDebug = 1;
+ }
+ elsif($argument eq -"filepath")
+ {
+ $paramFindPkgFilePath = shift(@ARGV);
+ }
+ elsif($argument eq "-run")
+ {
+ $paramExecuteDrop = shift(@ARGV);
+ $paramVerbose = 1;
+ }
+ elsif($argument eq "-nodelete")
+ {
+ $paramDontDeleteGeneratedFiles = 1;
+ }
+ elsif($argument eq "-ctcrom")
+ {
+ $paramCTC = 1;
+ $globalCtcExePath = "z:\\sys\\bin\\ctcman.exe";
+ }
+ elsif($argument eq "-ctcsis")
+ {
+ $globalCtcExePath = "c:\\sys\\bin\\ctcman.exe";
+ $paramCTC = 1;
+ }
+ elsif($argument eq "-dropname")
+ {
+ $paramNameFilter = shift(@ARGV);
+ }
+ elsif($argument eq "-noflash")
+ {
+ $paramSkipFlashCopy = 1;
+ }
+ elsif( $argument eq "-atshost" )
+ {
+ $globalAtsHost = shift(@ARGV);
+ }
+ elsif( $argument eq "-forcebuild" )
+ {
+ $paramForcedBuild = shift(@ARGV);
+ if( !defined($paramForcedBuild) || ( $paramForcedBuild ne "udeb" && $paramForcedBuild ne "urel" ) )
+ {
+ die("\n-forcebuild parameter must be 'udeb' or 'urel'");
+ }
+ }
+ elsif( $argument eq "-rerun" )
+ {
+ $paramRerunXml = 1;
+ my $file = shift(@ARGV);
+ die("Could not read failed cases!") if ( Rerun_ReadFailedCases( $file, \@globalFailedCfgs ) );
+ if( scalar( @globalFailedCfgs ) <= 0 )
+ {
+ print("No fails to rerun!\n");
+ exit();
+ }
+ }
+ elsif( $argument eq "-allini" )
+ {
+ $paramUseSecondaryIni = 1;
+ }
+ elsif( $argument eq "-caseclass" )
+ {
+ $paramCaseClass = shift(@ARGV);
+ }
+ else
+ {
+ die("Unknown command line option: '$argument'.\n");
+ }
+
+ }
+
+ die("Parameter -f is required.\n") if( $atsCfgFileName eq "" );
+}
+
+#------------------------------------------------------------------------------------
+# ShowHelp
+#------------------------------------------------------------------------------------
+sub ShowHelp
+{
+print <<USAGE_EOF;
+genATSdrop.pl -f <drop or master cfg.txt> -u <ats username> -p <ats password>
+
+Params:
+-f <filename> Filename of ATS cfg file.
+-u <username> ATS username. not required.
+-p <password> ATS password. not required.
+-q Quiet mode
+-d Debug information
+-run xxx Run xxx drop in the ATS farm. xxx can be a folder or a zip file (w/o .zip)
+-filepath xxx Where files from PKG are searched for, default is the path in PKG file.
+-h help
+-nodelete For default the script deletes generated files.
+-noflash Skip copying flash files to drop.
+-ctcrom CTC++ is installed in the ROM. Fetches the CTC result files from the device.
+-ctcsis CTC++ is installed from SIS. Fetches the CTC result files from the device.
+-atshost Address of ATS host to run the tests.
+-dropname xxx Runs only drops which match with xxx string.
+-forcebuild udeb or urel -> forces to use the defined build for all executables read from PKGs
+-rerun xxx Reads results from xml and writes only failed cases into ATS3 drop CFG files.
+-allini Uses secondary testframework.ini file to run the cases, if it's found from init/all/ folder.
+
+Below is example for the ATS master cfg file. The commands override the
+ATS drop cfg commands, except PKG command.
+
+[MASTERCFG]
+DEVICE Ivalo
+FLASH \\\\network\\flashimages\\core.fpsx
+FLASH \\\\network\\flashimages\\variant.fpsx
+FLASH \\\\network\\flashimages\\eraseuserdisk.fpsx
+SIS \\\\app\\sis\\app.sisx
+SIS \\\\app\\tsrc\\sistests.sisx
+IGNORESIS
+PKG \\\\app\\tsrc\\data\\cenrepchanges.pkg
+EMAIL xxx
+; Drop configs must be in tsrc folders and they must be defined after other commands.
+INC /ido/api/module1/tsrc/conf/ats_config.txt
+INC /ido/api2/module/tsrc/conf/ats_config.txt
+[EMDMASTERCFG]
+
+Available commands for the ATS drop cfg file. List order is also the recommended order in the cfg file.
+
+ NAME XXX Test drop name.
+ PRIORITY xxx Test drop execution priority, 0 is the highest
+ DEVICE x1 x2 x3 x1 = Device name in the ATS system, x2 = device version (optional), x3 = device HWID (optional)
+ FLASH File to be flashed. Can be defined with path.
+ PKG xxx Text file listing the files which are copied into the device by ATS.
+ Uses same format as Symbian PKG files.
+ SIS x1 x1 = SIS/SISX file which needs to be installed.
+ IGNORESIS Master cfg only, ignores SIS commands afterwards.
+ BOOT Reboots the device. Testframework.ini must have cfg with cases Dummy1 and Dummy2.
+ INI xxx Command to execute ini file in ATS system.
+ CFG xxx Command to execute cfg in ATS system. Cfg files must be listed
+ in the PKG files. No path support.
+ CASELIST xxx Command to execute invidual STIF cases from CFG files.
+ FETCH xxx Fetches file(s) from a directory. ( FETCH e:\\analyzetool\\* )
+ EMAIL xxx Email address(es) where ATS sends the report.
+
+ USERNAME xxx Username for ATS login
+ PASSWORD xxx Password for ATS login
+
+Example:
+
+[DROP]
+NAME STIF_TestDrop
+DEVICE Tube B1 1001
+FLASH \\\\network\\flashimages\\core.fpsx
+FLASH \\\\network\\flashimages\\variant.fpsx
+FLASH \\\\network\\flashimages\\eraseuserdisk.fpsx
+PKG \\\\app\\tsrc\\data\cenrepchanges.pkg
+SIS \\\\app\\sis\\app.sisx
+SIS \\\\app\\tsrc\\sis\\tests.sisx
+BOOT
+INI atsconfig\\drop1\\TestFramework.ini 1200
+EMAIL dude\@nokia.com
+[ENDDROP]
+
+USAGE_EOF
+
+ exit();
+}
+
+#------------------------------------------------------------------------------------
+# ParseFile
+# Parameters:
+# $filename
+#------------------------------------------------------------------------------------
+sub ParseFile
+{
+ my($filename) = @_;
+
+ # Read the file and check if it's drop conf or master conf file.
+ open(FILE_HANDLE, $filename) or die("ERROR! Could not open config file '" . $filename . "'\n");
+ my @lines = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ my $isDropFile = 0;
+
+ foreach my $line (@lines)
+ {
+ if( $line =~ m/\[DROP\]/i || $line =~ m/\[ENDDROP\]/i )
+ {
+ $isDropFile++;
+ }
+ }
+
+ if( $isDropFile >= 2 )
+ {
+ ParseAtsCfg( $filename );
+ }
+ else
+ {
+ ParseMasterCfg( $filename );
+ }
+}
+
+#------------------------------------------------------------------------------------
+# ParseMasterCfg
+# Parameters:
+# $filename
+#------------------------------------------------------------------------------------
+sub ParseMasterCfg
+{
+ my($filename) = @_;
+
+ my $index = 0;
+
+ open(FILE_HANDLE, $filename) or die("ERROR! Could not open master config file '" . $filename . "'\n");
+ my @lines = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ while($index < scalar(@lines))
+ {
+ my $line = $lines[$index];
+
+ my $cmd;
+ my $params;
+ ReadCmdFromLine( \$line, \$cmd, \$params );
+
+ #
+ # CMD FLASH
+ #
+ if($cmd eq "FLASH")
+ {
+ push @globalFlashFiles, $params;
+ }
+
+ #
+ # CMD DEVICE
+ #
+ if( $cmd eq "DEVICE" )
+ {
+ my @paramArray = split( / /, $params );
+ $globalDeviceName = $paramArray[0] if( defined( $paramArray[0] ) );
+ $globalDeviceVersion = $paramArray[1] if( defined( $paramArray[1] ) );
+ $globalDeviceHWID = $paramArray[2] if( defined( $paramArray[2] ) );
+ print("Global device: $globalDeviceName\n");
+ print("Global device version: $globalDeviceVersion\n");
+ print("Global device HWID: $globalDeviceHWID\n");
+ }
+
+ #
+ # CMD EMAIL
+ #
+ if( $cmd eq "EMAIL" )
+ {
+ $globalEmail = $params;
+ }
+
+ #
+ # CMD INC
+ #
+ if($cmd eq "INC")
+ {
+ # Forward slashes to backward.
+ $params =~ s/\//\\/g;
+
+ my $pos = index( $params, "tsrc" );
+ if( $pos != -1 )
+ {
+ print("\nReading config file $params\n");
+ my $path = substr( $params, 0, $pos+4 );
+ my $file = substr( $params, $pos+5 );
+
+ $pos = index( $file, "conf" );
+
+ die("INC file must be in conf directory! Incorrect params: $params") if( $pos == -1);
+
+ if( $pos != 0 )
+ {
+ $path .= "\\" . substr( $file, 0, $pos-1 );
+ $file = substr( $file, $pos );
+ }
+
+ my $startDir = cwd;
+
+ # Change where the master config file is.
+ if( rindex($filename, "\\") != -1 )
+ {
+ chdir( substr($filename, 0, rindex($filename, "\\") ) );
+ }
+
+ # Go where the drop config file is.
+ chdir( $path );
+
+ ParseAtsCfg( $file );
+
+ chdir( $startDir );
+ }
+ else
+ {
+ die("ERROR! The path $params is invalid, config must be under tsrc folder.\n");
+ }
+ }
+
+ #
+ # CMD SIS
+ #
+ if( $cmd eq "SIS" )
+ {
+ print("Master CFG has SIS: $params\n");
+ push @globalSisFiles, $params;
+ }
+
+ #
+ # CMD SIS
+ #
+ if( $cmd eq "IGNORESIS" )
+ {
+ print("Master CFG ignore sis command.\n");
+ $globalIgnoreSis = 1;
+ }
+
+ #
+ # CMD PKG
+ #
+ if( $cmd eq "PKG" )
+ {
+ print("Master CFG has PKG: $params\n");
+ push @globalPkgFiles, $params;
+ }
+
+ $index++;
+ }
+}
+
+#------------------------------------------------------------------------------------
+# ParseAtsCfg
+# Parameters:
+# $filename
+#------------------------------------------------------------------------------------
+sub ParseAtsCfg
+{
+ my($filename) = @_;
+
+ open(FILE_HANDLE, $filename) or die("ERROR! Could not open drop config file '" . $filename . "'\n");
+ my @lines = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ my $index = 0;
+
+ my $testname = "";
+ my $testpriority = 0;
+ my $deviceName = "";
+ my $deviceVersion = "";
+ my $deviceHWID = "";
+ my $testClosed = 1; # is file handle closed?
+ my $planStartWritten = 0;
+ my $installationStepsWritten = 0;
+ my $additionalFilesCopiedToDrop = 0; # have ini and flash files copied to drop already.
+ my @atsFiles;
+ my @flashFiles;
+ my @sisFiles;
+ my @pkgFiles;
+ my @globalPkgFilesForConf;
+ my $startOfDropIndex = 0;
+ my $email = "";
+
+ my $cmdDropStartRead = 0;
+ my $cmdNameRead = 0;
+ my $cmdDeviceRead = 0;
+ my $cmdPkgRead = 0;
+ my $cmdSisRead = 0;
+ my $skipCurrentDrop = 0;
+
+ my $bootDefined = 0;
+
+ my @preRunCustomXmlData;
+ my @postRunCustomXmlData;
+
+ if( -e "custom\\prerun_custom.xml" )
+ {
+ open( FILE_HANDLE, "custom\\prerun_custom.xml" ) or die("ERROR! Could not read conf/prerun_custom.xml.\n");
+ @preRunCustomXmlData = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+ }
+ if( -e "custom\\postrun_custom.xml" )
+ {
+ open( FILE_HANDLE, "custom\\postrun_custom.xml" ) or die("ERROR! Could not read conf/postrun_custom.xml.\n");
+ @postRunCustomXmlData = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+ }
+
+ if( $paramCaseClass ne "" )
+ {
+ my $cgiDir = GetCgiDir();
+ system("perl $cgiDir" . "genCfgs.pl -c $paramCaseClass");
+
+ my @newCfgs;
+ FindFiles(".\\conf_temp", "cfg", 1, \@newCfgs);
+ if( scalar(@newCfgs) < 1 )
+ {
+ print("No class in cases. Aborting drop.\n");
+ return;
+ }
+
+ push @globalPkgFilesForConf, "conf_temp\\cfgs.pkg";
+ }
+
+ while($index < scalar(@lines))
+ {
+ my $line = $lines[$index];
+
+ my $cmd;
+ my $params;
+ ReadCmdFromLine( \$line, \$cmd, \$params );
+
+ #
+ # CMD DROP
+ #
+ if($cmd eq "[DROP]")
+ {
+ $startOfDropIndex = $index;
+ # Reset variables for this drop
+ $testpriority = 10;
+ $testname = "";
+ $deviceName = "";
+ $deviceVersion = "";
+ $deviceHWID = "";
+ $planStartWritten = 0;
+ $installationStepsWritten = 0;
+ $additionalFilesCopiedToDrop = 0;
+ undef( @atsFiles );
+ undef( @flashFiles );
+ undef( @sisFiles );
+ undef( @pkgFiles );
+ $email = "";
+
+ $basePath = "";
+
+ $currentPlanId = 0;
+ $currentSessionId = 0;
+ $currentSetId = 0;
+ $currentCaseId = 0;
+ $currentStepId = 0;
+
+ $cmdDropStartRead = 1;
+ $cmdNameRead = 0;
+ $cmdDeviceRead = 0;
+ $cmdPkgRead = 0;
+ $cmdSisRead = 0;
+ }
+
+ #
+ # CMD NAME
+ #
+ if($cmd eq "NAME" && !$skipCurrentDrop)
+ {
+ die ("Command [DROP] missing or NAME in wrong place. Line $index.") if(!$cmdDropStartRead);
+ $testname = $params;
+
+ $basePath = $params;
+ $basePath =~ s/ /_/g;
+
+ if( -e "$basePath.zip" )
+ {
+ print("\ndel $basePath.zip\n");
+ system("del $basePath.zip");
+ }
+
+ if( -e $basePath )
+ {
+ print("rmdir /s /q $basePath\n");
+ system("rmdir /s /q $basePath");
+ }
+
+ $skipCurrentDrop = 0;
+ if( $paramNameFilter ne "" )
+ {
+ if( !($testname =~ m/$paramNameFilter/i) )
+ {
+ $skipCurrentDrop = 1;
+ print("Skipping drop: $testname\n");
+ }
+ }
+
+ if( !$skipCurrentDrop )
+ {
+ print("\nCreating testdrop: $testname\n");
+
+ # Create needed directories
+ mkdir($basePath);
+ mkdir($basePath . "\\" . $dropFilePath);
+ mkdir($basePath . "\\" . $dropImagePath);
+ mkdir($basePath . "\\" . $dropBinaryPath);
+
+ # Open XML file for writing
+ my $xmlfilename = "$basePath\\test.xml";
+ if(!open(FILE_HANDLE_XML, ">$xmlfilename") )
+ {
+ print("ERROR! Could not open file for writing '" . $xmlfilename . "'\n");
+ return 0;
+ }
+ $cmdNameRead = 1;
+ }
+ $testClosed = 0;
+ }
+
+ #
+ # CMD PRIORITY
+ #
+ if($cmd eq "PRIORITY" && !$skipCurrentDrop)
+ {
+ die ("Command [DROP] missing or PRIORITY in wrong place. Line $index.") if(!$cmdDropStartRead);
+ $testpriority = $params;
+ }
+
+ #
+ # CMD DEVICE
+ #
+ if($cmd eq "DEVICE" && !$skipCurrentDrop)
+ {
+ die ("Command DEVICE in wrong place. Line $index.") if(!$cmdDropStartRead || $cmdPkgRead || $cmdSisRead );
+ # Write XML header with test name and device
+ die("Device must be set in the CFG!") if($params eq "");
+ die("NAME must be set in the cfg!") if($testname eq "");
+
+ my @paramArray = split( / /, $params );
+ $deviceName = $paramArray[0] if( defined( $paramArray[0] ) );
+ $deviceVersion = $paramArray[1] if( defined( $paramArray[1] ) );
+ $deviceHWID = $paramArray[2] if( defined( $paramArray[2] ) );
+
+ $deviceName = $globalDeviceName if( $globalDeviceName ne "" );
+ $deviceVersion = $globalDeviceVersion if( $globalDeviceVersion ne "" );
+ $deviceHWID = $globalDeviceHWID if( $globalDeviceHWID ne "" );
+
+ my $data = $ATSXML_HEADER_START;
+ $data =~ s/$ATSXML_TESTNAME/$testname/;
+ $data =~ s/$ATSXML_TESTDEVICE/$deviceName/;
+ $data =~ s/$ATSXML_DROPPRIORITY/$testpriority/;
+
+ if( $deviceVersion ne "" )
+ {
+ $data .= " <property name=\"PROTO_VERSION\" value=\"$deviceVersion\" />\n";
+ }
+ if( $deviceHWID ne "" )
+ {
+ $data .= " <property name=\"HWID\" value=\"$deviceHWID\" />\n";
+ }
+
+ $data .= $ATSXML_HEADER_END;
+
+ print FILE_HANDLE_XML ($data);
+
+ if($paramVerbose)
+ {
+ print("Device name: '$deviceName'\n");
+ print("Device version: '$deviceVersion'\n");
+ print("Device HWID: '$deviceHWID'\n");
+ }
+ $cmdDeviceRead = 1;
+ }
+
+ #
+ # CMD FLASH
+ #
+ if($cmd eq "FLASH" && !$skipCurrentDrop)
+ {
+ die ("Command FLASH in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead || $cmdPkgRead || $cmdSisRead );
+
+ push @flashFiles, $params;
+ }
+
+ #
+ # Write the XML start before test run commands.
+ #
+ if( ( $cmd eq "INI" || $cmd eq "CFG" || $cmd eq "CASELIST" ) && !$skipCurrentDrop )
+ {
+ # Write plan start and flashing commands to XML.
+ if($planStartWritten == 0)
+ {
+ WriteXmlPlanStart(\*FILE_HANDLE_XML, $deviceName);
+
+ my $refFlashFiles = \@flashFiles;
+ $refFlashFiles = \@globalFlashFiles if( scalar(@globalFlashFiles) > 0 );
+
+ foreach my $flashFile ( @$refFlashFiles )
+ {
+ my $file = GetPathFileName( $flashFile );
+ my $data = $ATSXML_FLASH;
+ $data =~ s/$ATSXML_FLASH_IMAGE_NAME/$file/;
+ print FILE_HANDLE_XML ($data);
+ print("Flash file: $file\n") if($paramVerbose);
+ }
+
+ # Steps to format drives.
+ #WriteXmlFormatDrives(\*FILE_HANDLE_XML);
+
+ # Tsrc prerun custom steps.
+ if( scalar(@preRunCustomXmlData) > 0 )
+ {
+ print("Steps from prerun xml.\n");
+ print FILE_HANDLE_XML (@preRunCustomXmlData)
+ }
+
+ $planStartWritten = 1;
+ }
+
+ # Copy files to drop.
+ if( $additionalFilesCopiedToDrop == 0 )
+ {
+ # Copy flash files to drop.
+ my $refFlashFiles = \@flashFiles;
+ $refFlashFiles = \@globalFlashFiles if( scalar(@globalFlashFiles) > 0 );
+ CopyFlashFilesToDrop( $refFlashFiles, \@atsFiles );
+
+ # Copy SIS files to drop and add to files to install.
+ my $refSisFiles = \@sisFiles;
+ $refSisFiles = \@globalSisFiles if( scalar( @globalSisFiles ) > 0 );
+ foreach my $sisFile ( @$refSisFiles )
+ {
+ CopySisFileToDrop( $sisFile, \@atsFiles );
+ }
+
+ my @allPkgFiles = ( @pkgFiles, @globalPkgFiles, @globalPkgFilesForConf );
+
+ foreach my $pkgFile ( @allPkgFiles )
+ {
+ CopyPkgFilesToDrop( $pkgFile, \@atsFiles );
+ }
+
+ # Copy testframework.ini of drop to drop.
+ CopyTestframeworkIniOfDropToDrop( \@lines, $startOfDropIndex, \@atsFiles ) if( $paramCaseClass eq "" );
+
+ $additionalFilesCopiedToDrop = 1;
+ }
+
+ # XML file installation steps before these commands.
+ if( $cmd eq "INI" || $cmd eq "CFG" || $cmd eq "CASELIST" )
+ {
+ if($installationStepsWritten == 0)
+ {
+ print("File installation steps.\n") if($paramVerbose);
+ $installationStepsWritten = 1;
+ WriteXmlInstallationSteps(\@atsFiles, \*FILE_HANDLE_XML);
+ }
+ }
+ }
+
+ #
+ # CMD PKG
+ #
+ if( $cmd eq "PKG" && !$skipCurrentDrop )
+ {
+ die ("Command PKG in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+ push @pkgFiles, $params;
+ $cmdPkgRead = 1;
+ }
+
+ #
+ # CMD BOOT
+ #
+ if( $cmd eq "BOOT" )
+ {
+ $bootDefined = 1;
+ }
+
+ #
+ # CMD INI & CFG
+ #
+ if( ($cmd eq "INI" || $cmd eq "CFG") && !$skipCurrentDrop)
+ {
+ die ("Command $cmd in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+ my $refData;
+ if($cmd eq "CFG")
+ {
+ if( !$bootDefined )
+ {
+ $refData = \$ATSXML_STEP_RUNCASES;
+ }
+ else
+ {
+ $refData = \$ATSXML_STEP_RUNCASES_WITH_BOOT;
+ }
+
+ }
+ else
+ {
+ if( !$bootDefined )
+ {
+ $refData = \$ATSXML_STEP_RUNCASES_INI;
+ }
+ else
+ {
+ $refData = \$ATSXML_STEP_RUNCASES_INI_WITH_BOOT;
+ }
+ }
+
+ my $pos = index($params, " ");
+ my $testfilename = substr($params, 0, $pos);
+ my $timeout = substr($params, $pos);
+
+ RemoveWhiteSpaces(\$testfilename);
+ RemoveWhiteSpaces(\$timeout);
+
+ $testfilename = GetPathFileName($testfilename);
+
+ die("Commands INI and CFG must be have params file and timeout!") if($testfilename eq "" or $timeout eq "");
+
+ WriteXmlRunStepsForFile($testfilename, $timeout, $refData, \*FILE_HANDLE_XML);
+ }
+
+ #
+ # CMD SIS
+ #
+ if( $cmd eq "SIS" && !$skipCurrentDrop && !$globalIgnoreSis )
+ {
+ die ("Command $cmd in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+ push @sisFiles, $params;
+ $cmdSisRead = 1;
+ }
+
+ #
+ # CMD CASELIST
+ #
+ if($cmd eq "CASELIST" && !$skipCurrentDrop)
+ {
+ die ("Command CASELIST in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+ my @caseListLines;
+ my $caseCount = 0;
+
+ if( !open(FILE_HANDLE_CASELIST, $params) )
+ {
+ die("ERROR! Could not open file '" . $params . "'\n");
+ }
+ @caseListLines = <FILE_HANDLE_CASELIST>;
+ close(FILE_HANDLE_CASELIST);
+
+ WriteXmlRunStepsForCases(\@caseListLines, \*FILE_HANDLE_XML);
+ }
+
+ #
+ # CMD FETCH
+ #
+ if($cmd eq "FETCH" && !$skipCurrentDrop)
+ {
+ die ("Command FETCH in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+ WriteXmlFetchStep(\*FILE_HANDLE_XML, $params);
+ }
+
+ #
+ # CMD EMAIL
+ #
+ if($cmd eq "EMAIL" && !$skipCurrentDrop)
+ {
+ $email = $params;
+ $email = $globalEmail if( $globalEmail ne "" );
+ }
+
+ #
+ # CMD ENDDROP
+ #
+ if($cmd eq "[ENDDROP]" && !$skipCurrentDrop)
+ {
+ $skipCurrentDrop = 0;
+
+ die ("[ENDDROP] in wrong place. Line $index.") if(!$cmdDropStartRead || !$cmdNameRead || !$cmdDeviceRead );
+
+ # Tsrc prerun custom steps.
+ if( scalar(@postRunCustomXmlData) > 0 )
+ {
+ print("Steps from postrun xml.\n");
+ print FILE_HANDLE_XML (@postRunCustomXmlData)
+ }
+ else
+ {
+ WriteXmlFetchSteps(\*FILE_HANDLE_XML);
+ }
+
+ # End case, set, plan, session
+ print FILE_HANDLE_XML ($ATSXML_PLANEND);
+
+ ## Post action, fetches reports to network drive
+ #print FILE_HANDLE_XML ($ATSXML_POSTACTION);
+
+ WriteFileList(\@atsFiles, \*FILE_HANDLE_XML);
+
+ # Write footer with email address
+ my $data = $ATSXML_FOOTER;
+ $data =~ s/$ATSXML_EMAIL/$email/;
+ $data =~ s/$ATSXML_TESTNAME/$testname/;
+ print FILE_HANDLE_XML ($data);
+
+ if($testClosed == 0)
+ {
+ $testClosed = 1;
+ close(FILE_HANDLE_XML);
+ }
+
+ if( $paramRerunXml )
+ {
+ my $failedCaseCount = 0;
+
+ foreach my $pkgFile ( @pkgFiles )
+ {
+ $failedCaseCount += GetFailedCasesCountForPkg( $pkgFile, \@globalFailedCfgs );
+ }
+ foreach my $pkgFile ( @globalPkgFiles )
+ {
+ $failedCaseCount += GetFailedCasesCountForPkg( $pkgFile, \@globalFailedCfgs );
+ }
+
+ if( $failedCaseCount > 0 )
+ {
+ ExecuteDrop($basePath, 0);
+ }
+ else
+ {
+ print("No fails. Removing the drop.\n");
+ if( -e "$basePath.zip" )
+ {
+ print("\ndel $basePath.zip\n");
+ system("del $basePath.zip");
+ }
+
+ if( -e $basePath )
+ {
+ print("rmdir /s /q $basePath\n");
+ system("rmdir /s /q $basePath");
+ }
+ }
+ }
+ else
+ {
+ ExecuteDrop($basePath, 0);
+ }
+ }
+
+ #
+ # CMD USERNAME
+ #
+ if($cmd eq "USERNAME" && !$skipCurrentDrop)
+ {
+ $atsUsername = $params if( $atsUsername ) eq "";
+ }
+
+ #
+ # CMD PASSWORD
+ #
+ if($cmd eq "PASSWORD" && !$skipCurrentDrop)
+ {
+ $atsPassword = $params if( $atsPassword ) eq "";
+ }
+
+ $index++;
+ }
+
+ if($testClosed == 0)
+ {
+ close(FILE_HANDLE_XML);
+ $testClosed = 1;
+ }
+
+ print("Done.\n");
+}
+
+#------------------------------------------------------------------------------------
+# ReadCmdFromLine
+# Parameters:
+# $refLine, $refCmd, $refParams
+# Return
+# 1 if it's a command, otherwise 0.
+#------------------------------------------------------------------------------------
+sub ReadCmdFromLine
+{
+ my ($refLine, $refCmd, $refParams) = @_;
+
+ RemoveWhiteSpaces($refLine);
+
+ $$refCmd = $$refLine;
+ $$refParams = "";
+
+ if(index($$refLine, ";") == 0 || index($$refLine, "#") == 0)
+ {
+ return 0;
+ }
+
+ my $pos = index($$refLine, " ");
+ if($pos != -1)
+ {
+ $$refCmd = substr($$refLine, 0, $pos);
+ $$refParams = substr($$refLine, $pos);
+ }
+ RemoveWhiteSpaces($refCmd);
+ RemoveWhiteSpaces($refParams);
+
+ print("CMD: '$$refCmd', Params: '$$refParams'\n") if($paramDebug);
+ return 1;
+}
+
+#------------------------------------------------------------------------------------
+# CopySisFileToDrop
+# Parameters:
+# $sisFile, $refAtsFiles
+#------------------------------------------------------------------------------------
+sub CopySisFileToDrop
+{
+ my( $sisFile, $refAtsFiles ) = @_;
+
+ # Copy file to drop.
+ my $pkgline = "\"$sisFile\" - \"c:\\testframework\\$sisFile\"";
+ print("SIS file to drop: $sisFile.\n") if($paramVerbose);
+ CopyFileToDrop($pkgline, $refAtsFiles, 1);
+
+ $sisFile = GetPathFileName($sisFile);
+
+ # Installation step.
+ my @atsFile;
+ $atsFile[$ATSFILE_SRC] = "c:\\testframework\\$sisFile";
+ $atsFile[$ATSFILE_STEP_XML] = $ATSXML_STEP_INSTALLSIS;
+ $atsFile[$ATSFILE_STEP_TIMEOUT] = 5000;
+ push @$refAtsFiles, [ @atsFile ];
+}
+
+#------------------------------------------------------------------------------------
+# CopyTestframeworkIniOfDropToDrop
+# Parameters:
+# $refAtsConfLines, $refAtsFiles
+#------------------------------------------------------------------------------------
+sub CopyTestframeworkIniOfDropToDrop
+{
+ my( $refAtsConfLines, $startOfDropIndex, $refAtsFiles ) = @_;
+
+ my $index2 = $startOfDropIndex+1;
+ while($index2 < scalar(@$refAtsConfLines))
+ {
+ my $line = @$refAtsConfLines[$index2];
+ RemoveWhiteSpaces(\$line);
+ if($line eq "[ENDDROP]" or $line eq "[DROP]")
+ {
+ last;
+ }
+
+ $index2++;
+ my $cmd = $line;
+ my $filename = "";
+
+ my $pos = index($line, " ");
+ if($pos != -1)
+ {
+ $cmd = substr($line, 0, $pos);
+ $filename = substr($line, $pos);
+ RemoveWhiteSpaces(\$filename);
+ }
+ RemoveWhiteSpaces(\$cmd);
+ RemoveWhiteSpaces(\$filename);
+
+ if( $cmd eq "INI" )
+ {
+ if(index($filename, " ") != -1)
+ {
+ $filename = substr($filename, 0, index($filename, " "));
+ }
+ print("INI file to drop: $filename.\n") if($paramVerbose);
+
+ my $pkgline = "\"$filename\" - \"c:\\testframework\\$filename\"";
+ CopyFileToDrop($pkgline, $refAtsFiles, 1);
+ }
+ }
+}
+
+#------------------------------------------------------------------------------------
+# CopyFlashFilesToDrop
+# Parameters:
+# $refFlashFiles, $refAtsFiles
+#------------------------------------------------------------------------------------
+sub CopyFlashFilesToDrop
+{
+ my( $refFlashFiles, $refAtsFiles ) = @_;
+
+ my $refCopyFlashFiles = $refFlashFiles;
+
+ $refCopyFlashFiles = \@globalFlashFiles if( scalar(@globalFlashFiles) > 0 );
+ foreach my $flashFile ( @$refCopyFlashFiles )
+ {
+ # Strip the path from the flash file
+ my $flashfilename = GetPathFileName($flashFile);
+ my $dstpath = $basePath . "\\" . $dropImagePath . $flashfilename;
+
+ if( !$paramSkipFlashCopy )
+ {
+ print("copy $flashFile -> $dstpath\n") if($paramVerbose);;
+ if(! -e $flashFile)
+ {
+ print("File $flashFile does not exist! Must be copied manually to '$dstpath'!\n");
+ }
+ else
+ {
+ copy($flashFile, $dstpath);
+ die("Failed to copy '$flashFile' -> '$dstpath'") if(! -e $dstpath);
+ }
+ }
+ my @atsFile;
+ $atsFile[$ATSFILE_SRC] = $flashfilename;
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropImagePath;
+ push @$refAtsFiles, [ @atsFile ];
+ }
+}
+
+#------------------------------------------------------------------------------------
+# CopyPkgFilesToDrop
+# Parameters:
+# $filename, pkg file to be read
+# $refAtsFiles
+# returns 0 if something fails, otherwise 1
+#------------------------------------------------------------------------------------
+sub CopyPkgFilesToDrop
+{
+ my($filename, $refAtsFiles) = @_;
+
+ print("Reading PKG $filename\n") if($paramDebug);
+
+ if( !open(FILE_HANDLE, $filename) )
+ {
+ print("ERROR! Could not open file '" . $filename . "'\n");
+ #die( cwd );
+ return 0;
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ mkdir($basePath);
+ mkdir($basePath . "\\" . $dropFilePath);
+ mkdir($basePath . "\\" . $dropImagePath);
+ mkdir($basePath . "\\" . $dropBinaryPath);
+
+ foreach my $line (@array)
+ {
+ my $fileCopied = CopyFileToDrop($line, $refAtsFiles);
+
+ # Error, file was not copied and it was under epoc32 directory
+ if(!$fileCopied and index(lc($line), "\\epoc32\\") != -1)
+ {
+
+ }
+ }
+
+ return 1;
+}
+
+#------------------------------------------------------------------------------------
+# CopyFileToDrop
+# Parameters:
+# $line from pkg
+# $refAtsFiles
+# $force, file is added to drop even if it does not exist
+# returns 0 if something fails, otherwise 1
+#------------------------------------------------------------------------------------
+sub CopyFileToDrop
+{
+ my ($line, $refAtsFiles, $force) = @_;
+
+ my $src; # File location on the workstation
+ my $dst; # Where file would be installed from SIS
+
+ # Change forward slahes to backward.
+ $line =~ s/\//\\/g;
+
+ # Lets hope there's only one level change.
+ #$line =~ s/\.\./\./g;
+
+ # SRC DST
+ #"\epoc32\data\z\system\data\IptvServiceManagementApiTestIapSelection.cfg" - "c:\TestFramework\IptvServiceManagementApiTestIapSelection.cfg"
+
+ print("\n") if($paramDebug);
+
+ RemoveWhiteSpaces(\$line);
+ if( index($line, ";") == 0 && !( $line =~ m/testframework.ini/i ) )
+ {
+ print("Skipping, comment: $line\n") if($paramDebug);
+ return 0;
+ }
+
+ if( index($line, "\\") == -1 )
+ {
+ print("Skipping, not a file: $line\n") if($paramDebug);
+ return 0;
+ }
+
+ if( index($line, "http:\\") != -1 )
+ {
+ print("Skipping, url: $line\n") if($paramDebug);
+ return 0;
+ }
+
+ if(substr($line, 0, 9) eq "IF exists")
+ {
+ print("Skipping, not a file: $line\n") if($paramDebug);
+ return 0;
+ }
+
+ # Solve src
+
+ my $startPos = index($line, "\"")+1;
+ my $endPos = index($line, "\"", $startPos+1);
+
+ return 0 if($startPos == -1 || $endPos == -1);
+
+ $src = substr($line, $startPos, $endPos - $startPos);
+
+ # We are not in group folder, like the pkg file is written.
+ if( index( $src, "..\\" ) == 0 )
+ {
+ $src = substr( $src, 3 );
+ }
+
+ if($paramFindPkgFilePath ne "")
+ {
+ my $newsrc = $paramFindPkgFilePath . "\\" . GetPathFileName($src);
+ if(-e $newsrc)
+ {
+ $src = $newsrc;
+ }
+ }
+
+ # Check for forced builds.
+ if( $paramForcedBuild eq "udeb" && index($src, "\\urel\\") != -1 )
+ {
+ $src =~ s/\\urel\\/\\udeb\\/g;
+ }
+ if( $paramForcedBuild eq "urel" && index($src, "\\udeb\\") != -1 )
+ {
+ $src =~ s/\\udeb\\/\\urel\\/g;
+ }
+
+ print("src $src\n") if($paramDebug);
+
+ # Solve dst
+
+ $startPos = index($line, "\"", $endPos+1)+1;
+ $endPos = index($line, "\"", $startPos);
+
+ return 0 if($startPos == -1 || $endPos == -1);
+
+ $dst = substr($line, $startPos, $endPos - $startPos);
+ print("dst $dst\n") if($paramDebug);
+
+ # Resolve copy directory and construct info for the ATS XML
+
+ my @atsFile;
+ $atsFile[$ATSFILE_NAME] = "";
+ $atsFile[$ATSFILE_HARNESS] = "STIF";
+ $atsFile[$ATSFILE_ENABLED] = "true";
+ $atsFile[$ATSFILE_PASSRATE] = "100";
+ $atsFile[$ATSFILE_SIGNIFICANT] = "false";
+ $atsFile[$ATSFILE_TYPE] = "";
+ $atsFile[$ATSFILE_SRC] = "";
+ $atsFile[$ATSFILE_DST] = "";
+ $atsFile[$ATSFILE_DROPFULL_PATH] = "";
+ $atsFile[$ATSFILE_COMMAND] = "install";
+ $atsFile[$ATSFILE_STEP_XML] = $ATSXML_STEP_DEFAULT;
+ $atsFile[$ATSFILE_STEP_TIMEOUT] = 5000;
+
+ my $copyDest = "";
+
+#\Sys\Bin\
+# -> dropBinaryPath
+
+ my $found = 0;
+
+ if(!$found and index(lc($dst), "\\sys\\bin\\") != -1)
+ {
+ print(" - Binary\n") if($paramDebug);
+
+ $atsFile[$ATSFILE_NAME] = "Install binary file";
+ $atsFile[$ATSFILE_TYPE] = "binary";
+ $atsFile[$ATSFILE_DST] = "c:\\sys\\bin\\" . GetPathFileName($dst);
+ $atsFile[$ATSFILE_STEP_XML] = $ATSXML_STEP_BINARY;
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropBinaryPath;
+
+ $found = 1;
+ $copyDest = $basePath . "\\" . $dropBinaryPath;
+ }
+
+#c:\testing\verifyzip\
+# -> dropFilePath
+
+ if(!$found and index(lc($dst), "c:\\testing\\data\\verifyzip\\") != -1)
+ {
+ print(" - Verify\n") if($paramDebug);
+ $found = 1;
+ $copyDest = $basePath . "\\" . $dropFilePath;
+
+ $atsFile[$ATSFILE_NAME] = "Install verify file";
+ $atsFile[$ATSFILE_DST] = "c:\\testing\\data\\verifyzip\\" . GetPathFileName($dst);
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropFilePath;
+ }
+
+#c:\TestFramework\
+# -> dropFilePath
+
+ if(!$found and index(lc($dst), "c:\\testframework\\") != -1)
+ {
+ print(" - STIF file\n") if($paramDebug);
+ if( $src =~ m/init\\TestFramework.ini/i && $paramUseSecondaryIni )
+ {
+ my $secIni = "init\\all\\testframework.ini";
+ if( -e $secIni )
+ {
+ $src = $secIni;
+ }
+ }
+ $found = 1;
+ $copyDest = $basePath . "\\" . $dropFilePath;
+
+ $atsFile[$ATSFILE_NAME] = "Install testscript file";
+ $atsFile[$ATSFILE_DST] = "c:\\testframework\\" . GetPathFileName($dst);
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropFilePath;
+ }
+
+#c:\
+# -> dropFilePath
+
+ if(!$found and index(lc($dst), "c:\\") != -1 && index(lc($dst), "\\") == rindex(lc($dst), "\\") )
+ {
+ print(" - Other test file\n") if($paramDebug);
+ $found = 1;
+ $copyDest = $basePath . "\\" . $dropFilePath;
+
+ $atsFile[$ATSFILE_NAME] = "Install testscript file";
+ $atsFile[$ATSFILE_DST] = "c:\\" . GetPathFileName($dst);
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropFilePath;
+ }
+
+# All other files
+
+ if(!$found)
+ {
+ print(" - Some other file\n") if($paramDebug);
+ $copyDest = $basePath . "\\" . $dropFilePath;
+
+ $atsFile[$ATSFILE_NAME] = "Install other file";
+ $atsFile[$ATSFILE_DROPFULL_PATH] = $dropFilePath;
+
+ $dst =~ s/!:\\/c:\\/g;
+ $atsFile[$ATSFILE_DST] = $dst;
+ }
+
+ $copyDest .= GetPathFileName($dst);
+ print("-> $copyDest\n") if($paramDebug);
+
+ my $error = 0;
+ if(! -e $src)
+ {
+ if(!$force)
+ {
+ print("File does not exist: '$src'. File not added.\n");
+ $error = 1;
+ }
+ else
+ {
+ print("File does not exist: '$src'. Must be copied manually!\n");
+ }
+ }
+
+ if( $src =~ m/\.cfg/i && $paramRerunXml )
+ {
+ Rerun_GenerateCfg( $src, $copyDest, \@globalFailedCfgs );
+ }
+ else
+ {
+ copy($src, $copyDest);
+ }
+
+ if(! -e $copyDest and !$error and !$force)
+ {
+ print("Copy failed for some reason. '$src' -> '$copyDest'. File not added.\n");
+ $error = 1;
+ }
+
+ return 1 if($error);
+
+ $atsFile[$ATSFILE_SRC] = GetPathFileName($dst);
+
+ if( $atsFile[$ATSFILE_NAME] ne "" and $atsFile[$ATSFILE_SRC] ne "")
+ {
+ print("ADDING to ATS files\n\n") if($paramDebug);
+ push @$refAtsFiles, [ @atsFile ];
+ }
+
+ return 1;
+}
+
+#------------------------------------------------------------------------------------
+# GetFailedCasesCountForPkg
+# Parameters:
+# $filename, pkg file to be read
+# $refFailedCfgs
+# returns count of failed case for a PKGs cfg files.
+#------------------------------------------------------------------------------------
+sub GetFailedCasesCountForPkg
+{
+ my( $filename, $refFailedCfgs ) = @_;
+
+ if( !open(FILE_HANDLE, $filename) )
+ {
+ print("ERROR! Could not open file '" . $filename . "'\n");
+ die( cwd );
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ my $failedCaseCount = 0;
+
+ foreach my $line (@array)
+ {
+ if( $line =~ m/\.cfg/i )
+ {
+ foreach my $cfg( @$refFailedCfgs )
+ {
+ my $cfgFile = @$cfg[0];
+
+ if( $line =~ m/$cfgFile/i )
+ {
+ my $refCases = @$cfg[1];
+ $failedCaseCount += scalar(@$refCases);
+ }
+ }
+ }
+ }
+
+ return $failedCaseCount;
+}
+
+#------------------------------------------------------------------------------------
+# ExecuteDrop
+# Parameters:
+# $dropName, $forceNoDelete
+#------------------------------------------------------------------------------------
+sub ExecuteDrop
+{
+ my($dropName, $forceNoDelete) = @_;
+
+ if($atsUsername eq "" or $atsPassword eq "")
+ {
+ print("User credentials not given as params, drop $basePath must be run manually!\n");
+ return;
+ }
+
+ my $cgidir = GetCgiDir();
+
+ # Create zip if it doesn't exist.
+ if(!-e "$dropName.zip")
+ {
+ if(!-e "$dropName")
+ {
+ die("$dropName.zip or $dropName directory does not exist! Cannot execute.\n");
+ }
+ # Make zip
+ chdir $dropName;
+ my $runcmd = "zip -r ..\\$dropName.zip ATS3Drop test.xml";
+ print($runcmd . "\n") if($paramVerbose);
+ $runcmd .= ">NUL" if($paramDebug == 0);
+ system($runcmd);
+ chdir "..";
+ }
+ else
+ {
+ print("$dropName.zip exists. Executing the drop.\n");
+ }
+
+ my $dropDir = cwd;
+
+ # Copy file to network.
+
+ my $dropNetworkPath = "\\\\147.243.252.83\\Groups2\\cats\\";
+ my $dropPath = $dropNetworkPath . "$dropName.zip";
+
+ my $notifyCmdFile = "";
+
+ print("Copying drop to network...\n");
+ if( copy( "$dropName.zip", $dropPath ) )
+ {
+ $notifyCmdFile = "notifydrop_network.cmd";
+ }
+ else
+ {
+ print("Could not copy drop to network: $dropPath, sending via web.\n");
+ $notifyCmdFile = "notifydrop_local.cmd";
+ $dropPath = "$dropDir/$dropName.zip";
+ }
+# $notifyCmdFile = "notifydrop_local.cmd";
+# $dropPath = "$dropDir/$dropName.zip";
+
+ # Run the drop
+ my $runcmd = "";
+ my $printcmd = "";
+
+ $runcmd = "$notifyCmdFile $globalAtsHost $dropPath $atsUsername $atsPassword";
+ $printcmd = "$notifyCmdFile $globalAtsHost $dropPath $atsUsername <password>";
+ print($printcmd . "\n") if($paramVerbose);
+
+ if(!-e "$cgidir$notifyCmdFile")
+ {
+ print("ATS $cgidir$notifyCmdFile is missing!\n");
+ }
+ else
+ {
+ chdir( $cgidir );
+ system( $runcmd );
+ sleep(5);
+ chdir( $dropDir );
+
+ # Delete generated files.
+ if( $paramDontDeleteGeneratedFiles == 0 && $forceNoDelete == 0 )
+ {
+ print("\ndel $dropName.zip\n");
+ system("del $dropName.zip");
+
+ print("rmdir /s /q $dropName\n");
+ system("rmdir /s /q $dropName");
+ }
+ }
+}
+
+#------------------------------------------------------------------------------------
+# WriteFileList
+# Parameters:
+# $refAtsFiles
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteFileList
+{
+ my ($refAtsFiles, $fh) = @_;
+
+ # Write list of the files
+ print $fh ("<files>\n");
+ foreach my $file (@$refAtsFiles)
+ {
+ if( defined( @$file[$ATSFILE_DROPFULL_PATH] ) and defined( @$file[$ATSFILE_SRC] ) )
+ {
+ my $file = @$file[$ATSFILE_DROPFULL_PATH] . @$file[$ATSFILE_SRC];
+ print $fh ("<file>$file</file>\n");
+ }
+ }
+ print $fh ("</files>\n");
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlPlanStart
+# Parameters:
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlPlanStart
+{
+ my ($fh, $deviceName) = @_;
+
+ my $data = $ATSXML_PLANSTART;
+
+ my $replacement = "$deviceName - ";
+
+ $replacement .= "$paramCaseClass - " if( $paramCaseClass );
+
+ if( -e "\\currentRelease.xml" )
+ {
+ if( open(FILE_HANDLE, "\\currentRelease.xml") )
+ {
+ my @lines = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ foreach my $line ( @lines )
+ {
+ if( $line =~ m/\<release name=\"([[a-z0-9_]+)\"/i )
+ {
+ $replacement .= "$1 - ";
+ last;
+ }
+ }
+ }
+ }
+
+ $replacement .= Timestamp();
+
+ $data =~ s/$ATSXML_TESTPLAN_NAME/$replacement/;
+
+ $replacement = "Session";
+ $data =~ s/$ATSXML_TESTSESSION_NAME/$replacement/;
+
+ $replacement = "Set";
+ $data =~ s/$ATSXML_TESTSET_NAME/$replacement/;
+
+ $replacement = "Case";
+ $data =~ s/$ATSXML_TESTCASE_NAME/$replacement/;
+
+ print $fh ($data);
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlFormatDrives
+# Parameters:
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlFormatDrives
+{
+ my ($fh) = @_;
+
+ my $data = $ATSXML_FORMAT_DRIVES;
+
+ print $fh ($data);
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlCreateDirsSteps
+# Parameters:
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlCreateDirsSteps
+{
+ my ($fh) = @_;
+
+ my $data = $ATSXML_CREATEDIRS;
+
+ print $fh ($data);
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlRunStepsForFile
+# Parameters:
+# $filename
+# $timeout
+# $refData
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlRunStepsForFile
+{
+ my ($filename, $timeout, $refData, $fh) = @_;
+
+ my $data = $$refData;
+
+ my $replacement = $filename;
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_NAME/$replacement/;
+
+ print("Run step for '" . $filename . "'\n") if($paramVerbose);
+
+ $replacement = "C:\\testframework\\" . $filename;
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_RUNCASES_FILENAME/$replacement/;
+
+ $replacement = $timeout;
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_RUNCASES_TIMEOUT/$replacement/;
+
+ print $fh ($data);
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlRunStepsForCases
+# Parameters:
+# $refCaseList
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlRunStepsForCases
+{
+ my ($refCaseList, $fh) = @_;
+
+ my $caseCount = 0;
+ my $currCfgFileName = "";
+
+ foreach my $line (@$refCaseList)
+ {
+ my $cmd;
+ my $param;
+ my $pos = index($line, " ");
+ die("Case list file should have format: [cfg/case] [filename/casename]!\n") if($pos == -1);
+ $cmd = substr($line, 0, $pos);
+ $pos += 1;
+ $param = substr($line, $pos, length($line) - $pos - 1);
+
+ if($cmd eq "cfg")
+ {
+ $currCfgFileName = $param;
+ }
+ else
+ {
+ die("Case list file first line must be 'cfg [filename]'!") if($currCfgFileName eq "");
+
+ my $data = $ATSXML_STEP_RUNCASE;
+
+ #$replacement = "Case $caseCount";
+ my $replacement = $param;
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_NAME/$replacement/;
+ $caseCount++;
+
+ $replacement = "c:\\testframework\\$currCfgFileName";
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_RUNCASE_FILENAME/$replacement/;
+
+ $replacement = "$param";
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_RUNCASE_CASENAME/$replacement/;
+
+ print $fh ($data);
+ }
+
+ }
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlFetchSteps
+# Parameters:
+# $refAtsFiles
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlFetchSteps
+{
+ my ($fh) = @_;
+
+ #
+ # Fetch logs etc. 5 steps
+ #
+
+ my $data = $ATSXML_FETCH_STEPS;
+ my $replacement = "";
+
+ print $fh ($data);
+
+ if($paramCTC)
+ {
+ $data = $ATSXML_CTCWRITE_STEP;
+ $data =~ s/$ATSXML_CTC_PATH/$globalCtcExePath/;
+ print $fh ($data);
+
+ WriteXmlFetchStep($fh, "c:\\data\\ctc\\ctcdata.txt");
+ }
+}
+
+
+#------------------------------------------------------------------------------------
+# WriteXmlFetchStep
+# Parameters:
+# $refAtsFiles
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlFetchStep
+{
+ my ($fh, $path) = @_;
+
+ my $data = $ATSXML_FETCH_STEP;
+
+ $data =~ s/$ATSXML_FETCH_PATH/$path/;
+
+ print $fh ($data);
+}
+
+#------------------------------------------------------------------------------------
+# WriteXmlInstallationSteps
+# Parameters:
+# $refAtsFiles
+# $fh
+#------------------------------------------------------------------------------------
+sub WriteXmlInstallationSteps
+{
+ my ($refAtsFiles, $fh) = @_;
+
+ if($paramDebug)
+ {
+ print("ATS install file count: " . scalar( @$refAtsFiles ) . "\n") if($paramDebug);
+ }
+
+ my $replacement = "";
+
+ foreach my $file( @$refAtsFiles )
+ {
+ next if( !defined( @$file[$ATSFILE_STEP_XML] ) );
+
+ my $data = @$file[$ATSFILE_STEP_XML];
+
+ if( $data =~ m/$ATSXML_STEP_NAME/ )
+ {
+ die("ATSFILE_NAME is not defined!") if( !defined( @$file[$ATSFILE_NAME] ) );
+ $replacement = @$file[$ATSFILE_NAME];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_NAME/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_HARNESS/ )
+ {
+ die("ATSFILE_HARNESS is not defined!") if( !defined( @$file[$ATSFILE_HARNESS] ) );
+ $replacement = @$file[$ATSFILE_HARNESS];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_HARNESS/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_ENABLED/ )
+ {
+ die("ATSFILE_ENABLED is not defined!") if( !defined( @$file[$ATSFILE_ENABLED] ) );
+ $replacement = @$file[$ATSFILE_ENABLED];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_ENABLED/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_PASSRATE/ )
+ {
+ die("ATSFILE_PASSRATE is not defined!") if( !defined( @$file[$ATSFILE_PASSRATE] ) );
+ $replacement = @$file[$ATSFILE_PASSRATE];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_PASSRATE/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_SIGNIFICANT/ )
+ {
+ die("ATSFILE_SIGNIFICANT is not defined!") if( !defined( @$file[$ATSFILE_SIGNIFICANT] ) );
+ $replacement = @$file[$ATSFILE_SIGNIFICANT];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_SIGNIFICANT/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_PARAM_TYPE/ )
+ {
+ die("ATSFILE_TYPE is not defined!") if( !defined( @$file[$ATSFILE_TYPE] ) );
+ $replacement = @$file[$ATSFILE_TYPE];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_PARAM_TYPE/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_PARAM_SRC/ )
+ {
+ die("ATSFILE_NAME is not defined!") if( !defined( @$file[$ATSFILE_SRC] ) );
+ $replacement = @$file[$ATSFILE_SRC];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_PARAM_SRC/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_PARAM_DST/ )
+ {
+ die("ATSFILE_DST is not defined!") if( !defined( @$file[$ATSFILE_DST] ) );
+ $replacement = @$file[$ATSFILE_DST];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_PARAM_DST/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_COMMAND/ )
+ {
+ die("ATSFILE_COMMAND is not defined!") if( !defined( @$file[$ATSFILE_COMMAND] ) );
+ $replacement = @$file[$ATSFILE_COMMAND];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_COMMAND/$replacement/;
+ }
+
+ if( $data =~ m/$ATSXML_STEP_TIMEOUT/ )
+ {
+ die("ATSFILE_STEP_TIMEOUT is not defined!") if( !defined( @$file[$ATSFILE_STEP_TIMEOUT] ) );
+ $replacement = @$file[$ATSFILE_STEP_TIMEOUT];
+ XmlReadyText(\$replacement);
+ $data =~ s/$ATSXML_STEP_TIMEOUT/$replacement/;
+ }
+
+ print $fh ($data);
+ }
+}
+
+#------------------------------------------------------------------------------------
+# GetNextPlanId
+#------------------------------------------------------------------------------------
+sub GetNextPlanId
+{
+ $currentPlanId++;
+ my $id = "1.$currentPlanId";
+
+ $currentSessionId = 0;
+ $currentSetId = 0;
+ $currentCaseId = 0;
+ $currentStepId = 0;
+
+ return $id;
+}
+
+#------------------------------------------------------------------------------------
+# GetNextSessionId
+#------------------------------------------------------------------------------------
+sub GetNextSessionId
+{
+ $currentSessionId++;
+ my $id = "1.$currentPlanId.$currentSessionId";
+ return $id;
+}
+
+#------------------------------------------------------------------------------------
+# GetNextSetId
+#------------------------------------------------------------------------------------
+sub GetNextSetId
+{
+ $currentSetId++;
+ my $id = "1.$currentPlanId.$currentSessionId.$currentSetId";
+ return $id;
+}
+
+#------------------------------------------------------------------------------------
+# GetNextCaseId
+#------------------------------------------------------------------------------------
+sub GetNextCaseId
+{
+ $currentCaseId++;
+ my $id = "1.$currentPlanId.$currentSessionId.$currentSetId.$currentCaseId";
+ return $id;
+}
+
+#------------------------------------------------------------------------------------
+# GetNextStepId
+#------------------------------------------------------------------------------------
+sub GetNextStepId
+{
+ $currentStepId++;
+ my $id = "1.$currentPlanId.$currentSessionId.$currentSetId.$currentCaseId.$currentStepId";
+ return $id;
+}
+
+#------------------------------------------------------------------------------------
+# Timestamp
+#
+# Parameters:
+#------------------------------------------------------------------------------------
+sub Timestamp
+{
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
+
+ $mday = "0$mday" if( length($mday) < 2 );
+ $hour = "0$hour" if( length($hour) < 2 );
+ $min = "0$min" if( length($min) < 2 );
+
+ return "" . ($year+1900) . "-" . ($mon+1) . "-" . $mday . " " . $hour . ":" . $min;
+}
+
+#------------------------------------------------------------------------------------
+# InitXml
+#
+# Parameters:
+#------------------------------------------------------------------------------------
+sub InitXml
+{
+
+$ATSXML_HEADER_START =
+#"<?xml version=\"1.0\"?>\n" .
+"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" .
+"<test>\n" .
+"<priority>ATSXML_DROPPRIORITY</priority>" .
+" <id>1</id>\n" .
+" <name>ATSXML_TESTNAME</name>\n" .
+" <target>\n" .
+" <device rank=\"none\" alias=\"DEFAULT\">\n" .
+" <property name=\"HARNESS\" value=\"STIF\" />\n" .
+" <property name=\"TYPE\" value=\"ATSXML_TESTDEVICE\" />\n";
+
+$ATSXML_HEADER_END =
+" </device>\n" .
+" </target>\n";
+
+$ATSXML_PLANSTART =
+" <plan name=\"ATSXML_TESTPLAN_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\">\n" .
+" <session name=\"ATSXML_TESTSESSION_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\">\n" .
+" <set name=\"ATSXML_TESTSET_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\">\n" .
+" <target>\n" .
+" <device rank=\"master\" alias=\"DEFAULT\"/>\n" .
+" </target>\n" .
+" <case name=\"ATSXML_TESTCASE_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\">\n";
+
+
+$ATSXML_FLASH = " <flash target-alias=\"DEFAULT\" images=\"ATS3Drop/images/ATSXML_FLASH_IMAGE_NAME\" />\n";
+
+$ATSXML_FORMAT_DRIVES =
+" <step name=\"Format drive E\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>format</command>\n" .
+" <params>\n" .
+" <param drive=\"e\"/>" .
+" <param mode=\"quick\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Format drive F\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>format</command>\n" .
+" <params>\n" .
+" <param drive=\"f\"/>" .
+" <param mode=\"quick\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Format drive G\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>format</command>\n" .
+" <params>\n" .
+" <param drive=\"g\"/>" .
+" <param mode=\"quick\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_CREATEDIRS =
+" <step name=\"Create log directory for testmodule\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\logs\\testframework\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Create log directory for iptvlogs\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\logs\\Fusion\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Create log directory for livetvlogs\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\logs\\Livetv\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Create directory for verify files\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\testing\\data\\verifyzip\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Create directory for verify files\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\testing\\data\\verifynew\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Create directory for TestScripter logs\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>makedir</command>\n" .
+" <params>\n" .
+" <param dir=\"c:\\logs\\testframework\\TestScripter\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_PLANEND =
+" </case>\n" .
+" </set>\n" .
+" </session>\n" .
+" </plan>\n";
+
+
+$ATSXML_FOOTER =
+"<postAction>\n" .
+" <type>SendEmailAction</type>\n" .
+" <params>\n" .
+" <param name='type' value='ATS3_REPORT'/>\n" .
+" <param name='to' value='ATSXML_EMAIL'/>\n" .
+" <param name='subject' value='ATS3 Report - ATSXML_TESTNAME'/>\n" .
+" <param name='send-files' value='true'/>\n" .
+" </params>\n" .
+" </postAction>\n" .
+"</test>\n";
+
+$ATSXML_STEP_DEFAULT =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"ATSXML_STEP_HARNESS\" enabled=\"ATSXML_STEP_ENABLED\" passrate=\"ATSXML_STEP_PASSRATE\" significant=\"ATSXML_STEP_SIGNIFICANT\">\n" .
+" <command>ATSXML_STEP_COMMAND</command>\n" .
+" <params>\n" .
+" <param src=\"ATSXML_STEP_PARAM_SRC\"/>\n" .
+" <param dst=\"ATSXML_STEP_PARAM_DST\"/>\n" .
+#" <param component-path=\"ATSXML_STEP_PARAM_COMPONENT_PATH\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_BINARY =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"ATSXML_STEP_HARNESS\" enabled=\"ATSXML_STEP_ENABLED\" passrate=\"ATSXML_STEP_PASSRATE\" significant=\"ATSXML_STEP_SIGNIFICANT\">\n" .
+" <command>ATSXML_STEP_COMMAND</command>\n" .
+" <params>\n" .
+" <param type=\"ATSXML_STEP_PARAM_TYPE\"/>\n" .
+" <param src=\"ATSXML_STEP_PARAM_SRC\"/>\n" .
+" <param dst=\"ATSXML_STEP_PARAM_DST\"/>\n" .
+#" <param component-path=\"ATSXML_STEP_PARAM_COMPONENT_PATH\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_RUNCASES =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"true\">\n" .
+" <command>run-cases</command>\n" .
+" <params>\n" .
+" <param module=\"TestScripter\"/>\n" .
+" <param testcase-file=\"ATSXML_STEP_RUNCASES_FILENAME\"/>\n" .
+" <param filter=\"*\"/>\n" .
+" <param timeout=\"ATSXML_STEP_RUNCASES_TIMEOUT\"/>\n" .
+" <param component-path=\"ATS3Drop\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_RUNCASES_WITH_BOOT =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"true\">\n" .
+" <command>run-cases</command>\n" .
+" <reboot target-alias=\"*\" when=\"before\"/>\n" .
+" <params>\n" .
+" <param module=\"TestScripter\"/>\n" .
+" <param testcase-file=\"ATSXML_STEP_RUNCASES_FILENAME\"/>\n" .
+" <param filter=\"*\"/>\n" .
+" <param timeout=\"ATSXML_STEP_RUNCASES_TIMEOUT\"/>\n" .
+" <param component-path=\"ATS3Drop\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_RUNCASES_INI =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"true\">\n" .
+" <command>run-cases</command>\n" .
+" <params>\n" .
+" <param engineini=\"ATSXML_STEP_RUNCASES_FILENAME\"/>\n" .
+" <param filter=\"*\"/>\n" .
+" <param timeout=\"ATSXML_STEP_RUNCASES_TIMEOUT\"/>\n" .
+" <param repeat=\"1\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_RUNCASES_INI_WITH_BOOT =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"true\">\n" .
+" <command>run-cases</command>\n" .
+" <reboot target-alias=\"*\" when=\"before\" />\n" .
+" <params>\n" .
+" <param engineini=\"ATSXML_STEP_RUNCASES_FILENAME\"/>\n" .
+" <param filter=\"*\"/>\n" .
+" <param timeout=\"ATSXML_STEP_RUNCASES_TIMEOUT\"/>\n" .
+" <param repeat=\"1\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+
+$ATSXML_STEP_RUNCASE =
+" <step name=\"ATSXML_STEP_NAME\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"true\">\n" .
+" <command>run-case</command>\n" .
+" <params>\n" .
+" <param module=\"TestScripter\"/>\n" .
+" <param testcase-file=\"ATSXML_STEP_RUNCASE_FILENAME\"/>\n" .
+" <param id=\"ATSXML_STEP_RUNCASE_CASENAME\"/>\n" .
+" <param timeout=\"600\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_STEP_INSTALLSIS =
+" <step name=\"Install SIS\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>install-software</command>\n" .
+" <params>\n" .
+" <param sisPackageName=\"ATSXML_STEP_PARAM_SRC\"/>\n" .
+" <param upgradeAllowed=\"true\"/>\n" .
+" <param optionalItemsAllowed=\"true\"/>\n" .
+" <param OCSP_Done=\"true\"/>\n" .
+" <param ignoreOCSPWarnings=\"true\"/>\n" .
+" <param untrustedAllowed=\"true\"/>\n" .
+" <param packageInfoAllowed=\"true\"/>\n" .
+" <param userCapGranted=\"true\"/>\n" .
+" <param killApp=\"true\"/>\n" .
+" <param overWriteAllowed=\"true\"/>\n" .
+" <param downloadAllowed=\"false\"/>\n" .
+"<!-- <param downloadUsername=\"user\"/>-->\n" .
+"<!-- <param downloadPassword=\"passwd\"/>-->\n" .
+" <param installDrive=\"C\"/>\n" .
+" <param upgradeData=\"true\"/>\n" .
+" <param timeout=\"ATSXML_STEP_TIMEOUT\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_FETCH_STEPS =
+" <step name=\"Fetch Test module Report\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>fetch-log</command>\n" .
+" <params>\n" .
+" <param type=\"text\"/>\n" .
+" <param delete=\"true\"/>\n" .
+" <param path=\"C:\\Logs\\TestFramework\\*\"/>\n" .
+" </params>\n" .
+" </step>\n" .
+" <step name=\"Fetch TestScripter logs\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>fetch-log</command>\n" .
+" <params>\n" .
+" <param type=\"text\"/>\n" .
+" <param delete=\"true\"/>\n" .
+" <param path=\"C:\\Logs\\TestFramework\\TestScripter\\*\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_FETCH_STEP =
+" <step name=\"Fetch Test module Report\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>fetch-log</command>\n" .
+" <params>\n" .
+" <param type=\"text\"/>\n" .
+" <param delete=\"true\"/>\n" .
+" <param path=\"ATSXML_FETCH_PATH\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_CTCWRITE_STEP =
+" <step name=\"Save CTC data\" harness=\"STIF\" enabled=\"true\" passrate=\"100\" significant=\"false\">\n" .
+" <command>execute</command>\n" .
+" <params>\n" .
+" <param parameters=\"writefile\"/>\n" .
+" <param file=\"ATSXML_CTC_PATH\"/>\n" .
+" </params>\n" .
+" </step>\n";
+
+$ATSXML_POSTACTION =
+" <postAction>" .
+" <type>FileStoreAction</type>" .
+" <params>" .
+#" <param name=\"to-folder\" value=\"\\someserver\somefolder\§RUN_NAME§\"/>" .
+" <param name=\"to-folder\" value=\"\\\\oucifs1\\cp_sw\\programs\\video_applications_stream\\iptv\\testing\\CI_reports\\§RUN_START_DATE§_§RUN_START_TIME§_§RUN_NAME§\"/>" .
+" <param name=\"report type\" value=\"STIF_COMPONENT_REPORT_ALL_CASES\"/>" .
+" </params>" .
+" </postAction>";
+
+}
+
+
+
+sub GetCgiDir
+ {
+ # 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;
+ }
+ return $cgidir;
+}
+
+
+
+#------------------------------------------------------------------------------------
+# 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) = @_;
+
+ 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);
+ } 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);
+}