diff -r 3a35f7917fa6 -r 5b5908ec640f buildverification/smoketest/SmokeTestSuite.pm --- a/buildverification/smoketest/SmokeTestSuite.pm Thu May 27 12:52:45 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,501 +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: -# 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 SmokeTestSuite; -use strict; - -my $servicename; - -# -# BuildAndPackage: Used to create a test package for remote execution on the ROM -# -sub BuildAndPackage -{ - # - # Build Test Package for $_[0] - # - print "\n#\n# Build Test Package for $_[0]\n#\n"; - SmokeTest::PrintDateTime(); - my $testbuild = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd build -p $_[0] -b udeb -s $SmokeTest::TestSuite"); - - # now check for results - $testbuild =~ m/fail\:\s(\d+)\s\%/i; - - if ( ($testbuild =~ m/\*\*error\:/i) || $1 == 100 ) - { - print "\nREMARK: Smoke Test *** Building the Test failed $!\n"; - #&SmokeTest::DieLog("Error In Smoke Test: Building the Test failed"); - } - else - { - print "\n*** Test Building successful ***\n"; - } - - SmokeTest::PrintDateTime(); - - my $testpackage = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd package -p $_[0] -b udeb -s $SmokeTest::TestSuite --tp $SmokeTest::SmokeTestDir\\$_[0].tpkg"); - print "\n"; - - if (($testpackage =~ m/\*\*error/i)) - { - print "\nREMARK: Smoke Test *** Building the Test Package failed\n\"$1\"\n"; - #&SmokeTest::DieLog("Error In Smoke Test: Building the Test Package failed"); - } - else - { - print "\n*** Building the Test Package successful ***\n"; - } - - SmokeTest::PrintDateTime(); -} - -# -# BuildAndPublish: used to build and test the smoketest test suite on an Emulator -# -sub BuildAndPublish -{ - my $runid = 0; - my $buildname; - - # - # Build Test Suite for $_[0] - # - print "\n#\n# Build Test Suite for $_[0]\n#\n"; - SmokeTest::PrintDateTime(); - my $testbuildwinscw = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd build -p $_[0] -b udeb -s $SmokeTest::TestSuite"); - - # now check for results - $testbuildwinscw =~ m/fail\:\s(\d+)\s\%/i; - - if ( ($testbuildwinscw =~ m/\*\*error\:/i) || $1 == 100 ) - { - print "\nREMARK: Smoke Test *** Building the Test for $_[0] failed $!\n"; - #&SmokeTest::DieLog("Error In Smoke Test: Building the Test failed"); - } - else - { - print "\n*** Test Build successful ***\n"; - } - - # - # Run Test Suite for $_[0] - # - print "\n"; - print "#\n# Run Test Package for $_[0]\n#\n"; - print "\n"; - SmokeTest::PrintDateTime(); - - SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd run -p $_[0] -b udeb -s $SmokeTest::TestSuite"); - - SmokeTest::PrintDateTime(); - - # - # Publish results of emulator onto publish server - # - print "\n"; - print "#\n# Publish results of emulator onto publish server\n#\n"; - print "\n"; - - # - # Find the correct directory to publish - # - my $source = "$SmokeTest::TestDriverDrive\\TestDriver\\Results"; - if (opendir Results, $source) - { - my @dirArray = readdir(Results); - - #print "@results"; - # to remove "." and ".." from this list - shift @dirArray; - shift @dirArray; - - if (!scalar(@dirArray)) - { - print "REMARK: The emulator for $_[0] has an empty $source directory"; - return; - } - else - { - print "\nContents of $source = @dirArray\n"; - $source .= "\\$dirArray[0]"; - # dirArray should always have just the one subdir - 0XXXX_Symbian_OS_vX.X - - $buildname = $dirArray[0]; - - if (opendir tempDir, "$source") - { - # to remove "." and ".." from this list - @dirArray = readdir(tempDir); - shift @dirArray; - shift @dirArray; - - print "\nContents of $source = @dirArray\n"; - - foreach my $directory (@dirArray) - { - if ($directory =~ /(?:$_[0])/i) - { - $source .= "\\$directory"; - - # added this to remove udeb/xx - if (opendir tempDir, "$source") - { - # to remove "." and ".." from this list - @dirArray = readdir(tempDir); - shift @dirArray; - shift @dirArray; - - print "\nContents of $source = @dirArray\n"; - - foreach my $directory (@dirArray) - { - if ($directory =~ /(udeb|urel)/i) - { - $source .= "\\$directory"; - if (opendir tempDir, "$source") - { - # to remove "." and ".." from this list - @dirArray = readdir(tempDir); - shift @dirArray; - shift @dirArray; - - print "\nContents of $source = @dirArray\n"; - - my @iNumericDirList = (); - foreach my $directory (@dirArray) - { - if ($directory =~ /(^[0-9]+)/i) - { - push @iNumericDirList, $directory; - } - } - @iNumericDirList = sort { $b <=> $a } @iNumericDirList; - $runid = $iNumericDirList[0]; - $source .= "\\$runid"; - last; - } - last; - } - } - } - - } - } - - print "\nThe final source directory = $source\n"; - } - else - { - print "REMARK: The emulator for $_[0] has an empty $source directory"; - return; - } - } - my $emulatorpublish = "$SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\SmokeTest\\Emulator\\$_[0]"; - - SmokeTest::ExecCommand ("MKDIR $emulatorpublish"); # or GoNext("$publishlocation\\$name\\"); - - SmokeTest::ExecCommand ("XCOPY /C /Y /E $source\\xml $emulatorpublish\\xml\\"); - - # - # Copy runXX__SymbianOS_vYY.xml/html to _Symbian_OS_vYY.xml/html - # - - my $xmlfile = "$source\\run".$runid."_".$buildname."\.xml"; - my $htmlfile = "$source\\run".$runid."_".$buildname."\.html"; - - if (-e $xmlfile) - { - SmokeTest::ExecCommand ("COPY $xmlfile $emulatorpublish\\$buildname.xml"); - } - - if (-e $htmlfile) - { - SmokeTest::ExecCommand ("COPY $htmlfile $emulatorpublish\\$buildname.html"); - } - - # - # Publish results of emulator onto logs dir - # - print "\n"; - print "#\n# Publish results of emulator onto Logs Dir\n#\n"; - print "\n"; - - my $emulatorpublish = "$SmokeTest::LogsDir\\SmokeTest\\Emulator\\$_[0]\\"; - - SmokeTest::ExecCommand ("MKDIR $emulatorpublish"); # or GoNext("$publishlocation\\$name\\"); - - SmokeTest::ExecCommand ("XCOPY /C /Y /E $source $emulatorpublish"); - } - else - { - print "REMARK: Cannot open dir $source: $!"; - return; - } - SmokeTest::PrintDateTime(); -} - -# -# PollServers: Polls all the servers from the Pool and picks out the one with the shortest queue. -# -sub PollServers -{ - # - # Parse ENV and create an array of smoketest servers for $_[0] - # - print "\n"; - print "#\n# Parse ENV and create an array of smoketest servers for $_[0]\n#\n"; - print "\n"; - SmokeTest::PrintDateTime(); - - if (($_[0] eq "Lubbock") || ($_[0] eq "LUBBOCK")) - { - $SmokeTest::servicename = "RemoteTestDriverLubbock"; - } - elsif ($_[0] eq "H2") - { - $SmokeTest::servicename = "RemoteTestDriverH2"; - } - elsif ($_[0] eq "H4HRP") - { - $SmokeTest::servicename = "RemoteTestDriverH4HRP"; - } - else - { - &SmokeTest::DieLog("Cannot poll serverpool for pool \"$_[0]\""); - } - - my @servers = split /\#/, $SmokeTest::serverpool; - if (@servers < 1) - { - &SmokeTest::DieLog("*** Error In Smoke Test ***\nNo SmokeTest Servers specified for $_[0]$!\n"); - } - else - { - print "\n*** Retrieved Pool of Smoke Test Servers from ENV for $_[0]***\n"; - } - - # - # Poll each of the smoke test servers and parse the results - # - print "\n"; - print "#\n# Poll each of the smoke test servers and parse the results\n#\n"; - print "\n"; - - my %serverlist; - - print "Checking TestDriver Version\n"; - SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd version"); - - foreach my $server (@servers) - { - print "Polling Server: $server\n"; - my $masterstatus = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd masterstatus --srv //$server/$SmokeTest::servicename"); - - my $value = -2; - if ($masterstatus =~ m/Master: TestDriver is currently (....)/i) - { - if ($1 eq 'free') - { - #print "Free!\n"; - $value = 0; - } - else - { - $masterstatus =~ m/are\s+(\w+)\s+jobs/i; - if ($1 =~ m/\D+/) - { - $value = 1; - } - else - { - $value = $1 + 1; - } - } - } - else - { - # The master is not running a service - $value = -1; - } - $serverlist{$server} = $value; - print "\n"; - } - - # - # Decide which server to use - # - print "\n"; - print "#\n# STEP8 Decide which server to use\n#\n"; - print "\n"; - - my $masterserver; - - # Loop through first time only to print out all the available servers - print "\nAvailable Servers\n"; - foreach my $servername (sort { $serverlist{$a} <=> $serverlist{$b} } keys %serverlist) - { - print "\n$servername : number in queue are $serverlist{$servername}\n"; - } - - # Loop through second time to actually select the correct server - foreach my $servername (sort { $serverlist{$a} <=> $serverlist{$b} } keys %serverlist) - { - if ($serverlist{$servername} > -1) - { - $masterserver = $servername; - last; - } - } - - if (defined $masterserver) - { - print "\n*** The Smoke Test Server to be used for $_[0] is $masterserver ***\n"; - } - else - { - print "\nREMARK: Smoke Test *** No available Smoke Test Servers for $_[0] \n"; - #&SmokeTest::DieLog("Error In Smoke Test: No available Smoke Test Servers for $_[0]"); - } - SmokeTest::PrintDateTime(); - return $masterserver; -} - -# -# Usage: RunRemote(Architecture, Testing Board, Server) -# -sub RunRemote -{ - my $masterserver = $_[2]; - - - # - # Call TestDriver runremote for $_[0] - # - print "\n"; - print "#\n# Call TestDriver runremote for $_[0]\n#\n"; - print "\n"; - SmokeTest::PrintDateTime(); - - my $tempZipLocation = "$SmokeTest::SmokeTestDir\\$_[0]\\$_[1]"; - if ($_[3] eq "NAND\\") - { - $tempZipLocation .= "\\NAND"; - } - elsif ($_[3] eq "NAND\(DP\)\\") - { - $tempZipLocation .= "\\NAND\(DP\)"; - } - - SmokeTest::ExecCommand ("COPY /Y $tempZipLocation\\sys\$rom.zip $SmokeTest::SmokeTestDir\\sys\$rom.zip"); - - # Decide whether this is a platsec ROM or not - my $platsec; - if ($SmokeTest::buildNo eq "9.1" || $SmokeTest::buildNo eq "9.2" || $SmokeTest::buildNo eq "9.3" || $SmokeTest::buildNo eq "Future" || $SmokeTest::buildNo eq "9.4" || $SmokeTest::buildNo eq "9.5" || $SmokeTest::buildNo eq "9.6" || $SmokeTest::buildNo eq "tb92" || $SmokeTest::buildNo eq "tb101sf") - { - $platsec = "ON"; - } - else - { - $platsec = "OFF"; - } - - # calling testdriver for $_[0] - my $runremote = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd runremote -m async -i $SmokeTest::SmokeTestDir --tp $_[0].tpkg -r sys\$rom.zip --srv //$masterserver/$SmokeTest::servicename --platsec $platsec --testexec ON"); - - # - # Parse output to get the job number or error - # - print "\n"; - print "#\n# Parse output to get the job number or error\n#\n"; - print "\n"; - - my $jobid; - - if ($runremote =~ m/job id/i) - { - $runremote =~ m/job id: (\d+)/i; - $jobid = $1; - print "\n*** Job submitted successfully ***\n\nJob Id = $jobid\n"; - } - else - { - print "\nREMARK: Smoke Test Job Submission failed\n"; - #&SmokeTest::DieLog("Error In Smoke Test: Submitting the Job failed"); - return; - } - - # - # Create a text file with publish details - # - print "\n"; - print "#\n# Create a text file with publish details\n#\n"; - print "\n"; - - my $publishstring; - - $publishstring = "Publish: $SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\Smoketest\\$_[0]\\$_[1]\\"; - print "$publishstring"; - - if ( (defined $SmokeTest::PublishServer) && (defined $SmokeTest::ProductType) && (defined $SmokeTest::BuildNum) ) - { - open PublishFile, ">$_[0]$_[1].txt" or &SmokeTest::DieLog("Cannot open File $_[0]$_[1].txt: $!\n"); - $publishstring = "$SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\Smoketest\\$_[0]\\$_[1]\\"; - if ($_[3] eq "NAND\\") - { - $publishstring .= "NAND\\"; - } - elsif ($_[3] eq "NAND\(DP\)\\") - { - $publishstring .= "NAND\(DP\)\\"; - } - print PublishFile "$publishstring"; - $publishstring = "\n$SmokeTest::PublishServer\\$SmokeTest::ProductType\\logs\\$SmokeTest::BuildNum\\Smoketest\\$_[0]\\$_[1]\\"; - if ($_[3] eq "NAND\\") - { - $publishstring .= "NAND\\"; - } - elsif ($_[3] eq "NAND\(DP\)\\") - { - $publishstring .= "NAND\(DP\)\\"; - } - print PublishFile "$publishstring"; - close PublishFile; - print "\n*** Publish file created successfully ***\n"; - } - else - { - print "\nREMARK: Smoke Test *** Could not Create Publish File\n$!"; - #&SmokeTest::DieLog("Error In Smoke Test: Could not Create Publish File"); - } - - # - # Copy This publish file to the correct directory - # - print "\n"; - print "#\n# Copy This publish file to the correct directory \n#\n"; - print "\n"; - - ###print "\nabout to move /Y $_[0]$_[1].txt \\\\$masterserver\\Jobs\\$jobid\\publish.txt\n"; - SmokeTest::ExecCommand ("MOVE /Y $_[0]$_[1].txt \\\\$masterserver\\Jobs\\$jobid\\publish.txt"); - - SmokeTest::PrintDateTime(); -} - -1; \ No newline at end of file