diff -r 6beaa9cf4752 -r 4ca382093dae buildverification/smoketest/SmokeTest.pm --- a/buildverification/smoketest/SmokeTest.pm Mon Feb 22 17:54:00 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -# Copyright (c) 2004-2009 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: -# SmokeTestSuite.pm -# The SmokeTestSuite package contains subroutines that are needed to build a -# testdriver test suite. -# This script was born on 18/04/2005 -# -# - -#!/usr/bin/perl -w -package SmokeTest; -use SmokeTestROM; -use SmokeTestSuite; -use FindBin; -use lib "$FindBin::Bin\\..\\..\\generic\\utils\\GenResult\\"; -use FileRead; #Need to include a Findbin::path -use strict; - -# -# Global Variables -# -our $BuildDir = $ENV{'BuildDir'}; # usually M: -our $serverpool = $ENV{'SmokeTestServerPool'}; -our $buildNo = $ENV{'BuildShortName'}; # Eg. 9.1 -# The Client is run from the dir where SmokeTestClient.pl is located -# This is to ensure that any ROMs and test packages created are stored there. -our $sourceDir = "$BuildDir\\src\\common\\testtools"; -our $TestSuite = "SmokeTest"; -our $SmokeTestDir; -our $NandDir; -our $TestDriverLocation = "\\epoc32\\tools\\TDEP"; # location for TD zips -our $TestDriverDrive = "M:"; -our $TestDriverCmd = "$TestDriverDrive\\testdriver\\testdriver.cmd"; -our $TestDriverXML; - -# Publish details -our $PublishServer = $ENV{'PublishLocation'}; -our $ProductType = $ENV{'Type'}; -our $BuildNum = $ENV{'BuildNumber'}; -our $LogsDir = $ENV{'LogsDir'}; - -# Epocwind.out -my $tempDirLocation = $ENV{'TEMP'}; - -# -# CheckVars: ensures that the essential environment vars and directories exist -# -sub CheckVars -{ - print "\n** Settings **\n"; - print "Build Drive = $BuildDir\n"; - print "Smoke Test Server Pool = $serverpool\n"; - print "Build Product = $buildNo\n"; - print "TestDriver Zip Location = $TestDriverLocation\n"; - print "TestDriver XML Location = $TestDriverXML\n"; - print "TestDriver Source Location = $sourceDir\n"; - print "TestDriver Drive = $TestDriverDrive\n"; - print "SmokeTest working directory= $SmokeTestDir\n"; - print "NAND build directory = $NandDir\n"; - - print "\n** Publishing Information **\n"; - - print "Publish server = $PublishServer\n"; - print "Product Type = $ProductType\n"; - print "Build Number = $BuildNum\n"; - - DieLog("CheckVars: \"Build Directory\" not defined") if !defined $BuildDir; - DieLog("CheckVars: \"Smoke Test Server Pool\" not defined") if !defined $serverpool; - DieLog("CheckVars: \"Build Product\" not defined") if !defined $buildNo; - DieLog("CheckVars: \"Publish server\" not defined") if !defined $PublishServer; - DieLog("CheckVars: \"Product Type\" not defined") if !defined $ProductType; - DieLog("CheckVars: \"Build Number\" not defined") if !defined $BuildNum; - DieLog("CheckVars: Directory \"SmokeTest working directory\" does not exist") if ! -e $SmokeTestDir; - DieLog("CheckVars: Directory \"TestDriver Zip Location\" does not exist") if ! -e $TestDriverLocation; -} - -sub main -{ - print "\n\n*** START OF SMOKE TEST ***\n\n"; - - PrintDateTime(); - - my ($iSourceDir, $iTestSuite, $iProduct, $iServerPool, $iProductType, - $iPublishLocation, $iBuildNumber, $iXML, $iUnzip, $iBuildDrive, $iTDDrive) = @_; - - $TestSuite = $iTestSuite if defined $iTestSuite; - $BuildDir = $iBuildDrive if defined $iBuildDrive; - $sourceDir = $BuildDir.$iSourceDir if defined $iSourceDir; - $buildNo = $iProduct if defined $iProduct; - $serverpool = $iServerPool if defined $iServerPool; - $ProductType = $iProductType if defined $iProductType; - $PublishServer = $iPublishLocation if defined $iPublishLocation; - $BuildNum = $iBuildNumber if defined $iBuildNumber; - $TestDriverDrive = $iTDDrive if defined $iTDDrive; - - $SmokeTestDir = "$sourceDir\\$TestSuite"; - if (defined $iXML) - { - $TestDriverXML = $iXML; - } - else - { - $TestDriverXML = $SmokeTestDir."\\xml"; - } - $NandDir = "$BuildDir\\src\\cedar\\generic\\base\\e32\\rombuild"; - - CheckVars(); - - # change dir to Smoketest dir - chdir "$SmokeTestDir" or DieLog("Can't cd to $SmokeTestDir"); - - # unzip latest version of TD - if (defined $iUnzip) - { - unpackTestDriver2(); - } - - # configure TD - configureTestDriver2(); - - # - # Copy the correct configuration.cfg file - # But such source only exists for these products: 8.0a, 8.0b, 8.1a, 8.1b, 9.0, 9.1 - # - print "\n#\n# Copy the correct configuration.cfg file\n#\n"; - ExecCommand("COPY /Y $SmokeTestDir\\Group\\$buildNo\\configuration.cfg $SmokeTestDir\\Group\\configuration.cfg"); - - #Read in hash of smoketests to be run for each product. - my ($iCfgFileLocation) = "$FindBin::Bin\\..\\..\\generic\\utils\\GenResult"; - - #Read in the smoketest list from a cfg file - my $text = &FileRead::file_read ("$iCfgFileLocation\\Product.cfg"); - #Search for an entry matching (At the beginning of line there should be 1 or more alphanumberic chars - #Followed by a "."(optional to allow codenames) followed by more alphanumberic chars followed by 0 or more spaces then an = then 0 - #or more spaces then any amount of chars till the end of the line. - #8.1b = EMULATOR_WINSCW ARM4_LUBBOCK ARMV5_LUBBOCK - my %iProducts = $text =~ /^\s*(\w+\.?\w+)\s*=\s*(.+)$/mg ; - - #Get the list of platforms to be smoketested for the product. - #Need to turn the hash value into an array using split - my @iPlatforms = split (/ /,$iProducts{$buildNo}); - #Build and Execute Test package for each platform as read from configuration file and create and zip rom. - ProcessPlatforms (@iPlatforms); - - # - # Build Test Package for ROMs - # - if ($buildNo eq '8.1a' || $buildNo eq '8.1b') - { - &SmokeTestSuite::BuildAndPackage("ARM4"); - } - - if ($buildNo ne '8.1a') - { - &SmokeTestSuite::BuildAndPackage("ARMv5"); - } - - # - # Find out which server to use - # - print "\n#\n# Find out which server to use\n#\n"; - ProcessPlatformsforSmoketest(@iPlatforms); - - # - # End of Smoke Test - # - print "\n\n*** END OF SMOKE TEST ***\n\n"; -} - -# -# DieLog: Exits script and inserts a Remark in the build log, which will be picked up by htmlscanlog -# -sub DieLog -{ - die "\nREMARK: $_[0]\n $!\n\n\n"; -} - - -# -# Build and publish based on entries in the Product.cfg file -# -sub ProcessPlatforms -{ - -my $i = 0; -my @temp; -my @iPlatforms = @_; - -foreach my $platform (@iPlatforms) - { - undef @temp; - @temp = split (/_/,$iPlatforms[$i]); - $i++; - - if( $temp[0] eq "EMULATOR") - { - &SmokeTestSuite::BuildAndPublish("$temp[1]"); - CheckPlatsecErrors("$temp[1]"); - } - else - { - - if(3 == scalar(@temp)) # there are 3 arguments, so this will be a NAND ROM - { - if((lc($temp[1]) eq "h4hrp") && (lc($temp[2]) eq "nand\(dp\)" )) # H4HRP Demand Paging ROM options is -D_NAND2 - { - &SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "pagedrom", "PlatSec", "$buildNo", "-D_NAND2" ); - } - elsif((lc($temp[1]) eq "h4hrp") && (lc($temp[2]) eq "nand" )) # H4 options is -D_NAND2 - { - &SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo", "-D_NAND2"); - } - elsif(lc($temp[1]) eq "h2") # H2 options is -D_NAND# H2 option is NAND2 due to CR 0844 (Both H2 and H4 use -D_NAND2) - { - &SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo", "-D_NAND2"); - } - else # Bad option entered - { - die "SmokeTest::ProcessPlatforms error: invalid board type entered: $temp[1]. Check that Product.cfg is correct.\n"; - } - } - else # This is the NOR ROM. - { - &SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo"); - } - } - - } - -} - -# -# Build and publish based on entries in the Product.cfg file -# -sub ProcessPlatformsforSmoketest -{ - -my $i = 0; -my @temp; -my @iPlatforms = @_; - -foreach my $platform (@iPlatforms) - { - undef @temp; - @temp = split (/_/,$iPlatforms[$i]); - $i++; - if( $temp[0] eq "EMULATOR") - { - next; - } - my $mServ = &SmokeTestSuite::PollServers("$temp[1]"); - unless (defined $mServ) - { - next; - } - if(3 == scalar(@temp)) - { - if(lc($temp[2]) eq "nand\(dp\)" ) - { - &SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ, "NAND\(DP\)\\"); - } - elsif(lc($temp[2]) eq "nand") - { - &SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ, "NAND\\"); - } - } - else - { - &SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ); - } - } -} - -# -# Check for platsec errors - checks the epocwind.out on build machine -# -sub CheckPlatsecErrors -{ - print "\n"; - print "#\n# Check for platsec errors\n#\n"; - print "\n"; - PrintDateTime(); - - # open epocwind.out and parse for both errors and warnings - open EPOCWIND, "$tempDirLocation\\epocwind.out" or print "\nERROR: Cannot open EPOCWIND.OUT\n"; - my @epocWind = ; - close EPOCWIND; - - foreach my $tempEW (@epocWind) - { - if ($tempEW =~ m/(\*PlatSec\* ERROR)(.*)/i) - { - print "\nERROR: $_[0] - $1$2"; - } - elsif ($tempEW =~ m/(\*PlatSec\* WARNING)(.*)/i) - { - print "\nWARNING: $_[0] - $1$2"; - } - } -} - -# -# Take TestDriver and unpack into a given location. -# -sub unpackTestDriver2() -{ - # - # Unzip TestDriver - # - print "\n#\n# Unzip TestDriver\n#\n"; - PrintDateTime(); - - # first remove the "old" version of test driver - print "\n"; - ExecCommand("RMDIR $TestDriverDrive\\testdriver\\ /Q /S"); - - # now unzip the latest version of testdriver which has been synced down - ExecCommand("%EPOCROOT%epoc32\\tools\\unzip.exe $TestDriverLocation\\TestDriver2.zip -d $TestDriverDrive\\testdriver\\"); - - # now copy the latest version of testdriver_new.cmd which has been obtained - ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\testdriver_new.cmd $TestDriverCmd"); - - # now copy the latest version of logging.properties which has been obtained - ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\logging.properties $TestDriverDrive\\testdriver\\"); - - # 11-08-08 - additional steps required for SITK1.2 version of TD2 - ExecCommand("MKDIR $TestDriverDrive\\testdriver\\eclipse\\links\\"); - - ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\testdriver.link $TestDriverDrive\\testdriver\\eclipse\\links\\"); - - # - # Unzip JRE v1.5 - # - print "\n"; - print "#\n# Unzip JRE 1.5 required by TestDriver v2\n#\n"; - print "\n"; - - ExecCommand("%EPOCROOT%epoc32\\tools\\unzip.exe \\\\builds01\\devbuilds\\BuildPCs\\Software\\JDK1.5.0_13\\jre1.5.zip -d $TestDriverDrive\\testdriver\\"); - -} - -sub configureTestDriver2() -{ - # - # Configure TestDriver - # - print "\n"; - print "#\n# Configure TestDriver\n#\n"; - print "\n"; - my $localtimes = localtime; - PrintDateTime(); - - ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config -e $BuildDir\\ - -x $TestDriverXML - -l $TestDriverDrive\\TestDriver\\Results - --source $sourceDir - -s smoketest - -r $TestDriverDrive\\TestDriver\\Repos - -c $TestDriverDrive\\TestDriver\\Results"); - - ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config --commdb overwrite"); - ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config --bldclean off"); - - # platsec for > 9.x only - if ($buildNo ne "8.1a" && $buildNo ne "8.1b") - { - ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config -p ON"); - } - - # Setup commdb for WINSCW smoketest - print "\n*** Setup commdb for WINSCW to use WinTAP ***\n"; - - # export smoketest_commdb.xml to a place that ced.exe can see it - ExecCommand("copy $SmokeTestDir\\smoketest_commdb.xml $BuildDir\\epoc32\\WINSCW\\c\\"); - ExecCommand("$BuildDir\\epoc32\\release\\WINSCW\\udeb\\ced.exe c:\\smoketest_commdb.xml"); - - print "\n*** Confirm TestDriver Config ***\n"; - ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config"); - print "\n"; -} - -# ExecCommand -# -# Execute a system command, having first echoed it. Display and return the output of the command. -# -# Input: Command string (without final newline) -# -# Output: Command output (including STDERR) to STDOUT -# -# Return: Command output (including STDERR) -# -sub ExecCommand -{ - my $iCmd = shift; - print "\n================================================================\n"; - print "Command: $iCmd\n"; - print "----------------------------------------------------------------\n"; - my $iRet = `$iCmd 2>&1`; - chomp $iRet; - print "Return: $iRet\n"; - print "================================================================\n"; - return $iRet; -} - -# PrintDateTime -# -# Print to STDOUT, Current Date and Time -# -# Input: none -# -# Output: text to STDOUT -# -sub PrintDateTime -{ - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); - #### my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time); - $year += 1900; - $mon += 1; - printf "\n*** Current Time: %04d/%02d/%02d %02d:%02d:%02d ***\n", $year,$mon,$mday,$hour,$min,$sec; -} - -1; -