158 lines
4.3 KiB
Perl
158 lines
4.3 KiB
Perl
#
|
|
# interactive testing (when A-T) can't figure out the configuration
|
|
#
|
|
|
|
use Test::More;
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use IPC::Run qw(start pump finish timeout);
|
|
use Cwd qw(cwd);
|
|
use File::Spec::Functions qw(catfile);
|
|
|
|
use MyTest::Util qw(myrun3 go_in go_out work_dir check_eval
|
|
test_configs);
|
|
|
|
use Apache::TestConfig ();
|
|
use Apache::TestTrace;
|
|
|
|
# in this test we don't want any cached preconfiguration to kick in
|
|
# A-T is aware of this env var and won't load neither custom config, nor
|
|
# Apache/Build.pm from mod_perl2.
|
|
local $ENV{APACHE_TEST_INTERACTIVE_CONFIG_TEST} = 1;
|
|
|
|
my @configs = test_configs();
|
|
if ($configs[0]{repos_type} eq 'mp2_core') {
|
|
plan skip_all => "modperl2 doesn't run interactive config";
|
|
}
|
|
else {
|
|
my $tests_per_config = 11;
|
|
plan tests => $tests_per_config * @configs + 1;
|
|
}
|
|
|
|
my $orig_dir = go_in();
|
|
|
|
my $cwd = cwd();
|
|
my $expected_work_dir = work_dir();
|
|
is $cwd, $expected_work_dir, "working in $expected_work_dir";
|
|
|
|
debug "cwd: $cwd";
|
|
|
|
for my $c (@configs) {
|
|
|
|
# install the sticky custom config
|
|
install($c);
|
|
|
|
# interactive config doesn't work with this var on
|
|
$ENV{APACHE_TEST_NO_STICKY_PREFERENCES} = 0;
|
|
basic($c);
|
|
}
|
|
|
|
go_out($orig_dir);
|
|
|
|
# 4 tests
|
|
sub install {
|
|
my $c = shift;
|
|
|
|
my($cmd, $out, $err);
|
|
|
|
$cmd = "make clean";
|
|
($out, $err) = myrun3($cmd);
|
|
# ignore the results
|
|
|
|
my $makepl_arg = $c->{makepl_arg} || '';
|
|
$cmd = "$c->{perl_exec} Makefile.PL $makepl_arg " .
|
|
"-httpd $c->{httpd_exec} -apxs $c->{apxs_exec}";
|
|
($out, $err) = myrun3($cmd);
|
|
my $makefile = catfile $expected_work_dir, "Makefile";
|
|
is -e $makefile, 1, "generated $makefile";
|
|
unlike $err, qr/\[ error\]/, "checking for errors";
|
|
|
|
$cmd = "make";
|
|
($out, $err) = myrun3($cmd);
|
|
is $err, "", $cmd;
|
|
|
|
$cmd = "make install";
|
|
($out, $err) = myrun3($cmd);
|
|
unlike $err, qr/\[ error\]/, $cmd;
|
|
}
|
|
|
|
# 7 tests
|
|
sub basic {
|
|
my $c = shift;
|
|
|
|
my($cmd, $out, $err);
|
|
|
|
# clean and ignore the results
|
|
$cmd = "make clean";
|
|
($out, $err) = myrun3($cmd);
|
|
|
|
my $makepl_arg = $c->{makepl_arg} || '';
|
|
$cmd = "$c->{perl_exec} Makefile.PL $makepl_arg";
|
|
($out, $err) = myrun3($cmd);
|
|
unlike $err, qr/\[ error\]/, $cmd;
|
|
|
|
$cmd = "make";
|
|
($out, $err) = myrun3($cmd);
|
|
is $err, "", $cmd;
|
|
|
|
{
|
|
my $in;
|
|
my $expected = '';
|
|
my @cmd = qw(make test);
|
|
push @cmd, "TEST_VERBOSE=1" if $c->{test_verbose};
|
|
$cmd = join " ", @cmd;
|
|
|
|
# bypass the -t STDIN checks to still ensure the interactive
|
|
# config prompts
|
|
$ENV{APACHE_TEST_INTERACTIVE_PROMPT_OK} = 1;
|
|
|
|
$in = '';
|
|
$out = '';
|
|
$err = '';
|
|
my $h = start \@cmd, \$in, \$out, \$err, timeout($c->{timeout});
|
|
|
|
# here the expect fails if the interactive config doesn't kick
|
|
# in, but for example somehow figures out the needed
|
|
# information (httpd/apxs) and runs the test suite normally
|
|
$expected = "Please provide a full path to 'httpd' executable";
|
|
eval { $h->pump until $out =~ /$expected/gc };
|
|
my $reset_std = 1;
|
|
check_eval($cmd, $out, $err, $reset_std,
|
|
"interactive config wasn't invoked");
|
|
|
|
$in .= "$c->{httpd_exec}\n" ;
|
|
$expected = "Please provide a full path to .*? 'apxs' executable";
|
|
eval { $h->pump until $out =~ /$expected/gc };
|
|
$reset_std = 1;
|
|
check_eval($cmd, $out, $err, $reset_std,
|
|
"interactive config had a problem");
|
|
|
|
$in .= "$c->{apxs_exec}\n" ;
|
|
eval { $h->finish };
|
|
$reset_std = 0; # needed for later sub-tests
|
|
check_eval($cmd, $out, $err, $reset_std,
|
|
"failed to finish $cmd");
|
|
like $out, qr/using $c->{httpd_version} \($c->{httpd_mpm} MPM\)/,
|
|
"$cmd: using $c->{httpd_version} \($c->{httpd_mpm} MPM";
|
|
like $out, qr/All tests successful/, "$cmd: All tests successful";
|
|
unlike $err, qr/\[ error\]/, "$cmd: no error messages";
|
|
}
|
|
|
|
$cmd = "make install";
|
|
($out, $err) = myrun3($cmd);
|
|
unlike $err, qr/\[ error\]/, $cmd;
|
|
|
|
# test that httpd is found in t/REPORT (if exists)
|
|
SKIP: {
|
|
$cmd = "t/REPORT";
|
|
skip "$cmd doesn't exist", 1 unless -e $cmd;
|
|
|
|
($out, $err) = myrun3($cmd);
|
|
like $out, qr/Server version: $c->{httpd_version}/, $cmd;
|
|
}
|
|
}
|
|
|
|
__END__
|
|
|