On Wed, 3 Sep 2003, Stas Bekman wrote: > Randy Kobes wrote: > > On Tue, 2 Sep 2003, Stas Bekman wrote: [ .. ] > It should work during 'make test' as well, since it already runs t/TEST > -config. And also whenever you provide any options to t/TEST it reconfigures, > so I believe the normal run will do the same: > > t/TEST -save -httpd /usr/local/httpd/bin/httpd > > I haven't tested that though.
I've checked that (with the diff below), and it seems to work now as you say, both within Apache-Test and for a 3rd party package. Without the -save the new -httpd is used, but not saved into Apache::TestConfigData. [ .. ] > > Good idea - that's much simpler. The following assumes > > that an empty Apache/TestConfigData.pm is present, and > > then, as you say, 'make install' will pick up any changes > > that have been made to it. > > If I remember correctly 'make install' will complain about > the mismatch in sizes since 'make' has already put the > files into blib? Did it work for you just fine? Purhaps we > do need to update the two. On linux, I tried installing Apache-Test, and then changing the settings via t/TEST -save -httpd /path/to/some/other/httpd This wrote a new lib/Apache/TestConfigData.pm, and make install did recognize the change, copied it over to blib/, and installed the new copy. The diff below also includes a change to better get the location of Apache::TestConfigData. ============================================================== Index: lib/Apache/TestRun.pm =================================================================== RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v retrieving revision 1.113 diff -u -r1.113 TestRun.pm --- lib/Apache/TestRun.pm 22 Jul 2003 11:21:36 -0000 1.113 +++ lib/Apache/TestRun.pm 4 Sep 2003 21:02:44 -0000 @@ -11,19 +11,69 @@ use Apache::TestHarness (); use Apache::TestTrace; +use constant WIN32 => Apache::TestConfig::WIN32; +require Win32 if WIN32; + +use Cwd; +# Are we building things within Apache-Test? +sub in_apache_test { + my $cwd = WIN32 ? Win32::GetLongPathName(cwd) : cwd; + return ($cwd =~ m{Apache-Test}) ? 1 : 0; +} +use constant IN_APACHE_TEST => in_apache_test(); + +require File::Spec; +# routine to determine where the configuration file +# Apache::TestConfigData lives. The order searched is +# 1) a path within Apache-Test, if we are building things there +# 2) an $ENV{HOME}/.apache-test/ directory; +# 3) somewhere in @INC, other than a path within Apache-Test. +sub config_data { + my $sys_config; + my $file = 'TestConfigData.pm'; + for (@INC) { + my $candidate = File::Spec->catfile($_, 'Apache', $file); + if (-e $candidate) { + $sys_config = $candidate; + last; + } + } + if ($sys_config) { + eval {require $sys_config}; + return $sys_config if (not $@ and IN_APACHE_TEST); + $sys_config = undef if $@; + } + # XXX $ENV{HOME} isn't propagated in mod_perl + if ($ENV{HOME}) { + my $priv_config = File::Spec->catfile($ENV{HOME}, + '.apache-test', + $file); + eval {require $priv_config}; + return $priv_config unless $@; + } + return $sys_config ? $sys_config : undef; +} + +use constant CONFIG_DATA => config_data(); + use File::Find qw(finddepth); -use File::Spec::Functions qw(catfile); +use File::Spec::Functions qw(catfile catdir); use Getopt::Long qw(GetOptions); +use File::Basename; use Config; +use Symbol; use constant STARTUP_TIMEOUT => 300; # secs (good for extreme debug cases) use subs qw(exit_shell exit_perl); +die 'Could not find a suitable Apache::TestConfigData' + unless defined CONFIG_DATA; + my %core_files = (); my %original_t_perms = (); my @std_run = qw(start-httpd run-tests stop-httpd); -my @others = qw(verbose configure clean help ssl http11); +my @others = qw(verbose configure clean help ssl http11 save); my @flag_opts = (@std_run, @others); my @string_opts = qw(order trace); my @ostring_opts = qw(proxy ping); @@ -55,6 +105,7 @@ 'ssl' => 'run tests through ssl', 'proxy' => 'proxy requests (default proxy is localhost)', 'trace=T' => 'change tracing default to: warning, notice, info, debug, ...', + 'save' => 'save test paramaters into Apache::TestConfigData', (map { $_, "\U$_\E url" } @request_opts), ); @@ -407,6 +458,8 @@ $test_config->cmodules_configure; $test_config->generate_httpd_conf; $test_config->save; + $self->write_config() if + (not %{$Apache::TestConfigData} or $self->{opts}->{save}); } sub try_exit_opts { @@ -509,6 +562,10 @@ sub new_test_config { my $self = shift; + for (qw(httpd port user group apxs)) { + next unless $Apache::TestConfigData->{$_}; + $self->{conf_opts}->{$_} ||= $Apache::TestConfigData->{$_}; + } Apache::TestConfig->new($self->{conf_opts}); } @@ -614,6 +671,7 @@ $self->run_tests; $self->stop; + } my @oh = qw(jeez golly gosh darn shucks dangit rats nuts dangnabit crap); @@ -915,6 +973,41 @@ # require Carp; # Carp::cluck('exiting'); CORE::exit $_[0]; +} + +sub write_config { + my $self = shift; + my $fh = Symbol::gensym(); + my $vars = $self->{test_config}->{vars}; + my $conf_opts = $self->{conf_opts}; + my $file = IN_APACHE_TEST ? + catfile($vars->{top_dir}, CONFIG_DATA) : + CONFIG_DATA; + die "Cannot open $file: $!" unless (open($fh, ">$file")); + warn "Writing $file.\n"; + my $config_dump = ''; + if ($self->{test_config}->{vars}->{httpd}) { + for (qw(group user apxs port httpd)) { + next unless my $var = $conf_opts->{$_} || $vars->{$_}; + $config_dump .= qq{ '$_' => } . qq{'$var',\n}; + } + } + my $pkg = << "EOC"; +package Apache::TestConfigData; +\$Apache::TestConfigData = { +$config_dump +}; +1; + +=head1 NAME + +Apache::TestConfigData - Configuration file for Apache::Test + +=cut +EOC + print $fh $pkg; + close $fh; + return 1; } 1; ====================================================================== -- best regards, randy kobes