bldsystemtools/commonbldutils/GenResult/GenAutoSmokeTestResult.pm
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /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>&nbsp</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>&nbsp;</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>&nbsp;</td></tr>";
+
+return $iRow	
+}
+
+
+1;
\ No newline at end of file