#!/usr/bin/perl
# ====================================================================
# The Vovida Software License, Version 1.0
#
# Copyright (c) 2000,2003 Vovida Networks, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The names "VOCAL", "Vovida Open Communication Application Library",
# and "Vovida Open Communication Application Library (VOCAL)" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact vocal\@vovida.org.
#
# 4. Products derived from this software may not be called "VOCAL", nor
# may "VOCAL" appear in their name, without prior written
# permission of Vovida Networks, Inc.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
# NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
# IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#
# ====================================================================
#
# This software consists of voluntary contributions made by Vovida
# Networks, Inc. and many individuals on behalf of Vovida Networks,
# Inc. For more information on Vovida Networks, Inc., please see
# <http://www.vovida.org/>.
# $Id: run-tests,v 1.12.72.1 2003/02/18 19:36:33 bko Exp $
require "getopts.pl";
&Getopts("av");
# usage:
if($#ARGV < 0) {
print "usage: $0 [-av] <tests....>\n";
exit -1;
}
# run through all the tests (passed in ARGV) and make sure they work
$fail = 0;
foreach $test (@ARGV) {
# do something
my $record = {};
$cmd = "./$test 2>&1|";
$record->{name} = $test;
print "running $cmd\n" if $opt_v;
open(F, $cmd) || die "cannot run $cmd: $!";
while(<F>) {
if(/^VerifySummary/) {
# do something here
/:([0-9]*):([0-9]*):([0-9]*):([0-9]*):([0-9]*)$/;
$record->{count} = $1;
$record->{passed} = $2;
$record->{failed} = $3;
$record->{broken} = $4;
$record->{fixed} = $5;
}
}
$ret = close(F);
$record->{exit_status} = $?;
push(@recordlist, $record);
}
if($opt_a) {
# print ALL failing tests, even ones that are "bugs"
print "\n";
print "============================================================\n";
print "FAILING TESTS\n";
print " (All failing tests, even those which are known broken)\n";
print "------------------------------------------------------------\n";
$allok = 1;
foreach $record (@recordlist) {
if($record->{failed} > 0 || $record->{broken} > 0) {
print " $record->{name}\n";
$allok = 0;
}
}
if($allok) {
print "\nPASSED: All tests passed.\n";
} else {
print "\nFAILED: Some tests failed.\n";
}
} else {
# normally, just print new failing tests
print "\n";
print "============================================================\n";
print "FAILING TESTS\n";
print " (tests which used to pass don't anymore)\n";
print " run 'make verifyall' to show ALL failing tests\n";
print "------------------------------------------------------------\n";
$allok = 1;
foreach $record (@recordlist) {
if($record->{failed} > 0) {
print " $record->{name}\n";
$allok = 0;
}
}
if($allok) {
print "\nPASSED: All working tests passed.\n";
} else {
print "\nFAILED: New bugs introduced\n";
}
}
print "\n";
sub broken_header {
print "\n";
print "============================================================\n";
print "BROKEN TESTS\n";
print " These are tests which fall into one of several categories:\n";
print " - segfaulted\n";
print " - the numbers don't add up (too many or too few test cases)\n";
print " - broken tests have been fixed but not moved into the\n";
print " 'working' category\n";
print "------------------------------------------------------------\n";
}
$allok = 1;
foreach $record (@recordlist) {
if(( $record->{count} != ($record->{passed} + $record->{failed} +
$record->{broken} + $record->{fixed})) ||
( $record->{exit_status}) ||
( $record->{fixed} > 0)
){
if($allok) {
&broken_header();
}
print " $record->{name}\n";
$retvalue = -1;
$allok = 0;
}
}
if($allok) {
# print "\nPASSED: No broken tests.\n";
} else {
print "\nFAILED: Please fix broken tests.\n";
}
print "\n";
exit $retvalue;
syntax highlighted by Code2HTML, v. 0.9.1