diff -r 8e2498eaef25 -r f1f85b34a96f common/tools/ats/update_brag_status.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/update_brag_status.pl Tue May 18 15:36:14 2010 +0100 @@ -0,0 +1,248 @@ +#!/usr/bin/perl + +# Copyright (c) 2009 Symbian Foundation Ltd +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Symbian Foundation Ltd - initial contribution. +# Maciej Seroka, maciejs@symbian.org +# +# Description: +# This is a tool for updating BRAG status with test results. + +use strict; +use Getopt::Long; +use XML::Simple; +use Tie::File; + +my $brag_file; +my $ats_report; +my $test_report; +my $help; +my $line; +my $auto_tests_total; +my $auto_tests_passed; +my $auto_tests_failed; +my $auto_tests_notrun; +my $man_tests_total; +my $man_tests_passed; +my $man_tests_failed; +my $man_tests_notrun; +my $temp_path; +my $detailshref; +my $xml_report; +my $test_case; +my $test_brag_xml; +my $existing_results; +my $n; +my $m; +my @lines; + +sub usage($); +sub help(); +sub usage_error(); + +my %optmap = ( 'brag-file' => \$brag_file, + 'ats-report' => \$ats_report, + 'test-report' => \$test_report, + 'help' => \$help); + +GetOptions(\%optmap, + 'brag-file=s', + 'ats-report=s', + 'test-report=s', + 'help!') + or usage_error(); + +if ($help) { + help(); +} + +# --brag-file is mandatory. +usage_error(), unless (defined($brag_file)); + +# --ats-report is mandatory. +usage_error(), unless (defined($ats_report)); + +open (FILE, "<$ats_report") or die ("Couldn't open $ats_report for reading: $!\n"); +my $read_flag = -1; +print "Reading $ats_report... "; +while ($line = ) { + chomp $line; + if ($read_flag >= 0) { $read_flag++ } + if ($read_flag == 1) { # Get Total number of tests. + $auto_tests_total = $line; + # Remove td tags. + $auto_tests_total =~ s/^.*\">//; + $auto_tests_total =~ s/<.*//; + } + if ($read_flag == 4) { # Get number of Passed tests. + ($auto_tests_passed) = split /\//,$line; + $auto_tests_passed =~ s/^.*\">//; # Remove opening td tag. + } + if ($read_flag == 5) { # Get number of Failed tests. + ($auto_tests_failed) = split /\//,$line; + $auto_tests_failed =~ s/^.*\">//; # Remove opening td tag. + + } + if ($read_flag == 7) { # Get number of Not run tests. + ($auto_tests_notrun) = split /\//,$line; + $auto_tests_notrun =~ s/^.*\">//; # Remove opening td tag. + } + if ($line eq "Nested tests<\/td>") { # Set flag for reading results. + $read_flag = 0; + } + if (($line eq "<\/tr>") && ($read_flag >= 0)) { # Exit loop. + last; + }; +} +close FILE; +print "complete\n"; +print "Total number of tests: $auto_tests_total\n"; +print "Passed tests: $auto_tests_passed\n"; +print "Failed tests: $auto_tests_failed\n"; +print "Not run tests: $auto_tests_notrun\n"; + +# Define detailshref attribute. +$temp_path = $brag_file; +$temp_path =~ s/\\/\//g; # Replace \ with / +$temp_path =~ s/\/summary\/.*//; +$detailshref = $ats_report; +$detailshref =~ s/\\/\//g; # Replace \ with / +$detailshref =~ s/($temp_path)/../; + +if (defined($test_report)) { # Get manual Smoketest results. + print "Parsing " . $test_report . "... "; + $xml_report = XMLin("$test_report", keeproot => 1, forcearray => [ 'test-set', 'test-case' ], keyattr => [] ); + print "complete \n"; + $man_tests_total = 0; + $man_tests_passed = 0; + $man_tests_failed = 0; + $man_tests_notrun = 0; + foreach $test_case (@{$xml_report->{'test-report'}->{'test-set'}->[0]->{'test-case'}}) { + if (lc($test_case->{'result'}) eq "passed") { $man_tests_passed++ } + if (lc($test_case->{'result'}) eq "failed") { $man_tests_failed++ } + if (lc($test_case->{'result'}) eq "not run") { $man_tests_notrun++ } + $man_tests_total++; + } + print "Total number of tests: $man_tests_total\n"; + print "Passed tests: $man_tests_passed\n"; + print "Failed tests: $man_tests_failed\n"; + print "Not run tests: $man_tests_notrun\n"; +} + +# Check for Smoketest results in BRAG file. +open (FILE, "<$brag_file") or die ("Couldn't open $brag_file for reading: $!\n"); +$existing_results = 0; +$n = 0; +while ($line = ) +{ + chomp $line; + if ($line =~ "") { + $existing_results = 1; + last; + } + $n++; +} +close FILE; + +tie @lines, 'Tie::File', $brag_file or die ("Couldn't tie file $brag_file: $!\n"); +if ($existing_results) { # Delete existing Test Results from BRAG file. + $m = 0; + do { + $m++; + } while (@lines[$n+$m] !~ "<\/phase>"); + splice @lines, $n, $m+1; +} + +# Insert (New) Test Results to BRAG file. +$n = 0; +foreach ( @lines ) +{ + if (lc(@lines[$n]) =~ "<\/buildstatus>") { + last; + } + $n++; +} +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, ""; $n++; +splice @lines, $n, 0, "<\/step>"; $n++; +if (defined($test_report)) { + splice @lines, $n, 0, ""; $n++; + splice @lines, $n, 0, ""; $n++; + splice @lines, $n, 0, ""; $n++; + splice @lines, $n, 0, ""; $n++; + splice @lines, $n, 0, ""; $n++; + splice @lines, $n, 0, "<\/step>"; $n++; +} +splice @lines, $n, 0, "<\/phase>"; + +untie @lines; +print "$brag_file updated\n"; + +# Create Test_BRAG.xml +$test_brag_xml = $temp_path . "\/summary\/" . "Test_BRAG.xml"; +if (-e $test_brag_xml) { # Delete the file if exists. + unlink($test_brag_xml); + print "$test_brag_xml deleted\n"; +} +open (FILE, "> $test_brag_xml") or die ("Couldn't open $test_brag_xml for writing: $!\n"); +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "\n"; +print FILE "<\/step>\n"; +if (defined($test_report)) { + print FILE "\n"; + print FILE "\n"; + print FILE "\n"; + print FILE "\n"; + print FILE "\n"; + print FILE "<\/step>\n"; +} +print FILE "<\/phase>\n"; +print FILE "\n"; +close FILE; +print "$test_brag_xml saved\n"; + +exit 0; + +sub usage($) +{ + my $error = shift; + my $fh = $error == 0 ? *STDOUT : *STDERR; + print $fh "update_brag_status.pl\n" . + "Specify the BRAG xml file and ATS report\n" . + "synopsis:\n" . + " update_brag_status.pl --help\n" . + " update_brag_status.pl [--brag-file=XML_FILE] [--ats-report=HTML_REPORT] [--test-report=XML_REPORT] \n" . + "options:\n" . + " --help Display this help and exit.\n" . + " --brag-file=XML_FILE XML_FILE is the full path to the file containing BRAG summary.\n" . + " --ats-report=HTML_REPORT HTML_REPORT is the full path to the ATS report.\n" . + " --test-report=XML_REPORT XML_REPORT is the name of the test report for manually executed tests.\n" . + " If not specified only automated tests results will be taken into account.\n"; + exit $error; +} + +sub help() +{ + usage(0); +} + +sub usage_error() +{ + usage(1); +}