mmtestenv/mmtesttools/Scripts/TestResultsComparisonTool/ResultsComparison.pl
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
# All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
# This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
# under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
# which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
# Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
# Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
# Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
use strict;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
use LWP::Simple;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
use TestScriptResults;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
use Getopt::Std;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
use File::Find;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
# Mistral tags the result files from test scripts in a particular format, depending on the test harness used to execute them. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
# We use these names to identify which files are results files.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
my $KMistralCoreConfFileName = "-coreconf-";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
my $KMistralTEFFileName = "-testexecute-";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
my $KMistralTestFrameworkFileName = "-testframework"; # No trailing hyphen due to different security variants
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#  It appears that Mistral uses a completely different file format for results from HW runs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
my $KMistrealTEFFileNameHW = "testexecute";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
my $KMistrealTFFileNameHW1 = "testframework";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
my $KMistrealTFFileNameHW2 = "testframeworkmmddcap";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
my $KMistrealTFFileNameHW3 = "testframeworkuecap";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
my $KMistrealTFFileNameHW4 = "testframeworknone";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
# Work in progress script outputs.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
my $iKnownFails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
my $iUnknownFailsButKnownInRef;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
my $iUnknownFailsButKnownInOtherCodelines;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
my $iUnknownFails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
my $iMissingTests; 	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
my $iVerbose;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
###############################################
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
##	Source test domain specific functionality
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
###############################################
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
# Scans the test results summary page from the Mistral build and compiles a collection of the 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
# URL paths for the log files.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
# param1 - the URL to the Test Results HTML Summary page of the Mistral build
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
# returns - the array of logs' URLS
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
sub GetResultFilesFromMistral
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	my $aMistralTestResultsSummaryUrl = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	my @fileNames;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	my $nextFileNamesIndex = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	my $summaryContents = get "$aMistralTestResultsSummaryUrl"; # Returns undef if failure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	unless ($summaryContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
		print "\nERROR: Unable to retrieve source summary file from $aMistralTestResultsSummaryUrl\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
		exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	#Could add an optimisation to this to search for the <td class="error"> tag BUT doesn't take into account the crashed tests and would need to check here the pass/fail count
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	#In addition this might lead to migration problems with Sirroco and certainly isn't appliable to developer's personal builds where we must scan each file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	#So it's simpler to do the brute force approach and keep all implementations alike, it doesn't take long anyway
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	while ($summaryContents =~ s/href="(.*?($KMistralCoreConfFileName|$KMistralTEFFileName|$KMistralTestFrameworkFileName).*?\.html?)"//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
		$fileNames[$nextFileNamesIndex] = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
		$nextFileNamesIndex++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	# Scan this second so we don't accidentally cut off the filenames if they are matched against Winscw runs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	while ($summaryContents =~ s/href="(.*?($KMistrealTEFFileNameHW|$KMistrealTFFileNameHW1|$KMistrealTFFileNameHW2|$KMistrealTFFileNameHW3|$KMistrealTFFileNameHW4).*?\.html?)"//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
		$fileNames[$nextFileNamesIndex] = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
		$nextFileNamesIndex++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
	unless ($fileNames[0])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
		print "\nERROR: No test result log files found, please ensure the -s parameter points to Mistral's TestResults.html summary page\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
		exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
	return @fileNames;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
# Parse the Mistral test results summary page and generate an array of TestScriptResults
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
# objects which contain all the required information such as script names, test counts
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
# and failures.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
# param1 - the URL of the Test Results HTML Summary page for the Mistral build 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
# returns - the array of parsed log data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
sub PopulateResultsArrayFromMistral
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
	my $aTestResultsSummaryPageUrl = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
	my @aResultsArray = ();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	my $nextFreeIndexInResultsArray = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	my @fileNames = GetResultFilesFromMistral($aTestResultsSummaryPageUrl);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	foreach my $fileName (@fileNames)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
		my $testFileContents = get "$fileName";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
		unless ($testFileContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
			print "\nERROR: Unable to open logfile $fileName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
			next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
		my $scriptResults = TestScriptResults->TestScriptResults();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
		$scriptResults->SetFilePath($fileName);		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
		if (($fileName =~ m/.*?$KMistralTEFFileName(.*?)\.html?/i) || ($fileName =~ m/.*?$KMistrealTEFFileNameHW(.*?)\.html?/i))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
			$scriptResults->SetScriptName($1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
			if (!($testFileContents =~ m/TEST CASE SUMMARY:/i) && ($testFileContents =~ m/SUMMARY:/i))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
				# One of the old MM TEF tests which didn't use testcases
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
				$scriptResults->TEFNoTestcasesTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
				$aResultsArray[$nextFreeIndexInResultsArray] = ScanTEFLogFileForFailures($scriptResults, \$testFileContents, 0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
				$scriptResults->TEFTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
				$aResultsArray[$nextFreeIndexInResultsArray] = ScanTEFLogFileForFailures($scriptResults, \$testFileContents, 1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
				}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
		elsif ($fileName =~ m/.*?$KMistralCoreConfFileName(.*?)\.txt\.html?/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
			$scriptResults->SetScriptName($1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
			$scriptResults->CoreConfTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
			$aResultsArray[$nextFreeIndexInResultsArray] = ScanCoreConfLogFileForFailures($scriptResults, \$testFileContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
		elsif (($fileName =~ m/.*?$KMistralTestFrameworkFileName[^\-]*?\-(.*?)\.html?/i) || ($fileName =~ m/.*?$KMistrealTFFileNameHW2(.*?)\.html?/i) || ($fileName =~ m/.*?$KMistrealTFFileNameHW3(.*?)\.html?/i) || ($fileName =~ m/.*?$KMistrealTFFileNameHW4(.*?)\.html?/i) || ($fileName =~ m/.*?$KMistrealTFFileNameHW1(.*?)\.html?/i))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
			$scriptResults->SetScriptName($1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
			$scriptResults->TestFrameworkTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
			$aResultsArray[$nextFreeIndexInResultsArray] = ScanTestFrameworkLogFileForFailures($scriptResults, \$testFileContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
			print "\nWARNING: Results file has unrecognised format - $fileName.\n";			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
		$nextFreeIndexInResultsArray++;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	return \@aResultsArray;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
# Walk the file path provided by the developer for his local machine, parse test logs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
#  and generate an array of TestScriptResults objects which contain all the required 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
# information such as script names, test counts and failures.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
# param1 - the pathname of a folder containing the test results
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
# returns - the array of parsed log data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
sub PopulateResultsArrayFromLocalMachine
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	my $aTestResultsPath = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	my @aResultsArray = ();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	my $nextFreeIndexInResultsArray = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	my @directories = ("$aTestResultsPath");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	my @fileNames;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
	find( sub { push @fileNames, $File::Find::name if /\.html?$/ }, @directories );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	foreach my $fileName (@fileNames)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
		my $testFileContents = do { local $/; open(I,"$fileName"); <I> };
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
		my $scriptResults = TestScriptResults->TestScriptResults();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
		$scriptResults->SetFilePath($fileName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
		$fileName =~ m/([^\\\/\.]*)\.[^\\\/]*\Z/;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
		$scriptResults->SetScriptName($1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
		if ($testFileContents =~ m/Core Loader Conformance Suite/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
			$scriptResults->CoreConfTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
			$aResultsArray[$nextFreeIndexInResultsArray] = ScanCoreConfLogFileForFailures($scriptResults, \$testFileContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
		elsif ($testFileContents =~ m/TestFrameworkMain.cpp/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
			$scriptResults->TestFrameworkTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
			$aResultsArray[$nextFreeIndexInResultsArray] = ScanTestFrameworkLogFileForFailures($scriptResults, \$testFileContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
		elsif ($testFileContents =~ m/TEF Version/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
			if ($testFileContents =~ m/TEST CASE SUMMARY:/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
				$scriptResults->TEFTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
				$aResultsArray[$nextFreeIndexInResultsArray] = ScanTEFLogFileForFailures($scriptResults, \$testFileContents, 1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
				# One of the old MM TEF tests which didn't use testcases
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
				$scriptResults->TEFNoTestcasesTest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
				$aResultsArray[$nextFreeIndexInResultsArray] = ScanTEFLogFileForFailures($scriptResults, \$testFileContents, 0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
			print "\nWARNING: Results file has unrecognised format - $fileName.\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
					
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
		$nextFreeIndexInResultsArray++;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	return \@aResultsArray;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
###############################################
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
##	Test harness specific functionality
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
###############################################	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
# Parses a TF log file for failures, inconclusives and crashes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
# param1 - the TestScriptResults object to populate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
# param2 - reference to the contents of the log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
# returns - the TestScriptResults object containing the parsed data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
sub ScanTestFrameworkLogFileForFailures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
	my ($aScriptResults, $aLogFileContents) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	my $testFileContents = $$aLogFileContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
	my $numberOfTests = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
	# Search for test case results, which take the following form:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
	#04/09/2002 15:51:39:772    V   Log.cpp 736 Test Result for TSI_ICL_BTRANS_01:MM_ICL_BTRANS_I_0202_CP is PASS
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
	while ($testFileContents =~ s/Test[\s]+Result[\s]+for[\s]+[\S]+:([\_|\-|\S]+)[\s]+is[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
		my $testId  = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
	    my $result = $2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
	    $numberOfTests++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
		if ($result =~ /PASS/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
			# Do nothing
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
		elsif ($result =~ /INCONCLUSIVE/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
			$aScriptResults->AddInconclusiveResult($testId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
			# Treat all other results as failure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
			$aScriptResults->AddFailureResult($testId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
	$aScriptResults->SetTotalTestCount($numberOfTests);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
	unless ($testFileContents =~ m/Test Results Summary/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
		# Test file summary not in the log file - the test has crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
		$aScriptResults->TestCrashed();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
	return $aScriptResults;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
# Parses a TEF log file for failures, inconclusives and crashes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
# param1 - the TestScriptResults object to populate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
# param2 - reference to the contents of the log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
# param3 - boolean whether the test is using testcases (older MM tests didn't, in which case we use the test steps)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
# returns - the TestScriptResults object containing the parsed data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
sub ScanTEFLogFileForFailures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
	my ($aScriptResults, $aLogFileContents, $aTestcasesInUse) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
	my $testFileContents = $$aLogFileContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	my $numberOfTests = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	# Search for test case results, which take the following form:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
	# 02:56:42:145 c:\mm\tsu_3gp_compose_api_te.script Line = 58 Command = END_TESTCASE MM-3GP-COMP-U-0003-CP ***TestCaseResult = PASS 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
	# Or if testcases not in use in this script file test step results, which take the following form:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
	# 14:20:51:459 c:\mm\tsu_mmf_aclnt_securedrmtestdata.script Line = 36 Command = RUN_TEST_STEP 1000 RTAUtils ImportDrmArchive c:\mm\tsu_mmf_aclnt_securedrmtestdata.ini ImportSmallWavDrmArchiveAudio ***Result = UNEXECUTED 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
	while (($testFileContents =~ s/Command[\s]+=[\s]+END\_TESTCASE[\s]+([\_|\-|\S]+)[\s]+\*\*\*TestCaseResult[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
			|| (!$aTestcasesInUse && ($testFileContents =~ s/Command[\s]+=[\s]+RUN\_TEST\_STEP[\s]+\d*[\s]+.*?[\s]+([\_|\-|\S]+)[\s]+.*?\*\*\*Result[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
		my $testId  = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
	    my $result = $2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
	    $numberOfTests++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
		if ($result =~ /PASS/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
			# Do nothing
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
		elsif ($result =~ /INCONCLUSIVE/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
			$aScriptResults->AddInconclusiveResult($testId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
			# Treat all other results as failure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
			$aScriptResults->AddFailureResult($testId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
	$aScriptResults->SetTotalTestCount($numberOfTests);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
	# Testcase scripts use TEST CASE SUMMARY, non-testcase scripts just use SUMMARY
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
	unless ($testFileContents =~ m/SUMMARY:/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
		# Test file summary not in the log file - the test has crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
		$aScriptResults->TestCrashed();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
	return $aScriptResults;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
# Parses a CoreConf log file for failures, inconclusives and crashes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
# param1 - the TestScriptResults object to populate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
# param2 - reference to the contents of the log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
# returns - the TestScriptResults object containing the parsed data	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
sub ScanCoreConfLogFileForFailures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
	my ($aScriptResults, $aLogFileContents) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
	my $testFileContents = $$aLogFileContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
	if ($testFileContents =~ s/\*\*\*\s*?Summary of tests executed(.*\n)*//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
		my $numberOfTests = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
		# Parse the summary listings
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
		while($testFileContents =~ s/\*\*\*\s*?Passed tests:((.*\n)*?)\*\*\*\s*?Failed tests:.*\n((\*\*\*.*\n)*)//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
			my $passingTests = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
			my $failingTests = $3;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
			# Passing tests
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
			while ($passingTests =~ s/\*\*\*[\s]*?\S+[\s]*\n//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
				$numberOfTests++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
			# Failing tests
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
			while ($failingTests =~ s/\*\*\*[\s]*?(\S+)[\s]*\n//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
				$aScriptResults->AddFailureResult($1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
				$numberOfTests++;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
		$aScriptResults->SetTotalTestCount($numberOfTests);		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
		# Test file summary not in the log file - the test has crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
		$aScriptResults->TestCrashed();		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
	return $aScriptResults;		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
# Gets the test case count from a Test Execute Framework log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
# param1 - a reference to the contents of the TEF log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
#returns - The number of test cases in the script or -1 if the summary could not be found
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
sub GetTEFTestCount
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
	if ($refContents =~ m/TEST CASE SUMMARY:(.*\n)*?.*?PASS =\s*(\d*)(.*\n)*?.*?FAIL =\s*(\d*)(.*\n)*?.*?INCONCLUSIVE =\s*(\d*)/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
		my $result = $2 + $4 + $6;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
		return $result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
	if ($refContents =~ m/SUMMARY:(.*\n)*?.*?PASS =\s*(\d*)(.*\n)*?.*?FAIL =\s*(\d*)(.*\n)*?.*?ABORT =\s*(\d*)(.*\n)*?.*?PANIC =\s*(\d*)(.*\n)*?.*?INCONCLUSIVE =\s*(\d*)(.*\n)*?.*?UNKNOWN =\s*(\d*)(.*\n)*?.*?UNEXECUTED =\s*(\d*)/)	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
		# One of the MM tests that doesn't use testcases
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
		my $result = $2 + $4 + $6 + $8 + $10 + $12 + $14;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
		return $result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
		}									
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	# Summary not found, we crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
	return -1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
# Gets the test count from a Test Framework log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
# param1 - a reference to the contents of the Test Framework log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
#returns - The number of test cases in the script or -1 if the summary could not be found	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
sub GetTestFrameworkTestCount
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
	unless ($refContents =~ m/Test Results Summary(.*\n)*?.*?Total\s*:(\d*)\s*\n/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
		# Summary not found, we crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
		return -1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
	return $2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
# Gets the test count from an OpenMAX IL Core Conformance log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
# param1 - a reference to the contents of the Core Conformance log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
#returns - The number of test cases in the script or -1 if the summary could not be found	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
sub GetCoreConfTestCount
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
	unless ($refContents =~ m/\*\*\*\s*Summary of tests executed(.*\n)*?\*\*\*\s*Total :\s*(\d*)\s*\n/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
		# Summary not found, we crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
		return -1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	return $2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
# Scans a TEF log looking for the test specified and checks if it returned inconclusive
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
# param1 - the test name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
# param2 - reference to the contents of the log file, the test case result is removed from the argument if passed by ref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
# param3 - whether the TEF script uses testcases
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
# returns - 1 if it returned inconclusive, 0 otherwise	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
sub MatchingTEFInconclusiveResult	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	my $aInconclusive = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
	my $aTestcasesInUse = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
	if ($aTestcasesInUse)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
		if ($refContents =~ s/Command[\s]+=[\s]+END\_TESTCASE[\s]+$aInconclusive[\s]+\*\*\*TestCaseResult[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
			if ($1 eq "INCONCLUSIVE")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
				return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
		if ($refContents =~ s/Command[\s]+=[\s]+RUN\_TEST\_STEP[\s]+\d*[\s]+.*?[\s]+$aInconclusive[\s]+.*?\*\*\*Result[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
			if ($1 eq "INCONCLUSIVE")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
				return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
	return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
# Scans a TestFramework log looking for the test specified and checks if it returned inconclusive
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
# param1 - the test name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
# param2 - reference to the contents of the log file, the test case result is removed from the argument if passed by ref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
# returns - 1 if it returned inconclusive, 0 otherwise		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
sub MatchingTFInconclusiveResult 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
	my $aInconclusive = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
	if ($refContents =~ s/Test[\s]+Result[\s]+for[\s]+[\S]+:$aInconclusive[\s]+is[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
		if ($1 eq "INCONCLUSIVE")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
			return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
	return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
# Scans a TEF log looking for the test specified and checks if it returned an error
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
# param1 - the test name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   460
# param2 - reference to the contents of the log file, the test case result is removed from the argument if passed by ref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   461
# param3 - whether the TEF script uses testcases
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   462
# returns - 1 if it returned an error, 0 otherwise		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   463
sub MatchingTEFErrorResult 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   464
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   465
	my $aFail = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   466
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   467
	my $aTestcasesInUse = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   468
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   469
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   470
	if ($aTestcasesInUse)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   471
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   472
		if (not $refContents =~ s/Command[\s]+=[\s]+END\_TESTCASE[\s]+$aFail[\s]+\*\*\*TestCaseResult[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   473
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   474
			return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   475
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   476
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   477
		if (($1 eq "PASS") || ($1 eq "INCONCLUSIVE"))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   478
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   479
			return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   480
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   481
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   482
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   483
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   484
		if (not $refContents =~ s/Command[\s]+=[\s]+RUN\_TEST\_STEP[\s]+\d*[\s]+.*?[\s]+$aFail[\s]+.*?\*\*\*Result[\s]+=[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   485
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   486
			return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   487
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   488
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   489
		if (($1 eq "PASS") || ($1 eq "INCONCLUSIVE"))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   490
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   491
			return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   492
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   493
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   494
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   495
	return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   496
	}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   497
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   498
# Scans a TestFramework log looking for the test specified and checks if it returned an error
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   499
# param1 - the test name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   500
# param2 - reference to the contents of the log file, the test case result is removed from the argument if passed by ref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   501
# returns - 1 if it returned an error, 0 otherwise		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   502
sub MatchingTFErrorResult 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   503
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   504
	my $aFail = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   505
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   506
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   507
	if (not $refContents =~ s/Test[\s]+Result[\s]+for[\s]+[\S]+:$aFail[\s]+is[\s]+([\_|\-|\S]+)[\s]*\<\/font\>//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   508
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   509
		return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   510
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   511
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   512
	if (($1 eq "PASS") || ($1 eq "INCONCLUSIVE"))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   513
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   514
		return 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   515
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   516
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   517
	return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   518
	}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   519
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   520
# N.B. VERY IMPORTANT that the log file is passed by reference.  Core conf scripts can include numerous
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   521
# different tests that use the same test name so to avoid false positives from this function the 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   522
# substitution done in the comparison MUST affect the caller's copy of the log file.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   523
sub MatchingCoreConfErrorResult
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   524
	{	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   525
	my $aFail = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   526
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   527
	my $refContents = $$aReferenceLogContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   528
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   529
	if ($refContents =~ s/\*\*\*[\s]*$aFail[\s]*FAILED//)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   530
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   531
		return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   532
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   533
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   534
	return 0;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   535
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   536
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   537
###############################################		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   538
##	Failure comparison functions
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   539
###############################################		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   540
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   541
# The analysis takes an array of TestScriptResults, each storing the results of a test script's log file.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   542
# It processes this list in stages looking for any scripts with errors and trying to match them against
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   543
# entries in a Known Failure sheet and/or comparison reference build.  Whenever a match is found
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   544
# the error is removed from the TestScriptResults object, these essentially act as an object containing
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   545
# unresolved errors.  When errors are matched their details are added to the corresponding text 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   546
# variables at the top of this file (e.g. iKnownFails).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   547
sub AnalyseFailures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   548
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   549
	my ($aKFSheetLocation, $aReferenceMistralURL, $aIgnoreFailsNotInRef, $aResultsRef, $aKfPlatforms) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   550
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   551
	my @results = @$aResultsRef;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   552
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   553
	my $refContents = undef;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   554
	if ($aReferenceMistralURL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   555
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   556
		$refContents = get "$aReferenceMistralURL"; # Returns undef if failure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   557
		unless ($refContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   558
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   559
			print "\nERROR: Unable to retrieve reference summary file from $aReferenceMistralURL\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   560
			exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   561
			}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   562
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   563
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   564
	my $kfSheetContents = undef;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   565
	if ($aKFSheetLocation)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   566
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   567
		unless ($aKFSheetLocation =~ m/\.xml\Z/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   568
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   569
			print "\nERROR: KF sheet ($aKFSheetLocation) does not appear to be in XML format, you should save the Excel worksheet as XML Spreadsheet 2003 format for input to this script.\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   570
			exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   571
			}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   572
		$kfSheetContents = do { local $/; open(I,"$aKFSheetLocation"); <I> };
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   573
		unless ($kfSheetContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   574
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   575
			print "\nERROR: Unable to open KF sheet at $aKFSheetLocation\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   576
			exit;			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   577
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   578
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   579
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   580
	foreach my $scriptResults (@results)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   581
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   582
		my $scriptName = $scriptResults->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   583
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   584
		my $referenceResults = undef;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   585
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   586
		# If a reference build was provided, find the corresponding log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   587
		if ($refContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   588
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   589
			# We use substitution here because some of the coreconf test scripts
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   590
			# have the same script name.  This ensures we don't keep referencing
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   591
			# against the same copy.  We cannot do the comparison on the script 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   592
			# path because this isn't resilient to adding new tests or cross domain 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   593
			# comparisons.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   594
			# N.B. This assumes the test list ordering remains the same.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   595
			# N.B. The optional .txt is for Core Conf tests
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   596
			$refContents =~ s/href="(.*?$scriptName(\.txt)?(\.script)?\.html?)"//;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   597
			my $file = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   598
			if ($file eq undef)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   599
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   600
				if ($aIgnoreFailsNotInRef)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   601
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   602
					next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   603
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   604
				print "\nWARNING: Unable to find $scriptName in Reference Build\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   605
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   606
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   607
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   608
				$referenceResults = get "$file";	# returns undef on failure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   609
				unless ($referenceResults)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   610
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   611
					print "\nWARNING: Unable to open $scriptName ($file) in Reference Build\n";			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   612
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   613
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   614
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   615
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   616
		my $refTestCrashed;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   617
		# Check the test count hasn't decreased
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   618
		if ($referenceResults)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   619
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   620
			$refTestCrashed = CheckTestCount($scriptResults, \$referenceResults);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   621
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   622
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   623
		if (not $scriptResults->AnyFailures())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   624
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   625
			# No errors so move onto the next
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   626
			next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   627
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   628
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   629
		if ($kfSheetContents)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   630
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   631
			ResolveFailuresAgainstKFSheet($scriptResults, \$kfSheetContents, $aKfPlatforms); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   632
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   633
			if (not $scriptResults->AnyFailures())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   634
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   635
				# All errors resolved against KF sheet so move onto the next
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   636
				next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   637
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   638
			}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   639
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   640
		if ($referenceResults)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   641
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   642
			ResolveFailuresAgainstReferenceRun($scriptResults, $refTestCrashed, \$referenceResults);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   643
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   644
			if (not $scriptResults->AnyFailures())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   645
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   646
				# All errors resolved against reference run so move onto the next
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   647
				next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   648
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   649
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   650
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   651
		# Unknown failures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   652
		$iUnknownFails = $iUnknownFails . "\n$scriptName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   653
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   654
		my $inconText;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   655
		my @inconclusives = $scriptResults->Inconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   656
		foreach my $inconclusive (@inconclusives)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   657
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   658
			$inconText = $inconText . "$inconclusive\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   659
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   660
		my $failText;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   661
		my @failures = $scriptResults->Failures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   662
		foreach my $failure (@failures)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   663
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   664
			$failText = $failText . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   665
			}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   666
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   667
		if ($inconText)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   668
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   669
			$iUnknownFails = $iUnknownFails . "INCONCLUSIVES:\n$inconText";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   670
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   671
		if ($failText)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   672
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   673
			$iUnknownFails = $iUnknownFails . "FAILS:\n$failText";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   674
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   675
		if ($scriptResults->DidItCrash())	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   676
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   677
			$iUnknownFails = $iUnknownFails . "CRASHED\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   678
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   679
		}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   680
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   681
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   682
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   683
# Will compare the test count of the test in question against the equivalent result from a reference build's log
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   684
# to detect if there has been a reduction in the total number of tests run as part of the script, unless that script 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   685
# has crashed.  As a side effect the return value indicates whether the test in question crashed or not (saves
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   686
# having to scan it twice).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   687
# param1 - the log results to compare against the reference build's run
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   688
# param2 - the contents of the reference build's corresponding test log
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   689
# returns = 1 if the reference script crashed and we were unable to compare the counts, 0 otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   690
sub CheckTestCount
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   691
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   692
	my ($aTestResultsObject, $aReferenceLogContents) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   693
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   694
	my $testHarness = $aTestResultsObject->TestHarness();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   695
	my $refTestCount;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   696
	if (($testHarness eq $TestScriptResults::KTEFTest) || ($testHarness eq $TestScriptResults::KTEFNoTestcasesTest))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   697
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   698
		$refTestCount = GetTEFTestCount($aReferenceLogContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   699
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   700
	elsif ($testHarness eq $TestScriptResults::KTestFrameworkTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   701
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   702
		$refTestCount = GetTestFrameworkTestCount($aReferenceLogContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   703
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   704
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   705
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   706
		$refTestCount = GetCoreConfTestCount($aReferenceLogContents);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   707
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   708
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   709
	if ($refTestCount < 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   710
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   711
		# Reference test crashed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   712
		unless ($aTestResultsObject->DidItCrash())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   713
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   714
			my $scriptName = $aTestResultsObject->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   715
			print "\nWARNING: $scriptName crashed in the reference build, unable to compare test counts\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   716
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   717
		return 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   718
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   719
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   720
	my $testCount = $aTestResultsObject->TotalTestCount;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   721
	if ($testCount < $refTestCount)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   722
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   723
		unless ($aTestResultsObject->DidItCrash())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   724
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   725
			my $testName = $aTestResultsObject->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   726
			$iMissingTests = $iMissingTests . "$testName  Previous = $refTestCount, Current = $testCount\n"; 	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   727
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   728
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   729
	return 0;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   730
	}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   731
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   732
# Will scan the Known Failure sheet for any entries indicating if the failures,inconclusives and/or crash
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   733
# witnessed in the script in question are already known. If so these will be appended to the known failures list
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   734
# and removed from the TestScriptResults object in question. If matching entries were found but existed for
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   735
# other codelines then this information is stored but the failures are not removed from the TestScriptResults 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   736
# object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   737
# param1 - TestScriptResults object for the script with failures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   738
# param2 - the contents of the known failure sheet
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   739
# param3 - the array of platform entries in the known failure sheet that are applicable to this run
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   740
sub ResolveFailuresAgainstKFSheet
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   741
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   742
	my ($aScriptWithProblems, $aKfSheetContents, $aKfPlatforms) = @_;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   743
	my $kfSheetContents = $$aKfSheetContents;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   744
	my $scriptName = $aScriptWithProblems->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   745
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   746
	my @kFApplicablePlatforms;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   747
	if ($aKfPlatforms)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   748
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   749
		# Will error if undef
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   750
		@kFApplicablePlatforms = @$aKfPlatforms;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   751
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   752
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   753
	# Modified version of the KF Sheet contents, at the end of this function it will contain the Rows from the KF Sheet with any that correspond to the current test script stripped out.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   754
	# This is a by product of the fact that we inspect each row one at a time looking for any that are relevant, trying to do a global search results in potentially error prone and difficult to maintain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   755
	# regexs.  And in reality underneath Perl shouldn't be doing that much in the way of optimisation versus this approach.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   756
	my $wipKfSheet;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   757
	my $candidatesForOtherPlatforms;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   758
	my $foundSamePlatFails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   759
	my $foundSamePlatInconcs;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   760
	my $foundSamePlatCrash;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   761
	while ($kfSheetContents =~ s/<Row((.|\n)*?>)((.|\n)*?)<\/Row>//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   762
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   763
		my $row = $3;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   764
		# Optimisation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   765
		unless ($row =~ m/$scriptName/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   766
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   767
			$wipKfSheet = $wipKfSheet . "<Row>$row<\/Row>";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   768
			next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   769
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   770
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   771
		# None of the cells prior to the 'Scriptname' named cell are of any interest, now verify this row is actually for 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   772
		# this test script and we didn't pick the hit up off the entries for one of the other fields, e.g. Remarks
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   773
		my $applicable;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   774
		while ($row =~ s/(<Cell(.|\n)*?<\/Cell>)//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   775
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   776
			my $cell = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   777
			if ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Scriptname\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   778
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   779
				# Named field we're looking for
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   780
				if ($cell =~ m/$scriptName/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   781
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   782
					$applicable = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   783
					last;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   784
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   785
				else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   786
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   787
					$wipKfSheet = $wipKfSheet . "<Row>$cell\n$row<\/Row>";	# This entry isn't applicable to us, reinsert it into the KF sheet
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   788
					last;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   789
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   790
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   791
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   792
		unless ($applicable)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   793
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   794
			next;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   795
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   796
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   797
		# We are now dealing with a Row corresponding to the script in question
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   798
		# So pull out the relevant named cells contents
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   799
		my $crash;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   800
		my $fails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   801
		my $inconclusives;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   802
		my $targets;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   803
		while ($row =~ s/(<Cell(.|\n)*?<\/Cell>)//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   804
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   805
			my $cell = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   806
			if ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="CrashedStatus\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   807
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   808
				$crash = $cell;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   809
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   810
			elsif ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Fails\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   811
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   812
				$fails = $cell;			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   813
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   814
			elsif ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Inconclusives\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   815
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   816
				$inconclusives = $cell;			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   817
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   818
			elsif ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Platforms\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   819
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   820
				$targets = $cell;			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   821
				}				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   822
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   823
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   824
		my $platformMatched;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   825
		foreach my $platform (@kFApplicablePlatforms)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   826
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   827
			unless (($targets =~ m/$platform&#10;/i) || ($targets =~ m/$platform<\/Data>/i))	# To ensure for example that All isn't picked up by an All Winscw entry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   828
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   829
				next;	# Platform not found in the entry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   830
				}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   831
			$platformMatched = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   832
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   833
			if (($aScriptWithProblems->DidItCrash()) && ($crash =~ m/Crashed/i))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   834
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   835
				$foundSamePlatCrash = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   836
				$aScriptWithProblems->ResetCrashed();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   837
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   838
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   839
			if ($fails)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   840
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   841
				my @failures = $aScriptWithProblems->Failures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   842
				$aScriptWithProblems->ResetFailures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   843
				foreach my $failure (@failures)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   844
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   845
					if (($fails =~ m/$failure/i) || ($fails =~ m/>ALL<\/Data>/))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   846
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   847
						$foundSamePlatFails = $foundSamePlatFails . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   848
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   849
					else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   850
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   851
						
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   852
						$aScriptWithProblems->AddFailureResult($failure);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   853
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   854
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   855
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   856
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   857
			if ($inconclusives)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   858
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   859
				my @incons = $aScriptWithProblems->Inconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   860
				$aScriptWithProblems->ResetInconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   861
				foreach my $incon (@incons)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   862
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   863
					if (($inconclusives =~ m/$incon/i) || ($inconclusives =~ m/>ALL<\/Data>/))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   864
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   865
						$foundSamePlatInconcs = $foundSamePlatInconcs . "$incon\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   866
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   867
					else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   868
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   869
						$aScriptWithProblems->AddInconclusiveResult($incon);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   870
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   871
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   872
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   873
			}	# End of platform matching loop
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   874
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   875
		unless ($platformMatched)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   876
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   877
			# The row entry did not match any of the applicable platforms.  We need to keep checking for more appropriate rows.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   878
			# However, if after the KF Sheet has been parsed we still have unknown errors, we need to compare against these rows as well
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   879
			# in case the issue has been seen on other platforms.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   880
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   881
			$candidatesForOtherPlatforms = $candidatesForOtherPlatforms . "<Row>$crash$fails$inconclusives<\/Row>";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   882
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   883
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   884
		}	# End of row scanning
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   885
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   886
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   887
	my $foundOtherPlatFails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   888
	my $foundOtherPlatInconcs;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   889
	my $foundOtherPlatCrash;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   890
	if ($aScriptWithProblems->AnyFailures())	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   891
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   892
		# Failures remain, potentially matched against the rows for other platforms
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   893
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   894
		while ($candidatesForOtherPlatforms =~ s/<Row>((.|\n)*?)<\/Row>//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   895
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   896
			my $row = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   897
			my $crash;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   898
			my $fails;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   899
			my $inconclusives;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   900
			while ($row =~ s/(<Cell(.|\n)*?<\/Cell>)//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   901
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   902
				my $cell = $1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   903
				if ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="CrashedStatus\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   904
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   905
					$crash = $cell;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   906
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   907
				elsif ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Fails\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   908
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   909
					$fails = $cell;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   910
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   911
				elsif ($cell =~ m/<NamedCell\s*\n?\s*ss:Name="Inconclusives\d*"\//i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   912
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   913
					$inconclusives = $cell;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   914
					}					
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   915
				}	# End of stripping out content details
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   916
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   917
			if (($aScriptWithProblems->DidItCrash()) && ($crash =~ m/Crashed<\/Data>/i))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   918
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   919
				$foundOtherPlatCrash = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   920
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   921
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   922
			if ($fails)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   923
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   924
				my @failures = $aScriptWithProblems->Failures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   925
				foreach my $failure (@failures)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   926
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   927
					if (($fails =~ m/$failure/i) || ($fails =~ m/>ALL<\/Data>/))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   928
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   929
						$foundOtherPlatFails = $foundOtherPlatFails . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   930
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   931
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   932
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   933
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   934
			if ($inconclusives)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   935
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   936
				my @incons = $aScriptWithProblems->Inconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   937
				foreach my $incon (@incons)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   938
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   939
					if (($inconclusives =~ m/$incon/i) || ($inconclusives =~ m/>ALL<\/Data>/))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   940
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   941
						$foundOtherPlatInconcs = $foundOtherPlatInconcs . "$incon\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   942
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   943
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   944
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   945
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   946
			}	# End of cross-platform candidate matchine
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   947
		}	# End of dealing with potential cross-platform matches
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   948
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   949
	# Output known failures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   950
	if ($foundSamePlatFails || $foundSamePlatInconcs || $foundSamePlatCrash)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   951
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   952
		$iKnownFails = $iKnownFails . "\n$scriptName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   953
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   954
	if ($foundSamePlatInconcs)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   955
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   956
		$iKnownFails = $iKnownFails . "INCONCLUSIVES:\n$foundSamePlatInconcs";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   957
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   958
	if ($foundSamePlatFails)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   959
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   960
		$iKnownFails = $iKnownFails . "FAILS:\n$foundSamePlatFails";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   961
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   962
	if ($foundSamePlatCrash)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   963
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   964
		$iKnownFails = $iKnownFails . "CRASHED\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   965
		}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   966
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   967
	# Output matches found only in other test platforms
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   968
	if ($foundOtherPlatFails || $foundOtherPlatInconcs || $foundOtherPlatCrash)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   969
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   970
		$iUnknownFailsButKnownInOtherCodelines = $iUnknownFailsButKnownInOtherCodelines .  "\n$scriptName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   971
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   972
	if ($foundOtherPlatInconcs)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   973
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   974
		$iUnknownFailsButKnownInOtherCodelines = $iUnknownFailsButKnownInOtherCodelines . "INCONCLUSIVES:\n$foundOtherPlatInconcs";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   975
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   976
	if ($foundOtherPlatFails)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   977
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   978
		$iUnknownFailsButKnownInOtherCodelines = $iUnknownFailsButKnownInOtherCodelines . "FAILS:\n$foundOtherPlatFails";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   979
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   980
	if ($foundOtherPlatCrash)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   981
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   982
		$iUnknownFailsButKnownInOtherCodelines = $iUnknownFailsButKnownInOtherCodelines . "CRASHED\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   983
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   984
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   985
	$aKfSheetContents = $wipKfSheet;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   986
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   987
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   988
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   989
# Takes the corresponding log file from the reference build and test for a failing script and
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   990
# compare it to see if the failures match.  If so this information is stored and the matching
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   991
# failures removed from the TestScriptResults object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   992
# param1 - TestScriptResults object for the script with failures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   993
# param2 - boolean whether the test crashed in the reference build and test
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   994
# param3 - the contents of the corresponding log file from the reference build
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   995
sub ResolveFailuresAgainstReferenceRun
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   996
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   997
	my $aReferenceTestResults = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   998
	my $aRefTestCrashed = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   999
	my $aReferenceLogContents = shift;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1000
	my $refContents = $$aReferenceLogContents;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1001
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1002
	my $scriptName = $aReferenceTestResults->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1003
	my $testHarness = $aReferenceTestResults->TestHarness();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1004
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1005
	my $inconText;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1006
	my @inconclusives = $aReferenceTestResults->Inconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1007
	$aReferenceTestResults->ResetInconclusives();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1008
	foreach my $inconclusive (@inconclusives)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1009
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1010
		if (($testHarness eq $TestScriptResults::KTEFTest) || ($testHarness eq $TestScriptResults::KTEFNoTestcasesTest))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1011
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1012
			my $testcasesInUse = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1013
			if ($testHarness eq $TestScriptResults::KTEFTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1014
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1015
				$testcasesInUse = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1016
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1017
			if (MatchingTEFInconclusiveResult($inconclusive, \$refContents, $testcasesInUse))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1018
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1019
				$inconText = $inconText . "$inconclusive\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1020
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1021
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1022
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1023
				$aReferenceTestResults->AddInconclusiveResult($inconclusive);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1024
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1025
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1026
		elsif ($testHarness eq $TestScriptResults::KTestFrameworkTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1027
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1028
			if (MatchingTFInconclusiveResult($inconclusive, \$refContents))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1029
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1030
				$inconText = $inconText . "$inconclusive\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1031
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1032
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1033
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1034
				$aReferenceTestResults->AddInconclusiveResult($inconclusive);			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1035
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1036
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1037
		# Core Conf tests have no comprehension of inconclusive
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1038
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1039
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1040
	my $failText;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1041
	my @failures = $aReferenceTestResults->Failures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1042
	$aReferenceTestResults->ResetFailures();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1043
	foreach my $failure (@failures)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1044
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1045
		if (($testHarness eq $TestScriptResults::KTEFTest) || ($testHarness eq $TestScriptResults::KTEFNoTestcasesTest))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1046
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1047
			my $testcasesInUse = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1048
			if ($testHarness eq $TestScriptResults::KTEFTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1049
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1050
				$testcasesInUse = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1051
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1052
			if (MatchingTEFErrorResult($failure, \$refContents, $testcasesInUse))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1053
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1054
				$failText = $failText . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1055
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1056
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1057
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1058
				$aReferenceTestResults->AddFailureResult($failure);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1059
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1060
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1061
		elsif ($testHarness eq $TestScriptResults::KTestFrameworkTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1062
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1063
			if (MatchingTFErrorResult($failure, \$refContents))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1064
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1065
				$failText = $failText . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1066
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1067
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1068
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1069
				$aReferenceTestResults->AddFailureResult($failure);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1070
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1071
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1072
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1073
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1074
			# Core Conf 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1075
			if (MatchingCoreConfErrorResult($failure, \$refContents))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1076
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1077
				$failText = $failText . "$failure\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1078
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1079
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1080
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1081
				$aReferenceTestResults->AddFailureResult($failure);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1082
				}			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1083
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1084
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1085
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1086
	my $bothCrashed;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1087
	if (($aReferenceTestResults->DidItCrash()) && $aRefTestCrashed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1088
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1089
		$bothCrashed = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1090
		$aReferenceTestResults->ResetCrashed();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1091
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1092
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1093
	if ($inconText || $failText || $bothCrashed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1094
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1095
		$iUnknownFailsButKnownInRef = $iUnknownFailsButKnownInRef . "\n$scriptName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1096
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1097
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1098
	if 	($inconText)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1099
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1100
		$iUnknownFailsButKnownInRef = $iUnknownFailsButKnownInRef . "INCONCLUSIVES:\n$inconText";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1101
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1102
	if ($failText)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1103
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1104
		$iUnknownFailsButKnownInRef = $iUnknownFailsButKnownInRef . "FAILS:\n$failText";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1105
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1106
	if ($bothCrashed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1107
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1108
		$iUnknownFailsButKnownInRef = $iUnknownFailsButKnownInRef . "CRASHED\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1109
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1110
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1111
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1112
###############################################
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1113
##	Utility functions
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1114
###############################################	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1116
sub PrintHelp
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1117
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1118
	print "\n\nResultsComparison.pl -m Mode -s Results_source [-k Known_failure_sheet_path -c Codeline -p Platform] [-r Mistral_comparison_job_url] [-i] [-v]\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1119
	print "  -m = Mode of operation, specify the source of the results that you are\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1120
	print "    comparing. Currently supported modes: Mistral, Local\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1121
	print "  -s = Source of the results, mode dependant:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1122
	print "      (i) Mistral = The URL of the test results HTML summary page\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1123
	print "      (ii) Local = The pathname of a folder containing the test log files\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1124
	print "  -k = Pathname of the KF sheet, this should be exported as an XML spreadsheet\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1125
	print "    from Excel\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1126
	print "  -r = Reference Mistral build, the URL of the test results HTML summary page.\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1127
	print "    This can be used in addition or in place of the Known Failure sheet\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1128
	print "  -i = Ignore test failures in scripts not found in the Reference Mistral build\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1129
	print "  -c = An index indicating the codeline used in the test run, only used in\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1130
	print "    conjunction with a KF sheet. Possible values: TB92, TB101, TB102\n\n";	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1131
	print "  -p = An index indicating the platform the test run is from, only used in\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1132
	print "    conjunction with a KF sheet. Possible values: Winscw, H6, H4 WDP,\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1133
	print "    NaviEngine\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1134
	print "  -v = Verbose output\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1135
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1136
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1137
###############################################
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1138
##	Main processing loop
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1139
###############################################		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1140
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1141
# Read in parameters
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1142
my %aParams;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1143
getopts('ihvm:s:k:r:c:p:', \%aParams);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1144
if ($aParams{h})
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1145
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1146
	PrintHelp();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1147
	exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1148
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1149
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1150
$iVerbose = $aParams{v};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1151
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1152
# The mode affects where we get the source files from and nothing else.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1153
my @runResults;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1154
if ($aParams{m} =~ m/\AMistral\Z/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1155
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1156
	@runResults = @{PopulateResultsArrayFromMistral($aParams{s})};	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1157
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1158
elsif ($aParams{m} =~ m/\ALocal\Z/i)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1159
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1160
	@runResults = @{PopulateResultsArrayFromLocalMachine($aParams{s})};	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1161
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1162
else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1163
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1164
	print "\nERROR: Operation mode absent or not recognised.\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1165
	PrintHelp();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1166
	exit;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1167
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1168
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1169
my @kfPlatforms;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1170
if ($aParams{k})
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1171
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1172
	$kfPlatforms[0] = "All";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1173
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1174
	# KF sheet in use, codeline and platform arguments are required in order to search for matching failures
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1175
	my $codeline = $aParams{c};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1176
	my $platform = $aParams{p};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1177
	unless (($codeline eq "TB92") || ($codeline eq "TB101") || ($codeline eq "TB102"))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1178
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1179
		print "\nERROR: The codeline specified was not recognised, supported options: TB92, TB101, TB102.\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1180
		exit;		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1181
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1182
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1183
	if ($platform eq "Winscw")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1184
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1185
		$kfPlatforms[1] = "All Winscw";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1186
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1187
	elsif (($platform eq "H6") || ($platform eq "H4 WDP") || ($platform eq "NaviEngine"))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1188
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1189
		$kfPlatforms[1] = "All HW";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1190
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1191
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1192
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1193
		print "\nERROR: The platform specified was not recognised, supported options: Winscw, H6, H4 WDP, NaviEngine.\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1194
		exit;		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1195
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1196
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1197
	$kfPlatforms[2] = "$codeline $platform";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1198
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1199
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1200
if ($iVerbose)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1201
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1202
	print "\nLog files found:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1203
	foreach my $file (@runResults)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1204
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1205
		my $scriptName = $file->ScriptName();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1206
		print "$scriptName\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1207
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1208
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1209
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1210
AnalyseFailures($aParams{k}, $aParams{r}, $aParams{i}, \@runResults, \@kfPlatforms);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1211
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1212
print "\n\nKnown failures:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1213
print "------------------\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1214
print "$iKnownFails\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1215
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1216
print "Unknown failures but found in the reference build:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1217
print "----------------------------------------------------\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1218
print "$iUnknownFailsButKnownInRef\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1219
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1220
print "Unknown failures but known in other codelines:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1221
print "------------------------------------------------\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1222
print "$iUnknownFailsButKnownInOtherCodelines\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1224
print "Unknown failures:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1225
print "-------------------\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1226
print "$iUnknownFails\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1227
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1228
print "Tests with reduced test counts:\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1229
print "---------------------------------\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1230
print "$iMissingTests\n\n";
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1231
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1232