123 lines
3 KiB
Perl
123 lines
3 KiB
Perl
use strict;
|
|
|
|
use lib qw(../../lib ../lib ./lib);
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use Test::Harness;
|
|
use FindBin;
|
|
use File::Spec::Functions qw(catdir);
|
|
use Apache::TestTrace;
|
|
use Cwd qw(cwd);
|
|
|
|
use Getopt::Long qw(GetOptions);
|
|
|
|
my %usage = (
|
|
'base-dir' => 'which dir to run the tests in (default: Apache-TestMe)',
|
|
'config-file' => 'which config file to use',
|
|
'help' => 'display this message',
|
|
'trace=T' => 'change tracing default to: warning, notice, ' .
|
|
'info, debug, ...',
|
|
'verbose[=1]' => 'verbose output',
|
|
);
|
|
|
|
my @flag_opts = qw(verbose help);
|
|
my @string_opts = qw(config-file base-dir trace);
|
|
|
|
my %opts;
|
|
# grab from @ARGV only the options that we expect
|
|
GetOptions(\%opts, @flag_opts, (map "$_=s", @string_opts));
|
|
|
|
# t/TEST -v -base /home/$ENV{USER}/apache.org/Apache-Test \
|
|
# -config /home/$ENV{USER}/.apache-test/apache_test_config.pm
|
|
#
|
|
|
|
$Test::Harness::verbose = 1 if $opts{verbose};
|
|
|
|
opt_help() if $opts{help};
|
|
opt_help() unless $opts{'config-file'};
|
|
|
|
if ($opts{'base-dir'}) {
|
|
unless (-d $opts{'base-dir'}) {
|
|
error "can't find $opts{'base-dir'}";
|
|
opt_help();
|
|
}
|
|
}
|
|
else {
|
|
my $dir = catdir $FindBin::Bin, qw(.. Apache-TestMe);
|
|
# get rid of relative paths
|
|
die "can't find the default dir $dir" unless -d $dir;
|
|
my $from = cwd();
|
|
chdir $dir or die "can't chdir to $dir: $!";
|
|
$dir = cwd();
|
|
chdir $from or die "can't chdir to $from: $!";
|
|
$opts{'base-dir'} = $dir;
|
|
}
|
|
|
|
|
|
unless (-r $opts{'config-file'}) {
|
|
error "can't read $opts{'config-file'}";
|
|
opt_help();
|
|
}
|
|
|
|
if ($opts{trace}) {
|
|
my %levels = map {$_ => 1} @Apache::TestTrace::Levels;
|
|
if (exists $levels{ $opts{trace} }) {
|
|
$Apache::TestTrace::Level = $opts{trace};
|
|
# propogate the override for the server-side.
|
|
# -trace overrides any previous APACHE_TEST_TRACE_LEVEL settings
|
|
$ENV{APACHE_TEST_TRACE_LEVEL} = $opts{trace};
|
|
}
|
|
else {
|
|
error "unknown trace level: $opts{trace}",
|
|
"valid levels are: @Apache::TestTrace::Levels";
|
|
opt_help();
|
|
}
|
|
}
|
|
|
|
# forward the data to the sub-processes run by Test::Harness
|
|
$ENV{APACHE_TESTITSELF_CONFIG_FILE} = $opts{'config-file'};
|
|
$ENV{APACHE_TESTITSELF_BASE_DIR} = $opts{'base-dir'};
|
|
|
|
run_my_tests();
|
|
|
|
sub run_my_tests {
|
|
|
|
my $base = "t";
|
|
unless (-d $base) {
|
|
# try to move into the top-level directory
|
|
chdir ".." or die "Can't chdir: $!";
|
|
}
|
|
|
|
my @tests;
|
|
if (@ARGV) {
|
|
for (@ARGV) {
|
|
if (-d $_) {
|
|
push @tests, <$_/*.t>;
|
|
} else {
|
|
$_ .= ".t" unless /\.t$/;
|
|
push @tests, $_;
|
|
}
|
|
}
|
|
} else {
|
|
chdir $base;
|
|
@tests = sort (<*.t>);
|
|
chdir "..";
|
|
@tests = map { "$base/$_" } @tests;
|
|
}
|
|
|
|
runtests @tests;
|
|
}
|
|
|
|
sub opt_help {
|
|
print <<EOM;
|
|
usage: TEST [options ...]
|
|
where options include:
|
|
EOM
|
|
|
|
for (sort keys %usage){
|
|
printf " -%-13s %s\n", $_, $usage{$_};
|
|
}
|
|
exit;
|
|
}
|