--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTestSuite.pm Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,501 @@
+# 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_<snapshot>_SymbianOS_vYY.xml/html to <snapshot>_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