summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/Apache-Test/Apache-TestItSelf/lib/MyTest/Util.pm
diff options
context:
space:
mode:
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.pm160
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
+