Kudos to Barrie Slaymaker for the wonderful IPC::Run.
BTW, Philippe has a more advanced smoker (with much better reporting) but he won't let it to see the light before he makes it perfect ;)
For more info on Apache-Test see Geoff's article: http://www.perl.com/pub/a/2003/05/22/testing.html and the online manual: http://perl.apache.org/docs/general/testing/testing.html
--
#!/usr/bin/perl
use strict; use warnings;
use IPC::Run qw(run timeout);
use constant TIMEOUT => 5*60; use constant DEBUG => 0;
$SIG{INT} = sub { report(); exit; };
my %report = (ok => 0, nok => 0, failed => {}); my $test = 0; while (<DATA>) { next if /^\s*(#.*|$)/; chomp; run_test($_); }
report();
sub run_test { my $command = shift; my @cmds = split /\s*&&\s*/, $command; $test++; my $cnt = 0; my $failed = 0; for my $cmd (@cmds) { next unless $cmd =~ /\S/; $cnt++; print "[$test.$cnt] $cmd\n"; my @cmd = split /\s+/, $cmd; my($in, $out, $err); my $ok = 0; eval { $ok = run [EMAIL PROTECTED], \$in, \$out, \$err, debug => DEBUG, timeout(TIMEOUT); }; warn "[EMAIL PROTECTED]" if $@; $ok = 1 if $cmd =~ /make clean/; # ignore 'make clean' errors unless ($ok) { print "\n\tFAILURE!\n\n"; print "STDOUT:\n$out\n" if $out; print "STDERR:\n$err\n" if $err; push @{ $report{failed}{$command} }, "($cnt) $cmd"; $failed++; last; } if (@cmd == 2 && $cmd[0] eq 'make' && $cmd[1] eq 'test') { my $result = $out =~ /All tests successful/ ? "OK" : "NOT OK"; print "\n\t$result\n\n"; } }
$failed ? $report{nok}++ : $report{ok}++; print "\n", "-" x 40, "\n\n"; }
sub report { my $format = "%-7s: %3d\n"; printf $format, "Success", $report{ok}; printf $format, "Failure", $report{nok}; print "-" x 16, "\n"; printf $format, "Total", $report{ok}+$report{nok};
my @failed = keys %{ $report{failed} }; if (@failed) { print join "\n", '', "Failed commands:", "-" x 16, map { join("\n\t", $_, @{ $report{failed}{$_}||[] }),"\n"} @failed; } }
__DATA__ # need to test all these combinations
### mp2 DSO ###
make clean && /usr/bin/env CCFLAGS="-g" perl-5.6.1 Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl /home/stas/httpd/prefork/modules/mod_perl-5.6.1.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.0 Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-5.8.0.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.0-ithread Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-5.8.0-ithread.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.1 Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-5.8.1.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.1-ithread Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-5.8.1-ithread.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-blead Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-blead.so -port select MOD_PERL=2 && make && make test
make clean && /usr/bin/env CCFLAGS="-g" perl-blead-ithread Makefile.PL -httpd /home/stas/httpd/prefork/bin/httpd -libmodperl mod_perl-blead-ithread.so -port select MOD_PERL=2 && make && make test
### worker 2.0 ###
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.1-ithread Makefile.PL -httpd /home/stas/httpd/worker/bin/httpd -libmodperl mod_perl-5.8.1-ithread.so -port select MOD_PERL=2 && make && make test
### mp1 NON-DSO ###
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.00503 Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.00503 -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.6.1-ithread Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.6.1-ithread -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.6.1 Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.6.1 -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.0-ithread Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.8.0-ithread -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.0 Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.8.0 -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.1-ithread Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.8.1-ithread -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-5.8.1 Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-5.8.1 -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-blead-ithread Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-blead-ithread -port select MOD_PERL=1 && make && make test
#ok
make clean && /usr/bin/env CCFLAGS="-g" perl-blead Makefile.PL -httpd /home/httpd/httpd_perl/bin/httpd-blead -port select MOD_PERL=1 && make && make test
__________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com