diff options
Diffstat (limited to 'debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm')
-rw-r--r-- | debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm b/debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm new file mode 100644 index 0000000..736eb6f --- /dev/null +++ b/debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm @@ -0,0 +1,160 @@ +package MyTest::Util; + +use strict; +use warnings FATAL => 'all'; + +use Apache::TestConfig; +use Apache::TestTrace; + +use Exporter (); +use IPC::Run3 (); +use Cwd; + +use vars qw(@ISA @EXPORT @EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = (); +@EXPORT_OK = qw(myrun3 go_in go_out work_dir dump_stds check_eval + test_configs); + +sub myrun3 { + my $cmd = shift; + my $out = ''; + my $err = ''; + + my $ok = IPC::Run3::run3($cmd, \undef, \$out, \$err); + die "IPC::Run3 failed to run $cmd" unless $ok; + + dump_stds($cmd, '', $out, $err) if $?; + + return ($out, $err); +} + +sub go_in { + my $orig_dir = cwd(); + my $dir = $ENV{APACHE_TESTITSELF_BASE_DIR} || ''; + debug "chdir $dir"; + chdir $dir or die "failed to chdir to $dir: $!"; + return $orig_dir; +} + +sub go_out { + my $dir = shift; + debug "chdir $dir"; + chdir $dir or die "failed to chdir to $dir: $!"; +} + +# the base dir from which the A-T tests are supposed to be run +# we might not be there +sub work_dir { $ENV{APACHE_TESTITSELF_BASE_DIR} } + +sub dump_stds { + my($cmd, $in, $out, $err) = @_; + $cmd = 'unknown' unless length $cmd; + $in = '' unless length $in; + $out = '' unless length $out; + $err = '' unless length $err; + + if ($cmd) { + $cmd =~ s/\n$//; + $cmd =~ s/^/# /gm; + print STDERR "\n\n#== CMD ===\n$cmd\n#============="; + } + if ($in) { + $in =~ s/\n$//; + $in =~ s/^/# /gm; + print STDERR "\n### STDIN ###\n$in\n##############\n\n\n"; + } + if ($out) { + $out =~ s/\n$//; + $out =~ s/^/# /gm; + print STDERR "\n### STDOUT ###\n$out\n##############\n\n\n"; + } + if ($err) { + $err =~ s/\n$//; + $err =~ s/^/# /gm; + print STDERR "\n### STDERR ###\n$err\n##############\n\n\n"; + } +} + +# if $@ is set dumps the $out and $err streams and dies +# otherwise resets the $out and $err streams if $reset_std is true +sub check_eval { + my($cmd, $out, $err, $reset_std, $msg) = @_; + $msg ||= "unknown"; + if ($@) { + dump_stds($cmd, '', $out, $err); + die "$@\nError: $msg\n"; + } + # reset the streams in caller + ($_[1], $_[2]) = ("", "") if $reset_std; +} + +# this function returns an array of configs (hashes) coming from +# -config-file command line option +sub test_configs { + my $config_file = $ENV{APACHE_TESTITSELF_CONFIG_FILE} || ''; + + # reset + %Apache::TestItSelf::Config = (); + @Apache::TestItSelf::Configs = (); + + require $config_file; + unless (@Apache::TestItSelf::Configs) { + error "can't find test configs in '$config_file'"; + exit 1; + } + + my %global = %Apache::TestItSelf::Config; + + # merge the global config with instance configs + my @configs = map { { %global, %$_ } } @Apache::TestItSelf::Configs; + + return @configs; +} + + +1; + +__END__ + +=head1 NAME + +MyTest::Util -- helper functions + +=head1 Config files format + +the -config-file command line option specifies which file contains the +configurations to run with. + +META: expand + + %Apache::TestItSelf::Config = ( + perl_exec => "/home/$ENV{USER}/perl/5.8.5-ithread/bin/perl5.8.5", + mp_gen => '2.0', + httpd_gen => '2.0', + httpd_version => 'Apache/2.0.55', + timeout => 200, + makepl_arg => 'MOD_PERL=2 -libmodperl mod_perl-5.8.5-ithread.so', + ); + + my $path = "/home/$ENV{USER}/httpd"; + + @Apache::TestItSelf::Configs = ( + { + apxs_exec => "$path/prefork/bin/apxs", + httpd_exec => "$path/prefork/bin/httpd", + httpd_mpm => "prefork", + test_verbose => 0, + }, + { + apxs_exec => "$path/worker/bin/apxs", + httpd_exec => "$path/worker/bin/httpd", + httpd_mpm => "worker", + test_verbose => 1, + }, + ); + 1; + + +=cut + |