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