Apache-Test
view release on metacpan or search on metacpan
lib/Apache/TestRun.pm view on Meta::CPAN
# a workaround to support -verbose and -verbose=0|1
# $Getopt::Long::VERSION > 2.26 can use the "verbose:1" rule
# but we have to support older versions as well
@ARGV = grep defined,
map {/-verbose=(\d)/ ? ($1 ? '-verbose' : undef) : $_ } @ARGV;
# permute : optional values can come before the options
# pass_through : all unknown things are to be left in @ARGV
Getopt::Long::Configure(qw(pass_through permute));
# grab from @ARGV only the options that we expect
GetOptions(\%opts, @flag_opts, @help_opts,
(map "$_:s", @debug_opts, @request_opts, @ostring_opts),
(map "$_=s", @string_opts),
(map { ("$_=s", $vopts{$_} ||= []) } @list_opts),
(map { ("$_=s", $vopts{$_} ||= {}) } @hash_opts));
$opts{$_} = $vopts{$_} for keys %vopts;
# separate configuration options and test files/dirs
my $req_wanted_args = Apache::TestRequest::wanted_args();
my @argv = ();
my %req_args = ();
while (@ARGV) {
my $val = shift @ARGV;
if ($val =~ /^--?(.+)/) { # must have a leading - or --
my $key = lc $1;
# a known config option?
if (exists $Apache::TestConfig::Usage{$key}) {
$conf_opts{$key} = shift @ARGV;
next;
} # a TestRequest config option?
elsif (exists $req_wanted_args->{$key}) {
$req_args{$key} = shift @ARGV;
next;
}
}
# to be processed later
push @argv, $val;
}
# save the orig args (make a deep copy)
$orig_conf_opts = { %conf_opts };
# fixup the filepath options on win32 (spaces, short names, etc.)
if (Apache::TestConfig::WIN32) {
for my $key (keys %conf_opts) {
next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
next unless -e $conf_opts{$key};
$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
}
}
$opts{req_args} = \%req_args;
# only test files/dirs if any at all are left in argv
$self->{argv} = \@argv;
# force regeneration of httpd.conf if commandline args want to
# modify it. configure_opts() has more checks to decide whether to
# reconfigure or not.
# XXX: $self->passenv() is already tested in need_reconfiguration()
$self->{reconfigure} = $opts{configure} ||
(grep { $opts{$_}->[0] } qw(preamble postamble)) ||
(grep { $Apache::TestConfig::Usage{$_} } keys %conf_opts ) ||
$self->passenv() || (! -e 't/conf/httpd.conf');
if (exists $opts{debug}) {
$opts{debugger} = $opts{debug};
$opts{debug} = 1;
}
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";
exit_perl 0;
}
}
# breakpoint automatically turns the debug mode on
if (@{ $opts{breakpoint} }) {
$opts{debug} ||= 1;
}
if ($self->{reconfigure}) {
$conf_opts{save} = 1;
delete $self->{reconfigure};
}
else {
$conf_opts{thaw} = 1;
}
#propagate some values
for (qw(verbose)) {
$conf_opts{$_} = $opts{$_};
}
$self->{opts} = \%opts;
$self->{conf_opts} = \%conf_opts;
}
sub default_run_opts {
my $self = shift;
my($opts, $tests) = ($self->{opts}, $self->{tests});
unless (grep { exists $opts->{$_} } @std_run, @request_opts) {
if (@$tests && $self->{server}->ping) {
# if certain tests are specified and server is running,
# dont restart
$opts->{'run-tests'} = 1;
}
else {
( run in 2.057 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )