blob: fd1473c1243581de5e37c296377b2615f574bbab [file] [log] [blame]
#!/usr/bin/perl
####################################################
# Copyright (c) Open Source Development Labs, 2004
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
# the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# FILE : STPfailure_report.pl
# DESCRIPTION : A script that will retrieve the run results through the net from
# the STP results and then finds the corresponding source code
# file in your LTP tree for each failure. It then prints the
# description and details for each to STDOUT.
# REQUIREMENTS: LWP::Simple, File::Find, and Text::Wrap must be installed
# AUTHOR : Bryce Harrington <bryce@osdl.org>
# HISTORY :
# 04/28/2004 Robbie Williamson (robbiew@austin.ibm.com)
# Adapted for and added to LTP
####################################################
use strict;
use LWP::Simple;
use File::Find;
use Text::Wrap;
$Text::Wrap::columns = 72;
my $test_uid = $ARGV[0];
die "Usage: STPfailure_report.pl TEST_RUN_ID\n"
unless ($test_uid =~ /^\d+$/);
# Location from which to retrieve test results
my $stp_url = "http://khack.osdl.org/stp/$test_uid/";
# Name of the file containing the fail report data
my $fail_report = $stp_url . "results/FAIL_summary.txt";
# Path to the top dir in the locally checked out version of LTP
my $ltp_base = "..";
die "Cannot find testcases directory in '$ltp_base'"
unless (-d "$ltp_base/testcases");
# Retrieve the results for the test run
my $fail_results = get($fail_report)
|| die "Could not retrieve URL $fail_report\n";
# Process the results, extracting each test name & generating a report
my $testname = '';
my $description = '';
my $failures = '';
foreach my $line (split /\n/, $fail_results) {
next unless ($line =~ /^(\w+)\s/);
# Is this a new testname or continuation of the previous?
if ($1 ne $testname) {
# Print the current test results
print_report($testname, $description, $failures);
# Init variables for next testcase
$testname = $1;
$description = get_description($testname, $ltp_base);
$failures = '';
}
$failures .= wrap('', ' 'x26, ($line)) . "\n";
}
# Locates the matching .c file and extracts the DESCRIPTION field
sub get_description {
my $testname = shift || return undef;
my $dir = shift || return undef;
# Find $testname.c
my $path = `find $dir -name '$testname.c'`;
chomp $path;
open(FILEHANDLE, "< $path") or return undef;
# Seek in $testname.c for the DESCRIPTION line
my $line;
while (defined ($line = <FILEHANDLE>)) {
last if ($line =~ /^\s+\*\s+DESCRIPTION/);
last if ($line =~ /^\s+\*\s+Test Description/);
}
# Extract the description
my $description = '';
while (defined ($line = <FILEHANDLE>)) {
last if ($line !~ /^\s+\*\s\s+/);
# Strip off the leading " * "
$line =~ s/^\s+\*\s//;
$description .= $line;
}
close(FILEHANDLE);
$path =~ s|^$dir/||;
return $description . "\nFor more see '$path'\n";
}
# Prints out the failed test case report
sub print_report {
my ($testname, $description, $failures) = @_;
return unless ($testname);
$description ||= "No description available\n";
# Remove any trailing newlines
chomp $description;
chomp $testname;
chomp $failures;
print qq|
========================================================================
Test name: $testname
Description:
$description
Test Result: FAIL
Details:
$failures
========================================================================
|;
}