--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bldsystemtools/commonbldutils/GenResult/GenAutoSmokeTestResult.pm Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,393 @@
+# Copyright (c) 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:
+# Script summarise and hotlink autosmoketest logs by reading
+# testdriver generated files
+#
+#
+
+#!/usr/bin/perl -w
+package GenAutoSmokeTestResult;
+use FindBin;
+use FileRead;
+require GenResult;
+use strict;
+#use XML::Parser;
+
+# global vars
+my $iSTPublishDir;
+my $iSTLinkPath;
+my $iHTMLFileName = "testlog.html";
+my $iTraceFileName = "trace.txt";
+my $iDevkitFileName = "Devkit\.log";
+
+my ($iCfgFileLocation) = $FindBin::Bin;
+#Read in the products from a cfg file
+my $text = &FileRead::file_read ("$iCfgFileLocation\\Product_AutoSmokeTest.cfg");
+#Search for an entry matching (At the beginning of line there should be 1 or more alphanumberic chars
+#Followed by a "." 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 ;
+
+#Read in the auto smoketest list from a cfg file
+my $Smoketext = &FileRead::file_read ("$iCfgFileLocation\\AutoSmoketests.cfg");
+my %iTests = $Smoketext =~ /^\s*(\w+\s*\w*\s*)=\s*(.+)$/mg ;
+
+my $iNumberOfTests = scalar(my @iTempArray = values %iTests);
+my $iCountCols = 3 + $iNumberOfTests;
+
+# container for smoketest result
+my $gSmokeTestResultsRef;
+
+##########################################################################
+#
+# Name : generateSTHTMLSummary()
+# Synopsis: Creates a Smoketest HTML report for the specified build.
+# Inputs : Array containing Logs directory location, Product built and
+# path to link results
+# Outputs : HTML code that will be part of the HTML report generated
+# by GenResult.pm
+#
+# Note: Test Column Results can be interpreted as follows:
+#
+# OK: All test steps passed
+# Unexecuted: Test unexecuted or log file not found.
+# Passed=x, Failed=y: Results of test steps in the case of at least one failure
+#
+# General Column Results can be interpreted as follows
+#
+# OK: All smoke tests passing
+# Unexecuted: At least one smoke test was unexecuted
+# FAILURES: At least one failure in the smoke tests
+# CRITICAL FAILURES: TestApps smoketest (which tests basic epoc functionality) has failed.
+#
+##########################################################################
+sub generateSTHTMLSummary
+{
+ my ($iDir, $iSnapshot, $iProduct, $iLinkPath) = @_;
+
+ $iLinkPath =~ s/[^\\]$/$&\\/; #add trailing backslash, if missing
+ $iSTLinkPath = $iLinkPath;
+
+ my $html_out = "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align=\"top\">";
+ $html_out .= "<tr bgcolor=\"#006699\" align=\"top\"><th colspan="
+ . $iCountCols .
+ " rowspan=2><font color=\"#ffffff\">AUTO Smoke Test Results</font></th></tr>"
+ ."<tr></tr><tr bgcolor=\"#006699\" align=\"top\">";
+
+ $iDir =~ s/[^\\]$/$&\\/; #add trailing backslash, if missing
+ $iSTPublishDir = $iDir;
+
+
+ if (-e $iSTPublishDir)
+ {
+
+ print "\nGenerating Auto Smoke Test Report.";
+
+ my @iProductList = ($iProducts{$iProduct} =~ m/\S+/ig);
+ if (@iProductList < 1)
+ {
+ # this product is not supported?
+ $html_out .= "<td><center><b><font color=#ffffff>Smoke Test not supported for $iProduct</font></b></center></td></tr></table>";
+ return $html_out;
+ }
+ else
+ {
+ # Header of the table
+ $html_out .= "<th><font color=\"#ffffff\">Platform</font></th>
+ <th><font color=\"#ffffff\">SUMMARY</font></th>";
+ foreach my $iTestName (sort { $iTests{$a} <=> $iTests{$b} } keys %iTests)
+ {
+ $html_out .= "<th><font color=\"#ffffff\">$iTestName</font></th>"
+ }
+ $html_out .= "<th><font color=\"#ffffff\">Defects</font></th></tr>";
+
+ #iFlag = 0 for html mode, 1 for brag status mode
+ my $iFlag = 0; #The second value is a dummy value. It is only used when deriving Brag status.
+
+ $html_out .= printSTResultRow($iFlag,$iFlag, @iProductList);
+ # $html_out .= printDEVKITRow(@iProductList)
+ $html_out .= "</table>";
+ return $html_out;
+ }
+ }
+ else
+ {
+ print "REMARK: Auto Smoke Test Report not created: $! \n";
+ return;
+ }
+}
+############################################################
+# Name: printSTResultRow
+# Description: This function prints out the table rows for the auto smoketest build report
+# file that is published in the ESR database. It is also used in determining
+# the brag status and is called from Bragstatus.pm. If the iFlag value is set to
+# 0 then it will process the html results. Otherwise it returns a brag status of 0-green,1-Amber(Some tests failed)
+# 2-Red(All platforms failed); -1-TBA (smoke test results are not present for some reason).
+#
+############################################################
+sub printSTResultRow
+{
+ my ($iFlag, $iLogPublishLocation, @iProductList) = @_;
+ my $iFileName = "Test Summary Report\.htm";
+
+ #Counts the number of platforms that have failed to be smoketested.
+ my $iplatform_counter = 0;
+
+ #Test and DEBUG COUNTER
+ my $iBragStatus = 0; #0=Green,1=Amber,2=Red, -1=TBA
+ my $iFullRowSet;
+ my $iHTMLfileName = $iFileName;
+
+ # Process the results for each platform eg winscw, armv5 h4
+ foreach my $iPlatform (@iProductList)
+ {
+ my @iPlatformSubDirs = split /_/, $iPlatform;
+ my $iTempPath;
+
+ # Get the full path name to the results file for this platform.
+ foreach my $iTempDir (@iPlatformSubDirs)
+ {
+ $iTempPath .= "$iTempDir\\";
+ }
+
+ if($iFlag == 1)
+ {
+ $iSTPublishDir = $iLogPublishLocation;
+ }
+
+ # Process the results if the results log exists
+ if (-e $iSTPublishDir.$iTempPath.$iFileName) {
+
+
+ # Read in the results log
+ my $resultsFile = "$iSTPublishDir"."$iTempPath"."$iFileName";
+ open(RESULTSFILE, "<$resultsFile");
+ local $/ = undef; # undefine the input record separator to read in as one line.
+ my $results = <RESULTSFILE>;
+ close(RESULTSFILE);
+
+ # Parse to make reading the file simpler
+ $results =~ s/\<TD\>//ig;
+ $results =~ s/\<\/TD\>//ig;
+ $results =~ s/\<td BGCOLOR \= .*?\>//ig;
+
+ my $iTestResults = "";
+ my $unexecutedStatus = 0;
+ my $failureStatus = 0;
+ my $criticalFailureStatus = 0;
+
+
+ # Add one table cell within the row for each smoke test
+ foreach my $iTestName (sort { $iTests{$a} <=> $iTests{$b} } keys %iTests)
+ {
+ my $testScript = "$iTests{$iTestName}";
+ my $passed = 0;
+ my $failed = 0;
+ my $testInLogFile = 0;
+
+ # Extract the script execution line for this test from the results.
+ if ( $results =~ /($testScript)\.script(?:\d)?(?:\.htm)?\s*(?:UDEB|UREL)\s*(\d*)\s*passed,\s*(\d*)\s*failed/i)
+ {
+ $testInLogFile = $1;
+ $passed = $2;
+ $failed = $3;
+ }
+
+ # Find result of test execution
+ if (!($testInLogFile))
+ {
+ $unexecutedStatus = 1;
+ $iTestResults .= "<td><font color=orange>";
+ $iTestResults .= "Unexecuted"."</font></td>";
+ $iBragStatus = -1;# At least one test is unexecuted
+ }
+ else
+ {
+ if (($failed==0) && ($passed > 0))
+ {
+ $iTestResults .= "<td><font color=green>";
+ $iTestResults .= "OK"."</font></td>";
+ }
+ else
+ {
+ if ($failed > 0)
+ {
+ # Differentiate between the basic TestApps test (which just fires up
+ # the emulator and runs exes) and application tests (e.g. messaging).
+ if ($testScript eq "smoketest_testapps")
+ {
+ $criticalFailureStatus = 1;
+ $iTestResults .= "<td><font color=red>";
+ $iBragStatus = 2;# Critical failures
+ }
+ else
+ {
+ $failureStatus = 1;
+ $iTestResults .= "<td><font color=orange>";
+ $iBragStatus = 1; # At least one test has failed
+ }
+ $iTestResults .= "Passed="."$passed"." Failed="."$failed"."</font></td>";
+ }
+
+ }
+ }
+ } # foreach my $iTestName
+
+ # Leave blank cell for defects
+ $iTestResults .= "<td> </td>";
+
+
+ # Print out platform e.g. winscw (emulator) to start a new row in the results table
+ my $iRow = "<tr><td><a class =\"hoverlink\" href=\"" .&GenResult::setBrowserFriendlyLinks($iSTLinkPath.$iTempPath.$iHTMLfileName) ."\">"
+ .@iPlatformSubDirs[1]." ( ".@iPlatformSubDirs[0];
+ if (defined @iPlatformSubDirs[2])
+ {
+ $iRow .= " @iPlatformSubDirs[2] ";
+ }
+ $iRow .= " ) </a></td><td>";
+
+
+ # Print the overall summary cell
+ if ("$criticalFailureStatus")
+ {
+ $iRow .= "<font color=red>";
+ $iRow .= "CRITICAL FAILURES";
+ }
+ else
+ {
+ if ("$failureStatus")
+ {
+ $iRow .= "<font color=orange>";
+ $iRow .= "FAILURES";
+ }
+ else
+ {
+ if ("$unexecutedStatus")
+ {
+ $iRow .= "<font color=orange>";
+ $iRow .= "Unexecuted";
+ }
+ else
+ {
+ $iRow .= "<font color=green>";
+ $iRow .= "OK";
+ }
+ }
+ }
+
+
+ # Put the whole row together
+ $iRow .= "$iTestResults";
+ $iRow .= "</td>"; # end the last cell TD??
+ $iFullRowSet .= $iRow;
+
+ } # if (-e $iSTPublishDir.$iTempPath.$iFileName)
+
+
+
+ else # results file doesn't exist.
+ {
+
+ # smoke test directory for that platform has not been produced
+ # - this is usually a sign that ROMs have not been made,
+ # or that the smoke tests haven't been run.
+
+ my $iRow = "<tr><td>"
+ .@iPlatformSubDirs[1]." ( ".@iPlatformSubDirs[0];
+ if (defined @iPlatformSubDirs[2])
+ {
+ $iRow .= " @iPlatformSubDirs[2] ";
+ }
+ $iRow .= " ) </td><td>Smoke Test Not Run</td>";
+ foreach my $iTestName (sort { $iTests{$a} <=> $iTests{$b} } keys %iTests)
+ {
+ $iRow .= "<td><s>OK</s></td>";
+ }
+ $iRow .= "<td> </td></tr>";
+ $iFullRowSet .= $iRow;
+
+ if($iFlag == 1) # BRAG status mode
+ {
+ $iplatform_counter++; #Platform Failed to be smoketested
+ $iBragStatus = 1; # Amber
+ }
+ } # if ( -e $iSTPublishDir.$iTempPath)
+ }# end foreach my $iPlatform (@iProductList)
+
+ # Return result depending on what the calling mode was
+ if($iFlag == 1)#bragstatus mode
+ {
+ if($iplatform_counter > 0)
+ {
+ $iBragStatus = -1; # not all platforms have been smoketested.
+ }
+ return $iBragStatus;
+ }
+ else #Smoketest HTML mode
+ {
+ return $iFullRowSet;
+ }
+} # end sub
+sub printDEVKITRow
+{
+#access log file - Devkit.log on Devbuilds/Buildnumber/logs
+#open Devkit log file
+#if there are no ERROR: lines then print OK in General Column
+#else print Failed in General column
+#for all tests print N/A'
+
+#my $iDevkitLogFileLocation = $iSTPublishDir.$iDevkitFileName;
+
+ open (DevkitLOGFILE, $iSTPublishDir.$iDevkitFileName);
+ my @iDevkitLog = <DevkitLOGFILE>;
+ my $iRow = "<tr><td>";
+
+ $iRow .= "DEVKIT</td>";
+ my $iErrorCount = 0;
+ my $iLineOK = 0;
+ foreach (@iDevkitLog) {
+ if (m/ERROR:/)
+ {
+ $iErrorCount++;
+ }
+ else
+ {
+ $iLineOK++;
+ }
+ }
+ if ($iErrorCount > 0)
+ {
+ $iRow .= "<td>Failed</td>";
+ }
+ else
+ {
+ $iRow .= "<td>OK</td>";
+ }
+
+
+
+
+foreach my $iTestName (sort { $iTests{$a} <=> $iTests{$b} } keys %iTests)
+ {
+ $iRow .= "<td>N/A</td>";
+ }
+
+ $iRow .= "<td> </td></tr>";
+
+return $iRow
+}
+
+
+1;
\ No newline at end of file