diff -r 000000000000 -r 9736f095102e buildverification/smoketest/SmokeTest.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildverification/smoketest/SmokeTest.pm Tue Jan 26 15:16:33 2010 +0200 @@ -0,0 +1,434 @@ +# 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; +