Author: stas Date: Sun Dec 19 20:02:17 2004 New Revision: 122805 URL: http://svn.apache.org/viewcvs?view=rev&rev=122805 Log: add various straps to aid the new Apache-TestItSelf sub-project, which is used to test A-T config options
Modified: httpd/test/trunk/perl-framework/Apache-Test/Changes httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm Modified: httpd/test/trunk/perl-framework/Apache-Test/Changes Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Changes?view=diff&rev=122805&p1=httpd/test/trunk/perl-framework/Apache-Test/Changes&r1=122804&p2=httpd/test/trunk/perl-framework/Apache-Test/Changes&r2=122805 ============================================================================== --- httpd/test/trunk/perl-framework/Apache-Test/Changes (original) +++ httpd/test/trunk/perl-framework/Apache-Test/Changes Sun Dec 19 20:02:17 2004 @@ -8,6 +8,9 @@ =item 1.18-dev +add various straps to aid the new Apache-TestItSelf sub-project, which +is used to test A-T config options [Stas] + avoid entering endless loops when interactive config is used, by restarting the test suite with an explicit selected arguments for -httpd (and optionally -apxs) [Stas] Modified: httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm?view=diff&rev=122805&p1=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm&r1=122804&p2=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm&r2=122805 ============================================================================== --- httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm (original) +++ httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm Sun Dec 19 20:02:17 2004 @@ -176,6 +176,11 @@ } sub modperl_build_config { + + # we don't want to get mp2 preconfigured data in order to be able + # to get the interactive tests running. + return undef if $ENV{APACHE_TEST_INTERACTIVE_CONFIG_TEST}; + eval { require Apache::Build; } or return undef; @@ -384,6 +389,9 @@ # so it never returns $self->custom_config_first_time($self->{vars}); } + else { + debug "Using httpd: $vars->{httpd}"; + } # if we have gotten that far we know at least about the location # of httpd and or apxs, so let's save it if we haven't saved any @@ -1856,6 +1864,44 @@ return ''; } +# tries to nuke all occurences of custom config +# used by things outside the A-T test suite +sub custom_config_nuke { + my $cwd = fastcwd(); + + # 1) create a fake empty (blib/)?lib/Apache/TestConfigData.pm + # (don't delete it since it may mess up with MakeMaker) + my $path = catfile $cwd, "lib", Apache::TestConfig::CUSTOM_CONFIG_FILE; + # overwrite the empty stub + Apache::TestConfig::custom_config_write($path, '') if -e $path; + + $path = catfile $cwd, "blib", "lib", + Apache::TestConfig::CUSTOM_CONFIG_FILE; + if (-e $path) { + my $mode = (stat _)[2]; + my $mode_new = $mode | 0200; + chmod $mode_new, $path; + error "emptying $path"; + Apache::TestConfig::custom_config_write($path, ''); + chmod $mode, $path; + } + + # 2) go through @INC = ~/.apache-test and nuke any occurences of + # CUSTOM_CONFIG_FILE + my @inc = (); + + push @inc, catdir $ENV{HOME}, '.apache-test' if $ENV{HOME}; + + push @inc, @INC; + + for (@inc) { + my $victim = File::Spec->rel2abs(catfile $_, CUSTOM_CONFIG_FILE); + next unless -e $victim; + debug "unlinking $victim"; + unlink $victim; + } +} + sub custom_config_exists { # try to load custom config if it wasn't loaded yet (there are # many entry points to this API) @@ -2105,6 +2151,12 @@ return; } + if ($ENV{APACHE_TEST_INTERACTIVE_CONFIG_TEST}) { + debug "APACHE_TEST_INTERACTIVE_CONFIG_TEST=1 => " . + "skipping load of custom config data"; + return; + } + return if $custom_config_loaded; if (my $custom_config_path = custom_config_path()) { @@ -2121,8 +2173,11 @@ my $self = shift; my $conf_opts = shift; - unless (-t STDIN) { - error "STDIN is closed, can't run interactive config"; + # we can't prompt when STDIN is not attached to tty, unless we + # were told that's it OK via env var (in which case some program + # will feed the interactive prompts + unless (-t STDIN || $ENV{APACHE_TEST_INTERACTIVE_PROMPT_OK}) { + error "STDIN is not attached to tty, skip interactive config"; Apache::TestRun::skip_test_suite(); } @@ -2215,7 +2270,7 @@ # we probably could reconfigure on the fly ($self->configure), but # the problem is various cached data which won't be refreshed. so # the simplest is just to restart the run from scratch - Apache::TestRun::rerun(); + Apache::TestRun::rerun($vars); } sub _custom_config_prompt_path { @@ -2422,6 +2477,16 @@ configuration phase (C<t/TEST -config>, C<Apache::Test> will automatically unshift the I<project/lib> directory into C<@INC>, via the autogenerated I<t/conf/modperl_inc.pl> file. + +=head2 APACHE_TEST_INTERACTIVE_PROMPT_OK + +Normally interactive prompts aren't run when STDIN is not attached to +a tty. But sometimes there is a program that can answer the prompts +(e.g. when testing A-T itself). If this variable is true the +interactive config won't be skipped (if needed). + + + =head1 AUTHOR Modified: httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm?view=diff&rev=122805&p1=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm&r1=122804&p2=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm&r2=122805 ============================================================================== --- httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm (original) +++ httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestRun.pm Sun Dec 19 20:02:17 2004 @@ -1310,8 +1310,12 @@ sub skip_test_suite { my $no_doubt = shift; - # we can't prompt when there is no STDIN; - $no_doubt = 1 unless -t STDIN; + # we can't prompt when STDIN is not attached to tty, unless we + # were told that's it OK via env var (in which case some program + # will feed the interactive prompts + unless (-t STDIN || $ENV{APACHE_TEST_INTERACTIVE_PROMPT_OK}) { + $no_doubt = 1; + } print qq[