Re: [RELEASE CANDIDATE] Apache-Test-1.27 RC2

2005-10-12 Thread Randy Kobes

On Wed, 12 Oct 2005, Philip M. Gollucci wrote:


A release candidate for Apache-Test 1.27 is now available.

 http://people.apache.org/~pgollucci/at/Apache-Test-1.27-RC2.tar.gz

Please take the time to exercise the candidate through all your existing
applications that use Apache-Test and report back successes or failures.


Builds and tests fine on
- linux: Apache/2.0.54 (prefork)
- win32: Apache/2.0.54 (winnt)

--
best regards,
randy


Re: [PATCH] add ldd/otool output to bug reports

2005-09-12 Thread Randy Kobes

On Mon, 12 Sep 2005, Philip M. Gollucci wrote:


If this point was reached, it would break Win32, plus
any other system which didn't have an ldd in the PATH.
Perhaps Apache::TestConfig::which() could be used to
see if an ldd() [or otool()] is present, and skip this
part if it's not found?


I guess qx{} is different on win32 ?
Take from example on my FBSD box which does not have 'otool'

% perl -e 'my $command = otool -L /bin/ls; qx{$command}; print \ndone.\n'

done.

I don't think it matters, but at rate, Apache::TestConfig::which() will 
better find ldd/otool.


I think the use of which() is better - what would have 
happened before is that a message:

   'ldd' is not recognized as an internal or external
command, operable program, or batch file.
would appear with Win32, which would be confusing.


Does win32 have an equivalent?


There are utilities on Win32 that give extra information
like this; I'll take a look later at them to see which
might be useful. But for now, I'd suggest doing it without
Win32, as you have it. Thanks.

--
best regards,
randy


Re: [PATCH] add ldd/otool output to bug reports

2005-09-09 Thread Randy Kobes

On Fri, 9 Sep 2005, Philip M. Gollucci wrote:


For both mp2bug and A-T

Question, why does A-T call it OSX and mp2 call it DARWIN ... should we sync 
one way or the other ?



Index: lib/ModPerl/Config.pm
===
--- lib/ModPerl/Config.pm   (revision 279736)
+++ lib/ModPerl/Config.pm   (working copy)
@@ -18,9 +18,11 @@

use Apache2::Build ();
use Apache::TestConfig ();
+use Apache::TestConfigData ();
use File::Spec ();

use constant WIN32 = Apache2::Build::WIN32;
+use constant DARWIN = Apache2::Build::WIN32;

sub as_string {
my $build = Apache2::Build-build_config;
@@ -53,8 +55,19 @@
$command = $httpd -V;
$cfg .= \n\n*** $command\n;
$cfg .= qx{$command};
-}
-else {
+
+# Add the dynamic link information
+# For now, assume its in our path... its there a better way ?
+if (DARWIN) {
+$command = otool $httpd;
+}
+else {
+$command = ldd $httpd;
+}
+
+$cfg .= \n*** $command\n;
+$cfg .= qx{$command};
+} else {
$cfg .= \n\n*** The httpd binary was not found\n;
}

Index: Apache-Test/lib/Apache/TestConfig.pm
===
--- Apache-Test/lib/Apache/TestConfig.pm(revision 279734)
+++ Apache-Test/lib/Apache/TestConfig.pm(working copy)
@@ -1837,7 +1837,19 @@
$command = $httpd -V;
$cfg .= \n*** $command\n;
$cfg .= qx{$command};
-}
+
+# Add the dynamic link information
+# For now, assume its in our path... its there a better way ?
+if (OSX) {
+$command = otool $httpd;
+}
+else {
+$command = ldd $httpd;
+}
+
+$cfg .= \n*** $command\n;
+$cfg .= qx{$command};
+}
else {
$cfg .= \n\n*** The httpd binary was not found\n;
}


If this point was reached, it would break Win32, plus
any other system which didn't have an ldd in the PATH.
Perhaps Apache::TestConfig::which() could be used to
see if an ldd() [or otool()] is present, and skip this
part if it's not found?

--
best regards,
randy


Re: Unable to run t/ssl tests.

2005-07-24 Thread Randy Kobes

On Fri, 22 Jul 2005, William A. Rowe, Jr. wrote:

Well now; rm -rf t , and svn up, gives me the original 
error attempting to create 'serial', a 'serial.old' 
lingers during the config phase.


Just as a couple of checks:
- does
   perl t/TEST -clean
clean out the t\conf\ssl\ca directory completely?
- is openssl writing things to the t\conf\ssl\ca\asf
directory?

--
best regards,
randy


Re: Unable to run t/ssl tests.

2005-07-23 Thread Randy Kobes

On Fri, 22 Jul 2005, William A. Rowe, Jr. wrote:


On Win32...

Using openssl 0.9.8, httpd 2.1-dev (current) and perl-framework
(current)... and I end up in a loop between running t/TEST -clean
and t/TEST -apxs g:/path/to/apxs with this error, every time;

The Subject's Distinguished Name is as follows
countryName   :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'California'
localityName  :PRINTABLE:'San Francisco'
organizationName  :PRINTABLE:'ASF'
organizationalUnitName:PRINTABLE:'httpd-test/dsa-des3-test'
commonName:PRINTABLE:'localhost'
emailAddress  :IA5STRING:'test-dev@httpd.apache.org'
Certificate is to be certified until Jul 22 21:36:28 2006 GMT (365 days)

Write out database with 1 new entries
unable to rename serial to serial.old
reason: File exists
[  error] configure() has failed:
system ca -policy policy_anything -in csr/server_des3_dsa.csr -out certs/server_
des3_dsa.crt -passin pass:httpd -config conf/server_des3_dsa.cnf -batch 
extensions comment failed (exit status=1) at 
G:\built\perl-framework\blib\lib/Apache/TestSSLCA.pm line 172.

[warning] forcing Apache::TestConfig object save
[warning] run 't/TEST -clean' to clean up before continuing

Does this look familiar to anyone?


That does seem vaguely familiar, but I just tried the 
perl-framework on Win32 with openssl-0.9.7g and 
Apache/2.0.54, and the certificates got generated OK, and 
all the t/ssl/ tests passed. I'll try upgrading openssl to 
see if there's any change.


--
best regards,
randy


Re: apxs calls on Win32

2004-12-08 Thread Randy Kobes
On Tue, 7 Dec 2004, Stas Bekman wrote:

 As soon as you see dup like this, think refactoring :) e.g. add
 untaint_path(), that does the work and call it:

local $ENV{PATH}) = untaint_path($ENV{PATH});

 Otherwise +1.

 And of course this wrapper should probably used in open_cmd too!

Here's a patch that does that:
==
Index: lib/Apache/TestConfig.pm
===
--- lib/Apache/TestConfig.pm(revision 56)
+++ lib/Apache/TestConfig.pm(working copy)
@@ -1045,12 +1045,8 @@
 my($self, $cmd) = @_;
 # untaint some %ENV fields
 local @ENV{ qw(IFS CDPATH ENV BASH_ENV) };
+local $ENV{PATH} = untaint_path($ENV{PATH});

-# Temporarily untaint PATH
-(local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
-# -T disallows relative directories in the PATH
-$ENV{PATH} = join ':', grep !/^\./, split /:/, $ENV{PATH};
-
 # launder for -T
 $cmd = $1 if $cmd =~ /(.*)/;

@@ -1663,7 +1659,8 @@
 return unless $self-{APXS};
 my $val;
 unless (exists $self-{_apxs}{$q}) {
-local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) };
+local @ENV{ qw(IFS CDPATH ENV BASH_ENV) };
+local $ENV{PATH} = untaint_path($ENV{PATH});
 my $devnull = devnull();
 my $apxs = shell_ready($self-{APXS});
 $val = qx($apxs -q $q 2$devnull);
@@ -1684,6 +1681,17 @@
 $self-{_apxs}{$q};
 }

+# Temporarily untaint PATH
+sub untaint_path {
+my $path = shift;
+($path) = ( $path =~ /(.*)/ );
+# win32 uses ';' for a path separator, assume others use ':'
+my $sep = WIN32 ? ';' : ':';
+# -T disallows relative directories in the PATH
+$path = join $sep, grep !/^\./, split /$sep/, $path;
+return $path;
+}
+
 sub pop_dir {
 my $dir = shift;

==
I tried committing it, but was denied access (I ensured I
did a co with https); perhaps some permissions need
adjusting (I did have commit access under cvs).

-- 
best regards,
randy


Re: apxs calls on Win32

2004-12-07 Thread Randy Kobes
On Sun, 5 Dec 2004, Stas Bekman wrote:

 Randy Kobes wrote:
  If apxs is installed on Win32, it is usually specified as a
  .bat file. In querying apxs in apxs() of Apache::TestConfig,
  however, Win32 needs both the path to cmd.exe (for running a
  .bat command) and to Perl (in order to run apxs.bat) in
  order to get something from
 $val = qx($apxs -q $q 2$devnull);
  This diff:

 If it's only win32 case then +1 but if other platforms may have the same
 problem, may be it's better to blindly launder $ENV{PATH} like we do in a
 few other places (in which case there will be no need for this change, as
 the right paths will be there already, correct?)

That's right - what about the following, copied from
the open_cmd sub of Apache::Build (for Win32, this needs
to use the ';' as the directory separator within $ENV{PATH},
rather than ':'.
==
Index: lib/Apache/TestConfig.pm
===
--- lib/Apache/TestConfig.pm(revision 110064)
+++ lib/Apache/TestConfig.pm(working copy)
@@ -1043,7 +1043,8 @@
 # Temporarily untaint PATH
 (local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
 # -T disallows relative directories in the PATH
-$ENV{PATH} = join ':', grep !/^\./, split /:/, $ENV{PATH};
+my $sep = WIN32 ? ';' : ':';
+$ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};

 # launder for -T
 $cmd = $1 if $cmd =~ /(.*)/;
@@ -1657,7 +1658,12 @@
 return unless $self-{APXS};
 my $val;
 unless (exists $self-{_apxs}{$q}) {
-local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) };
+local @ENV{ qw(IFS CDPATH ENV BASH_ENV) };
+# Temporarily untaint PATH
+(local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
+# -T disallows relative directories in the PATH
+my $sep = WIN32 ? ';' : ':';
+$ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};
 my $devnull = devnull();
 my $apxs = shell_ready($self-{APXS});
 $val = qx($apxs -q $q 2$devnull);

=

-- 
best regards,
randy


Re: apxs calls on Win32

2004-12-07 Thread Randy Kobes
On Tue, 7 Dec 2004, Stas Bekman wrote:

 Randy Kobes wrote:
[ ... ]
  ==
  Index: lib/Apache/TestConfig.pm
  ===
  --- lib/Apache/TestConfig.pm(revision 110064)
  +++ lib/Apache/TestConfig.pm(working copy)
  @@ -1043,7 +1043,8 @@
   # Temporarily untaint PATH
   (local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
   # -T disallows relative directories in the PATH
  -$ENV{PATH} = join ':', grep !/^\./, split /:/, $ENV{PATH};
  +my $sep = WIN32 ? ';' : ':';
  +$ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};
 
   # launder for -T
   $cmd = $1 if $cmd =~ /(.*)/;
  @@ -1657,7 +1658,12 @@
   return unless $self-{APXS};
   my $val;
   unless (exists $self-{_apxs}{$q}) {
  -local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) };
  +local @ENV{ qw(IFS CDPATH ENV BASH_ENV) };
  +# Temporarily untaint PATH
  +(local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
  +# -T disallows relative directories in the PATH
  +my $sep = WIN32 ? ';' : ':';
  +$ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};
   my $devnull = devnull();
   my $apxs = shell_ready($self-{APXS});
   $val = qx($apxs -q $q 2$devnull);

 As soon as you see dup like this, think refactoring :) e.g. add
 untaint_path(), that does the work and call it:

local $ENV{PATH}) = untaint_path($ENV{PATH});

 Otherwise +1.

 And of course this wrapper should probably used in open_cmd too!

OK, I'll do that - thanks!

 Also is there some File::Spec thingy that defines record
 separator in paths?

I looked through there - there's not one specifically
defined. There are special cases for various platforms:
   Mac = uses ',', but needs $ENV{Commands}, not $ENV{PATH}
   OS2 = uses ';', but also translates '\' to '/'
   VMS = uses a different $ENV variable
So some of these (eg, Mac and VMS) would require special
handling just to get at the equivalent of $ENV{PATH}.

Is leaving it just as is OK for the moment (using ';' for
WIN32, ':' otherwise), and if someone has problems with it,
we can fix it then?

Also, I haven't tried it yet, but just to make sure the
email messages go to the right place - can one do a commit
to Apache-Test from within modperl-2.0 svn (from within
the Apache-Test subdirectory)?

-- 
best regards,
randy


apxs calls on Win32

2004-12-05 Thread Randy Kobes
If apxs is installed on Win32, it is usually specified as a
.bat file. In querying apxs in apxs() of Apache::TestConfig,
however, Win32 needs both the path to cmd.exe (for running a
.bat command) and to Perl (in order to run apxs.bat) in
order to get something from
   $val = qx($apxs -q $q 2$devnull);
This diff:
==
Index: lib/Apache/TestConfig.pm
===
--- lib/Apache/TestConfig.pm(revision 109825)
+++ lib/Apache/TestConfig.pm(working copy)
@@ -1658,6 +1658,12 @@
 my $val;
 unless (exists $self-{_apxs}{$q}) {
 local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) };
+# need path to Perl and to cmd.exe on Win32
+if (WIN32) {
+$ENV{PATH} = sprintf(%s;%s,
+ dirname($ENV{COMSPEC}),
+ dirname($self-{vars}-{perl}));
+}
 my $devnull = devnull();
 my $apxs = shell_ready($self-{APXS});
 $val = qx($apxs -q $q 2$devnull);

=
populates $ENV{PATH} with the needed paths so that these
calls succeeed.

-- 
best regards,
randy


Re: httpd-test pages need to be updated to point to svn not cvs

2004-12-01 Thread Randy Kobes
On Tue, 30 Nov 2004, Stas Bekman wrote:

 http://httpd.apache.org/test/ is outdated (s/cvs/svn/)... thanks.

I just changed, via svn, the site/docs/test/index.html and
site/xdocs/test/index.xml pages to reflect this.
However, I just wanted to verify that, to get the
changes on the site itself, one must
   $ ssh cvs.apache.org
   $ cd /www/httpd.apache.org/test
   $ svn up
Thanks.

-- 
best regards,
randy


Re: Apache-Test module skeletons

2004-07-09 Thread Randy Kobes
On Fri, 9 Jul 2004, David Wheeler wrote:

 On Jul 9, 2004, at 1:09 PM, Stas Bekman wrote:

  There is no Apache.pm in mp2. You probably wanted to say:
 
   requires   = { 'mod_perl'   = 0,

 Right. In fact, it should probably be

  requires   = { 'mod_perl'   = '1.0',

 in the MP1 example, and

  requires   = { 'mod_perl'   = '1.99',

 in the MP2 example, yes?

Assuming this is for the benefit of CPAN/CPANPLUS to install
dependencies, doesn't this run into a couple of problems
that, in particular, Stas has raised:
 - CPAN doesn't yet support multiple module versions, only
the latest (which currently is mp1, as mp2 is marked as
a development version);
 - if someone had mp2 installed in an Apache2/ subdirectory,
CPAN/CPANPLUS wouldn't see it unless somehow 'use Apache2'
was invoked to adjust @INC;

What about requiring 'Apache' for mp1-related modules (since
'Apache' doesn't exist within mp2), and for mp2 modules,
requiring 'Apache2' (which doesn't exist within mp1)?

-- 
best regards,
randy


Re: Apache-Test module skeletons

2004-07-09 Thread Randy Kobes
On Fri, 9 Jul 2004, David Wheeler wrote:

 On Jul 9, 2004, at 1:45 PM, David Wheeler wrote:

  use 5.00503;
  use Apache::TestMB;
 
  Apache::TestMB-new(
  module_name= 'Apache::Test::Skeleton',
  license= 'perl',
  requires   = { 'mod_perl'   = = 1.0,  1.99,
},
  build_requires = { Test::More = 0,
},
  )-create_build_script;

 Oh, and FWIW, CPANPLUS should soon have the ability to check such a
 spec. Not sure that CPAN.pm ever will, though.

 Regards,

 David

But won't the CPAN indices (which are used by both CPAN.pm
and CPANPLUS.pm) still just recognize one version of
mod_perl.pm? Either the current one associated with mp1, or,
when mp2 is out of development, that associated with mp2
(assuming mod_perl.pm of mp2 has a higher version compared
to that of mp1). Or will CPANPLUS go beyond the CPAN
indices?

One (qualitatively similar) example is the GD module, for
which there's two major (incompatible) versions, 1 and 2.
Currently CPAN.pm reports GD as being version 2.12, and so
to install an earlier version 1.x, you have to tell CPAN.pm
explicitly which distribution you want to install.

-- 
best regards,
randy


Re: Error running apache test

2004-06-23 Thread Randy Kobes
On Tue, 22 Jun 2004, Abhishek Khandelwal wrote:

 I am getting another strange problem.
 I compile and install apache 2.0.49 for both fedora core 1 and red-hat
 linux.

 Everything seems okay, and installs properly.
 When I start httpd manually, it start running and when I do wget using
 http://localhost It works fine in both the machines.

 But, when I run the test provided my perl-test-framework. And try to run
 the server using t/TEST -httpd-start, the server starts perfectly on
 Fedora core but it dies immediately with exit code 255 on Red-hat
 machine.

 Looking at the error log, in t/log/error_log directory, I see the error:
 [error] (38)Function not implemented: Cannot create SSLMutex

In the ssl portion of your system httpd.conf, if the
SSLMutex directive is not given as
   SSLMutex default
does changing it to that help?

-- 
best regards,
randy kobes


Re: Error running apache test

2004-06-23 Thread Randy Kobes
On Tue, 22 Jun 2004, Abhishek Khandelwal wrote:

 Where exactly I put this?

 In the conf file generated by test, which is in t/conf/httpd.conf

 or even before compiling and building test, I change the original
 httpd.conf?

Try changing the original first - I think Apache-Test should
pick up this setting.

 Also, where exactly do I put this SSLMutex default?

When installing Apache, assuming a fresh install, this
directive probably appears somewhere in a sample ssl
configuration file.

-- 
best regards,
randy



Re: Error running apache test

2004-06-23 Thread Randy Kobes
On Tue, 22 Jun 2004, Abhishek Khandelwal wrote:

 I changed original ssl.conf
 to the SSLMutex default as shown below.

  #   Semaphore:
  #   Configure the path to the mutual exclusion semaphore the
  #   SSL engine uses internally for inter-process synchronization.
  #SSLMutex  file:/opt/oss/var/apache2/run/ssl_mutex
  SSLMutex default
 

 Then I rebuild the test and try to run the test.
 But still my error log shows SSLMutex not created error.

Does the above change to SSLMutex also appear in the
config file generated by Apache-Text beneath t/conf/?
If not, try doing a
   make clean
to clean out the old stuff, and then rebuilding.

-- 
best regards,
randy


Re: [NOMINATE] commit access for david wheeler

2004-06-23 Thread Randy Kobes
On Wed, 23 Jun 2004, Geoffrey Young wrote:

 hi all...

 as suggested by stas in a recent thread, it's about time we gave david
 commit access to the perl-framework - he has been actively helping with the
 project for as long as I can remember, from mac-specific stuff to lots of
 great work on the (often thin) docs.  and now he is working feverishly on
 integrating Module::Build support into Apache-Test, which is in itself a
 noble effort worthy of commit rights.

 so, here is my +1.

+1 - great idea!

-- 
best regards,
randy


Re: Apache::TestMB

2004-06-22 Thread Randy Kobes
On Mon, 21 Jun 2004, David Wheeler wrote:

[ ... ]
 * This isn't commented in the code I sent you, but I'll
 note it: I didn't implement cmodules or cmodules_clean
 actions. They appear simple, but they seem to depend on
 `make` rather than Module::Build.  Stas, are these just
 that simple? Should I expect that there'd be a Makefile in
 the cmodules directory? Or might it be
 Module::Build-based?  I guess the real question is, where
 does that Makefile come from?

Right now the Makefile is generated by methods within
Apache/TestConfigC.pm, which generally consists of calling
the apxs utility to compile the module (as well as
implementing a 'clean' target). In principle I think this
could be done via Module::Build with an appropriate
Build.PL and the corresponding changes within
Apache/TestConfigC.pm to call it.

-- 
best regards,
randy kobes


Re: [Module::Build] Re: Apache::TestMB

2004-06-22 Thread Randy Kobes
On Tue, 22 Jun 2004, David Wheeler wrote:

 On Jun 22, 2004, at 7:32 AM, Randy Kobes wrote:

  Right now the Makefile is generated by methods within
  Apache/TestConfigC.pm, which generally consists of calling
  the apxs utility to compile the module (as well as
  implementing a 'clean' target). In principle I think this
  could be done via Module::Build with an appropriate
  Build.PL and the corresponding changes within
  Apache/TestConfigC.pm to call it.

 Okay. I've put in some placeholder methods for this;
 Randy, can you add the necessary code?

Sure, it should be relatively straightforward ... But I'd
like to get, especially, Stas' opinion on this - adding this
in will necessarily introduce a few branches in the
Apache/TestConfigC.pm code related to, first of all, whether
to write a Makefile.PL or a Build.PL (and the ensuing
different syntax), and then secondly, how to use them.

-- 
best regards,
randy



Re: more on the perl-framework on windows

2004-03-27 Thread Randy Kobes
On Fri, 26 Mar 2004, Rodent of Unusual Size wrote:

 Geoffrey Young wrote:
 
  if apxs is being invoked but isn't available you may have a leftover
  TestConfigData.pm sitting around which you can safely remove.  or you didn't
  explicitly pass -httpd or something like that, which you ought to be able to
  do via t/TEST -conf -httpd /path/to/httpd as well.

 the problem is that there *is* an apxs.pl, but no development
 tools.  apxs came with the installation; the server wasn't built
 on this system.

 i have built the c modules and i'm trying to put them in place
 so the framework will use them without trying to frickin' build
 them.  however, it apparently wants to run apxs even though the
 module binaries exist.  what's triggering that?  why won't it
 use what's there without trying to create them itself?

If you put the compiled modules in place, and then run
'nmake test', is the problem that things get cleaned out
first (erasing the binaries), or that it just tries to
recompile things? On my system (which has VC++), 'nmake
test' first cleans things out, which erases previously built
modules.

-- 
best regards,
randy


Re: testing apache 1.3 on windows

2004-03-17 Thread Randy Kobes
On Tue, 16 Mar 2004, Rodent of Unusual Size wrote:

 and a 'perl t\TEST -config' blowes up trying to build mod_random_chunk
 (unresolved symbols _random and _srandom).

I couldn't find the _random or _srandom symbols in a
system library, but changing these to rand() and srand()
in mod_random_chunk.c seems to work OK.

-- 
best regards,
randy


Re: testing apache 1.3 on windows

2004-03-17 Thread Randy Kobes
On Wed, 17 Mar 2004, Rodent of Unusual Size wrote:

 Randy Kobes wrote:
 
  I couldn't find the _random or _srandom symbols in a
  system library, but changing these to rand() and srand()
  in mod_random_chunk.c seems to work OK.

 mm.  i've ifdef'd those for WIN32 and will commit it; if anyone
 cares to verify that s/rand() are universally suitable replacements
 for s/random(), the ifdef can go.

 thanks, randy!

I found this in the rand man page on Linux:

The versions of rand() and srand() in the Linux C Library
use the same random number generator as random() and
srandom(), so the lower-order bits should be as random as
the higher-order bits. However, on older rand()
implementations, the lower-order bits are much less random
than the higher-order bits.

So it looks like they're not equivalent on older
implementations.

-- 
best regards,
randy


Re: testing apache 1.3 on windows

2004-03-16 Thread Randy Kobes
On Tue, 16 Mar 2004, Rodent of Unusual Size wrote:

 Randy Kobes wrote:
 
  There is an alpha port of apxs for Win32 for Apache/2.0;
  grab the script
 http://perl.apache.org/dist/win32-bin/install_apxs
  and run it, which will fetch, configure, and install
  it on your system.

 beauty.  except a) i had to add 'use File::Spec;' to Configure.pl,

Sorry about that - I'll fix that.

 and a 'perl t\TEST -config' blowes up trying to build mod_random_chunk
 (unresolved symbols _random and _srandom).

I noticed that too - I guess it needs linking against
some system library; I'll try to find out which one.

 but it's a whole lot better than before!

 do things of the form 'open($fh, link foo |);' not work well
 on windows?  because i'm wondering if the giant .bat file could
 be replaced with a perl script that used that construct to do
 the linking..

Things like that do work in general, and that's a good idea.
I was going to clean the script up (in it's present form it
was a hacked port from the unix version), and I'll look at
doing something like that. Thanks.

-- 
best regards,
randy


Re: testing apache 1.3 on windows

2004-03-15 Thread Randy Kobes
On Mon, 15 Mar 2004, Rodent of Unusual Size wrote:

 also, there apparently is no longer an apxs.pl for 2.0 windows --
 so what's the magic Makefile.PL argument to let the test modules
 be built?

There is an alpha port of apxs for Win32 for Apache/2.0;
grab the script
   http://perl.apache.org/dist/win32-bin/install_apxs
and run it, which will fetch, configure, and install
it on your system.

 in case there was any question, i hate development on windows,
 i hate libtool, and i think i've discovered a special subtype
 of 'male pattern baldness' -- call it 'hacker pattern baldness,'
 comes from pulling your hair out.

:)

-- 
best regards,
randy kobes


Re: testing apache 1.3 on windows

2004-03-15 Thread Randy Kobes
On Mon, 15 Mar 2004, William A. Rowe, Jr. wrote:

 At 02:51 PM 3/15/2004, you wrote:
 On Mon, 15 Mar 2004, Rodent of Unusual Size wrote:
 
  also, there apparently is no longer an apxs.pl for 2.0 windows --
  so what's the magic Makefile.PL argument to let the test modules
  be built?
 
 There is an alpha port of apxs for Win32 for Apache/2.0;
 grab the script
http://perl.apache.org/dist/win32-bin/install_apxs
 and run it, which will fetch, configure, and install
 it on your system.

 Randy ... ready to make a go of integrating into httpd-2.0 build?

 Bill

Sure, Bill - I'd be happy to ... Right now it seems to work
OK for external modules (although some cleanup is
warranted), but it would need work to be useable within
httpd-2.0 itself.

-- 
best regards,
randy


Re: Sticky preferences in Windows

2004-03-13 Thread Randy Kobes
On Sat, 13 Mar 2004, William McKee wrote:

 Hi Stas,

 I'm running into the sticky preferences problem now as well. I decided
 the quickest way to get my tests running in the Windows environment
 would be to install mod_perl. The install notes suggested that the path
 be c:\apache2 which means the default path of c:\program files\apache2
 is no good. I uninstalled apache and reinstalled into c:\. No problems.

 However, now that I'm trying to rebuild my module to run my tests, the
 TestConfigParse.pm module is still finding the old path. I've searched
 my drive manually and with the built-in search tools as well as in the
 registry but cannot figure out where A::T has squirelled away this
 setting. Could you give me a pointer? This is WinXP if that makes any
 difference.

I don't think being on Windows makes a difference in this
particular case - I think where it gets the info from is
   C:\Perl\site\lib\Apache\BuildConfig.pm
which is generated by Apache::Build.

-- 
best regards,
randy kobes


Re: in-place edit in TestRun.pm

2004-03-11 Thread Randy Kobes
On Wed, 10 Mar 2004, Stas Bekman wrote:

 Randy Kobes wrote:
  Hi,
 A recent change in Apache-Test/lib/Apache/TestRun.pm
  involves an in-place edit, at around line 765:
[ .. ]
  Unfortunately, Win32 can't do such in-place edits:
[ ... ]
 why not doing:

 local $^I = .bak; # windows can't do inplace edit
 local @ARGV = $config_file;
  while(  ) {
  s/old/new/;
  print;
  }
  unlink $config_file.bak;

 much simpler.

Very true ... I'll make that change - thanks!

-- 
best regards,
randy


Re: time for a new A-T release?

2004-02-20 Thread Randy Kobes
On Thu, 19 Feb 2004, Stas Bekman wrote:

 I'd like to get a new A-T out of the door. There were a *lot* of tweaks and
 new features added since the last release. It'd be nice to see whether users
 are happy with them, before we get a new mp2 release out.

Hi Stas,
  Regarding that patch we just discussed about fixing
directories with spaces on Win32, I'm away for about a
week, but will work on it when I get back.

-- 
best regards,
randy


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-19 Thread Randy Kobes
On Tue, 17 Feb 2004, Stas Bekman wrote:

 Randy Kobes wrote:
  On Tue, 3 Feb 2004, Christopher H. Laco wrote:
 
 
 I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
 build 630 and am trying to make test scripts for a pile of
 pages in a package I'm workin on.
 
 If I pass in an -httpd path that has spaces in the path,
 it fails.
 
 use ExtUtils::MakeMaker;
 use Apache::TestMM qw(test clean);
 
 push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
 
  [ .. ]
 
 Is this an Apache::Test problem, or possible an nmake issue?
 
 
  This case should be handled I'd think on the Apache::Test
  side. Does
 my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
 $exe = Win32::GetShortPathName($exe);
 push @ARGV, '-httpd', $exe;
  work? If so, I'll look at seeing where this could be added
  within Apache::Test.

 This patch should probably take care of it. It's untested.

Thanks, Stas - it looks good (applied manually, and
informally tested, as I don't have Perl in a place with
spaces in the directory name). A couple of comments below:

 Index: lib/Apache/TestConfig.pm
 ===
 RCS file:
 /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
 retrieving revision 1.205
 diff -u -r1.205 TestConfig.pm
 --- lib/Apache/TestConfig.pm  18 Feb 2004 00:30:57 -  1.205
 +++ lib/Apache/TestConfig.pm  18 Feb 2004 04:40:21 -
 @@ -67,6 +67,16 @@
  (map { $_ . '_module_name', $_ module name} qw(cgi ssl thread access
 auth)),
   );

 +my %filepath_conf_opts = map { $_ = 1 }
 +qw(top_dir t_dir t_conf t_logs t_conf_file src_dir serverroot
 +   documentroot bindir sbindir httpd apxs httpd_conf perlpod sslca
 +   libmodperl);
 +
 +sub conf_opt_is_a_filepath {
 +my $opt = shift;
 +$opt  exists $filepath_conf_opts{$opt};
 +}
 +
   sub usage {
   for my $hash (\%Usage) {
   for (sort keys %$hash){
 Index: lib/Apache/TestRun.pm
 ===
 RCS file: 
 /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
 retrieving revision 1.149
 diff -u -r1.149 TestRun.pm
 --- lib/Apache/TestRun.pm 18 Feb 2004 04:09:08 -  1.149
 +++ lib/Apache/TestRun.pm 18 Feb 2004 04:40:21 -
 @@ -238,6 +238,15 @@
   push @argv, $val;
   }

 +# fixup the filepath options on win32 (spaces, short names, etc.)
 +if (Apache::TestConfig::WIN32) {
 +require Win32::GetShortPathName;
   

The require isn't required, as Win32::GetShortPathName is
a core function.

 +for my $key (keys %conf_opts) {
 +next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
 +$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
  ^^^
I think if one calls Win32::GetShortPathName
on something that has no short path name, then
nothing is returned. For example,
==
use strict;
use warnings;
for ('C:\Program Files', 'C:\ProgramFiles') {
my $x = Win32::GetShortPathName($_);
if ($x) {
print $_ has a short name of $x\n;
}
else {
print $_ has no short name\n;
}
}
===
prints
===
C:\Program Files has a short name of C:\PROGRA~1
C:\ProgramFiles has no short name


Thus, the above should probably include

 +for my $key (keys %conf_opts) {
 +next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
 + +  next unless $conf_opts{$key} =~ / /;
 +$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});

-- 
best regards,
randy


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-03 Thread Randy Kobes
On Tue, 3 Feb 2004, Christopher H. Laco wrote:

 I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
 build 630 and am trying to make test scripts for a pile of
 pages in a package I'm workin on.

 If I pass in an -httpd path that has spaces in the path,
 it fails.

 use ExtUtils::MakeMaker;
 use Apache::TestMM qw(test clean);

 push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
[ .. ]
 Is this an Apache::Test problem, or possible an nmake issue?

This case should be handled I'd think on the Apache::Test
side. Does
   my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
   $exe = Win32::GetShortPathName($exe);
   push @ARGV, '-httpd', $exe;
work? If so, I'll look at seeing where this could be added
within Apache::Test.

-- 
best regards,
randy kobes


Re: sticky preferences in Apache-Test

2004-01-18 Thread Randy Kobes
On Sat, 17 Jan 2004, Stas Bekman wrote:

 Randy Kobes wrote:
[ ... ]
  I don't have an ~/.apache-test/, and yes, using the perl
  with the CPAN A-T installed to build the cvs A-T is fine.
  Where I run into problems in not seeing the configuration
  dialogue is using the perl with the cvs A-T installed in
  building the cvs A-T, even if I delete the installed
  TestConfigData.pm.

 That's the correct behavior at the moment, because you
 have mp2 installed. If mp2 is found it has
 Apache/BuildConfig.pm which tells A-T where httpd is. And
 A-T will save that value in the global
 Apache/TestConfigData.pm if it can write to it, or in
 ~/.apache-test/.'

 Of course we can change that behavior, but I think it's
 cool as mp2 users will never see that interactive dialog.

That is neat - I was just wondering where A-T was finding
this information from. I'd leave that as is - thanks.

-- 
best regards,
randy


Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestConfig.pm TestRun.pm

2004-01-13 Thread Randy Kobes
On Sun, 11 Jan 2004, Stas Bekman wrote:

 Randy Kobes wrote:
[ ... ]
  my Apache is D:\Apache2\bin\Apache.exe, which would
  get reported as d:\apache2\bin\apache.exe. If there isn't
  an easy way to preserve the case yet still remove such
  duplicates, I'll do that - it's not a big deal.

 Randy, you are the expert on win32 ;) I have no idea what
 method to use to get a consistent case on case-insenstive
 file systems. Really I think it's time to extend
 File::Spec to handle that and not solve this problem every
 time we need to read a filename.

This is an annoyance, for sure ... However, in a sense we
(Apache-Test) have some control over this problem. In
another section we're looking for 'Apache', and then in
TestRun.pm we also look for 'apache'. So both get reported
as being present. However, on Win32, looking for 'apache' is
somewhat misleading, as the default installation (either
binary or source) results in 'Apache'.  What about the
following:

Index: lib/Apache/TestRun.pm
===
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.138
diff -u -r1.138 TestRun.pm
--- lib/Apache/TestRun.pm   11 Jan 2004 15:25:12 -  1.138
+++ lib/Apache/TestRun.pm   13 Jan 2004 14:36:41 -
@@ -1343,11 +1343,13 @@

 {
 my %choices = ();
+my @tries = Apache::TestConfig::WIN32 ?
+qw(Apache httpd Apache2 httpd2) :
+qw(apache httpd apache2 httpd2);
 for (grep defined $_,
  map({ catfile $vars-{$_}, $vars-{target} } qw(sbindir bindir)),
  $test_config-default_httpd, which($vars-{target}),
- $ENV{APACHE},  which('apache'),  which('httpd'),
- $ENV{APACHE2}, which('apache2'), which('httpd2')) {
+ $ENV{APACHE},  $ENV{APACHE2}, map {which($_)} @tries) {
 $choices{$_}++ if -e $_  -x _;
 }
 my $optional = 0;


-- 
best regards,
randy


Re: sticky preferences in Apache-Test

2004-01-13 Thread Randy Kobes
On Tue, 13 Jan 2004, Stas Bekman wrote:

 Geoffrey Young wrote:
[ ... ]
  what I do know, however, is that my nightly builds start
  with 2.1 then move to 2.0, issuing 'make realclean'
  between each.  for the past few nights, the 2.0 tests
  don't run because it's loading TestConfigData.pm from my
  global @INC.  at that point, TestConfigData.pm is from
  the last install, which is a 2.1 install.
 
  this seems wrong to me - I have no remedy short of removing
  TestDataConfig.pm between builds - at I think it would affect users that
  upgrade as well.

 Are you sure that your not problem is elsewhere? I see
 this issue too though with non-mp2 build, just didn't have
 a chance to work on it yet.

 How do you build your mp2? It should ignore the custom
 config already, there must be some glitch.

I haven't worked through this yet, but I find a similar
problem ... I have two Perls, both of which have mp2
installed, but one has the CPAN Apache-Test and the other
has the cvs Apache-Test installed. In building the
cvs Apache-Test, I get the first-time dialogue with
the perl with the CPAN Apache-Test installed, but don't
get the dialogue with the perl with the cvs Apache-Test
installed. I'm a bit baffled as to why, as this occurs
even if I delete the system TestConfigData.pm.

-- 
best regards,
randy


Re: sticky preferences in Apache-Test

2004-01-13 Thread Randy Kobes
On Tue, 13 Jan 2004, Stas Bekman wrote:

 Randy Kobes wrote:
 
  I haven't worked through this yet, but I find a similar
  problem ... I have two Perls, both of which have mp2
  installed, but one has the CPAN Apache-Test and the other
  has the cvs Apache-Test installed. In building the
  cvs Apache-Test, I get the first-time dialogue with
  the perl with the CPAN Apache-Test installed, but don't
  get the dialogue with the perl with the cvs Apache-Test
  installed. I'm a bit baffled as to why, as this occurs
  even if I delete the system TestConfigData.pm.

 But CPAN A-T doesn't have this feature, so you must have
 installed mp2-cvs on top of it. Also check that you don't
 have ~/.apache-test/.

I don't have an ~/.apache-test/, and yes, using the perl
with the CPAN A-T installed to build the cvs A-T is fine.
Where I run into problems in not seeing the configuration
dialogue is using the perl with the cvs A-T installed in
building the cvs A-T, even if I delete the installed
TestConfigData.pm.

-- 
best regards,
randy


Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestConfig.pm TestRun.pm

2004-01-11 Thread Randy Kobes
On Sat, 10 Jan 2004, Stas Bekman wrote:

 [EMAIL PROTECTED] wrote:
  randyk  2004/01/10 14:07:17
 
Modified:perl-framework/Apache-Test/lib/Apache TestConfig.pm
  TestRun.pm
Log:
On Win32, multiple options for Apache.exe can be returned which differ
only by the case of the .exe extension or by the directory separator.
These changes bring things into line with what is returned from which().
 [...]
1.136 +2 -2  
  httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm
 
Index: TestRun.pm
===
RCS file: 
  /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -r1.135 -r1.136
--- TestRun.pm8 Jan 2004 04:54:06 -   1.135
+++ TestRun.pm10 Jan 2004 22:07:17 -  1.136
@@ -1346,8 +1346,8 @@
 for (grep defined $_,
  map({ catfile $vars-{$_}, $vars-{target} } qw(sbindir 
  bindir)),
  $test_config-default_httpd, which($vars-{target}),
- $ENV{APACHE},  which('apache'),  which('httpd'),
- $ENV{APACHE2}, which('apache2'), which('httpd2')) {
+ $ENV{APACHE},  which('Apache'),  which('httpd'),
+ $ENV{APACHE2}, which('Apache2'), which('httpd2')) {
 $choices{$_}++ if -e $_  -x _;
 }
 my $optional = 0;

 yes, but we need which('apache') too for unix. so please:

- $ENV{APACHE},  which('apache'),  which('httpd'),
- $ENV{APACHE2}, which('apache2'), which('httpd2')) {
+ $ENV{APACHE},  which('apache'),  which('Apache'),
 which('httpd'),
+ $ENV{APACHE2}, which('apache2'), which('Apache2'),
 which('httpd2')) {

Sorry about that - I'll revert that change (I just tried,
but got an error message about insufficient space left on a
device). Actually, looking for both 'apache' and 'Apache'
leads back to the same problem on Win32 that, when the list
of Apache binaries is reported, both 'apache' and 'Apache'
are listed (with the same paths), so a different approach is
needed.

-- 
best regards,
randy


Re: rerunning original_command

2004-01-11 Thread Randy Kobes
On Sat, 10 Jan 2004, Stas Bekman wrote:

 Randy Kobes wrote:
  Hi,
 With the current Apache-Test cvs, after the initial
  dialogue asking which Apache binary you want is completed,
  the original command is rerun with the desired configuration
  options. However, this original command is reproduced as
  't/TEST ', and on Win32 't/TEST' isn't recognized as a
  command. This diff
  ===
  Index: lib/Apache/TestRun.pm
  ===
  RCS file: 
  /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
  retrieving revision 1.136
  diff -u -r1.136 TestRun.pm
  --- lib/Apache/TestRun.pm   10 Jan 2004 22:07:17 -  1.136
  +++ lib/Apache/TestRun.pm   10 Jan 2004 22:26:57 -
  @@ -630,7 +630,7 @@
 
   # reconstruct argv, preserve multiwords args, eg 'PerlTrace all'
   my $argv = join  , map { /^-/ ? $_ : qq['$_'] } @ARGV;
  -$original_command = $0 $argv;
  +$original_command = $^X $0 $argv;
   $orig_cwd = Cwd::cwd();
   $self-set_ulimit;
   $self-set_env; #make sure these are always set
  =
  prepends the Perl binary to this command, which can then
  be run.
 
  I'm wondering, though - might there be circumstances where
  $original_command contains the Perl binary already?
 

 I think it's pretty safe:

 % perl -le 'print $0'
 -e

 'perl' is not in $0. Is it different on windows?

No, it's the same - I just wanted to be sure that the
Perl binary didn't creep in from somewhere else. Thanks.

-- 
best regards,
randy


Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestConfig.pm TestRun.pm

2004-01-11 Thread Randy Kobes
On Sun, 11 Jan 2004, Stas Bekman wrote:

 Randy Kobes wrote:
[ .. ]
  Sorry about that - I'll revert that change (I just tried,
  but got an error message about insufficient space left on a
  device). Actually, looking for both 'apache' and 'Apache'
  leads back to the same problem on Win32 that, when the list
  of Apache binaries is reported, both 'apache' and 'Apache'
  are listed (with the same paths), so a different approach is
  needed.

 So check that the path and lowercased filename match and
 exclude those on win32?

Yes, that would work, but it looks a bit funny - for
example, my Apache is D:\Apache2\bin\Apache.exe, which would
get reported as d:\apache2\bin\apache.exe. If there isn't
an easy way to preserve the case yet still remove such
duplicates, I'll do that - it's not a big deal.

-- 
best regards,
randy


Re: win32_fetch_apxs in Apache-Test?

2004-01-11 Thread Randy Kobes
On Sun, 11 Jan 2004, Stas Bekman wrote:

 Yes, yes, what I was saying is that how the interactive
 config should know whether it's Apache 1 or Apache 2 that
 the user is after? or did you want to suggest it after
 user has specified the value for httpd and then if you
 figure out that it's for Apache2 and there is no apxs,
 you'd suggest to install it? I think that sounds like a
 working solution.

Yes, the latter is what I was thinking - I'll make up
something for that and pass it along. Thanks.

-- 
best regards,
randy


rerunning original_command

2004-01-10 Thread Randy Kobes
Hi,
   With the current Apache-Test cvs, after the initial
dialogue asking which Apache binary you want is completed,
the original command is rerun with the desired configuration
options. However, this original command is reproduced as
't/TEST ', and on Win32 't/TEST' isn't recognized as a
command. This diff
===
Index: lib/Apache/TestRun.pm
===
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.136
diff -u -r1.136 TestRun.pm
--- lib/Apache/TestRun.pm   10 Jan 2004 22:07:17 -  1.136
+++ lib/Apache/TestRun.pm   10 Jan 2004 22:26:57 -
@@ -630,7 +630,7 @@

 # reconstruct argv, preserve multiwords args, eg 'PerlTrace all'
 my $argv = join  , map { /^-/ ? $_ : qq['$_'] } @ARGV;
-$original_command = $0 $argv;
+$original_command = $^X $0 $argv;
 $orig_cwd = Cwd::cwd();
 $self-set_ulimit;
 $self-set_env; #make sure these are always set
=
prepends the Perl binary to this command, which can then
be run.

I'm wondering, though - might there be circumstances where
$original_command contains the Perl binary already?

-- 
best regards,
randy


win32_fetch_apxs in Apache-Test?

2004-01-10 Thread Randy Kobes
Hi,
The current Apache-Test cvs, as well as looking for an
Apache binary, will also search for apxs, which doesn't come
with Apache-2 on Win32. Within the mod_perl 2 distribution
Makefile.PL will offer to run a script on Win32 to fetch and
install an apxs - might it be an idea to do the same for
Apache-Test, or perhaps within the perl-framework
Makefile.PL?

-- 
best regards,
randy


Re: sticky preferences in Apache-Test

2003-09-25 Thread Randy Kobes
On Wed, 24 Sep 2003, Randy Kobes wrote:

 Hi,
 Below is a modified diff to allow for preferences
 to be saved to an Apache::TestConfigData for later use
 within Apache::Test. In this version, a user can create
 a $HOME/.apache-test/Apache/TestConfigData.pm to specify
 the preferences; this will be used, if it exists, before
 a system Apache::TestConfigData. The diff is applied
 against the cvs Apache-Test sources; as well, an
 empty Apache-Test/lib/Apache/TestConfigData.pm file
 should be created:
 ===
 package Apache::TestConfigData;
 use strict;
 use warnings;
 use vars qw($vars);

 $vars = {

 };
 1;

 =head1 NAME

 Apache::TestConfigData - Configuration file for Apache::Test

 =cut
 
 The intent of how this is supposed to work is in the pod
 of Apache::TestRun.

Sorry - I forgot to include the diff to Apache::TestUtil -
a complete diff appears below.

Index: lib/Apache/TestRun.pm
===
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.114
diff -u -r1.114 TestRun.pm
--- lib/Apache/TestRun.pm   12 Sep 2003 02:21:32 -  1.114
+++ lib/Apache/TestRun.pm   25 Sep 2003 06:25:56 -
@@ -10,20 +10,24 @@
 use Apache::TestRequest ();
 use Apache::TestHarness ();
 use Apache::TestTrace;
+use Apache::TestUtil qw(expand_path);

+use Cwd;
 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 qw(dirname);
 use Config;

 use constant STARTUP_TIMEOUT = 300; # secs (good for extreme debug cases)
+
 use subs qw(exit_shell exit_perl);

 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,9 +59,22 @@
'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),
 );

+# variables stored in $Apache::TestConfigData::vars
+my @data_vars = qw(httpd port user group apxs);
+# mapping from $Apache::TestConfigData::vars to $ENV settings
+my %vars_to_env = (httpd = 'APACHE',
+   user  = 'APACHE_USER',
+   group = 'APACHE_GROUP',
+   apxs  = 'APXS',
+   port  = 'APACHE_PORT',
+   );
+my $IN_APACHE_TEST = in_apache_test();
+my $CONFIG_DATA = config_data();
+
 sub fixup {
 #make sure we use an absolute path to perl
 #else Test::Harness uses the perl in our PATH
@@ -407,6 +424,8 @@
 $test_config-cmodules_configure;
 $test_config-generate_httpd_conf;
 $test_config-save;
+$self-write_config() if
+($IN_APACHE_TEST or $self-{opts}-{save});
 }

 sub try_exit_opts {
@@ -509,6 +528,10 @@

 sub new_test_config {
 my $self = shift;
+for (@data_vars) {
+next unless $Apache::TestConfigData::vars-{$_};
+$self-{conf_opts}-{$_} ||= $Apache::TestConfigData::vars-{$_};
+}
 Apache::TestConfig-new($self-{conf_opts});
 }

@@ -953,6 +976,102 @@
 CORE::exit $_[0];
 }

+# Are we building things within Apache-Test?
+sub in_apache_test {
+my $cwd =  expand_path(cwd);
+return ($cwd =~ m{Apache-Test}) ? 1 : 0;
+}
+
+# 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 $config;
+my $file = 'TestConfigData.pm';
+# XXX $ENV{HOME} isn't propagated in mod_perl
+unshift @INC, catdir($ENV{HOME}, '.apache-test') if $ENV{HOME};
+for (@INC) {
+my $candidate = catfile($_, 'Apache', $file);
+if (-e $candidate) {
+eval {require $candidate};
+next if $@;
+if (config_has_data()) {
+$config = $candidate;
+last;
+}
+}
+}
+unless ($IN_APACHE_TEST) {
+die 'Could not find a valid Apache::TestConfigData'
+unless config_has_data();
+}
+shift @INC if $ENV{HOME};
+# preferentially use environment variables
+for (@data_vars) {
+next unless my $value = $ENV{$vars_to_env{$_}};
+$Apache::TestConfigData

sticky preferences in Apache-Test

2003-09-24 Thread Randy Kobes
Hi,
Below is a modified diff to allow for preferences
to be saved to an Apache::TestConfigData for later use
within Apache::Test. In this version, a user can create
a $HOME/.apache-test/Apache/TestConfigData.pm to specify
the preferences; this will be used, if it exists, before
a system Apache::TestConfigData. The diff is applied
against the cvs Apache-Test sources; as well, an
empty Apache-Test/lib/Apache/TestConfigData.pm file
should be created:
===
package Apache::TestConfigData;
use strict;
use warnings;
use vars qw($vars);

$vars = {

};
1;

=head1 NAME

Apache::TestConfigData - Configuration file for Apache::Test

=cut

The intent of how this is supposed to work is in the pod
of Apache::TestRun.
===
Index: lib/Apache/TestRun.pm
===
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.114
diff -u -r1.114 TestRun.pm
--- lib/Apache/TestRun.pm   12 Sep 2003 02:21:32 -  1.114
+++ lib/Apache/TestRun.pm   24 Sep 2003 21:52:08 -
@@ -10,20 +10,24 @@
 use Apache::TestRequest ();
 use Apache::TestHarness ();
 use Apache::TestTrace;
+use Apache::TestUtil qw(expand_path);

+use Cwd;
 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 qw(dirname);
 use Config;

 use constant STARTUP_TIMEOUT = 300; # secs (good for extreme debug cases)
+
 use subs qw(exit_shell exit_perl);

 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,9 +59,22 @@
'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),
 );

+# variables stored in $Apache::TestConfigData::vars
+my @data_vars = qw(httpd port user group apxs);
+# mapping from $Apache::TestConfigData::vars to $ENV settings
+my %vars_to_env = (httpd = 'APACHE',
+   user  = 'APACHE_USER',
+   group = 'APACHE_GROUP',
+   apxs  = 'APXS',
+   port  = 'APACHE_PORT',
+   );
+my $IN_APACHE_TEST = in_apache_test();
+my $CONFIG_DATA = config_data();
+
 sub fixup {
 #make sure we use an absolute path to perl
 #else Test::Harness uses the perl in our PATH
@@ -407,6 +424,8 @@
 $test_config-cmodules_configure;
 $test_config-generate_httpd_conf;
 $test_config-save;
+$self-write_config() if
+($IN_APACHE_TEST or $self-{opts}-{save});
 }

 sub try_exit_opts {
@@ -509,6 +528,10 @@

 sub new_test_config {
 my $self = shift;
+for (@data_vars) {
+next unless $Apache::TestConfigData::vars-{$_};
+$self-{conf_opts}-{$_} ||= $Apache::TestConfigData::vars-{$_};
+}
 Apache::TestConfig-new($self-{conf_opts});
 }

@@ -953,6 +976,102 @@
 CORE::exit $_[0];
 }

+# Are we building things within Apache-Test?
+sub in_apache_test {
+my $cwd =  expand_path(cwd);
+return ($cwd =~ m{Apache-Test}) ? 1 : 0;
+}
+
+# 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 $config;
+my $file = 'TestConfigData.pm';
+# XXX $ENV{HOME} isn't propagated in mod_perl
+unshift @INC, catdir($ENV{HOME}, '.apache-test') if $ENV{HOME};
+for (@INC) {
+my $candidate = catfile($_, 'Apache', $file);
+if (-e $candidate) {
+eval {require $candidate};
+next if $@;
+if (config_has_data()) {
+$config = $candidate;
+last;
+}
+}
+}
+unless ($IN_APACHE_TEST) {
+die 'Could not find a valid Apache::TestConfigData'
+unless config_has_data();
+}
+shift @INC if $ENV{HOME};
+# preferentially use environment variables
+for (@data_vars) {
+next unless my $value = $ENV{$vars_to_env{$_}};
+$Apache::TestConfigData::vars-{$_} = $value;
+}
+
+return $config;
+}
+
+sub config_has_data {
+return ($Apache::TestConfigData::vars and
+

Re: need help to add per-user config to Apache::Test

2003-09-06 Thread Randy Kobes
On Sat, 6 Sep 2003, Stas Bekman wrote:

 Randy Kobes wrote:
  On Thu, 4 Sep 2003, Stas Bekman wrote:
 
 
 In the effort to remove some of the Win32 noise, I was
 thinking that we can write a generic function which gets a
 path as an argument and figures out internally if it needs
 to keep the argument as passed or mangle it. So it'll do
 something like:
 
  my $cwd =  Apache::TestUtil::path(cwd);
 
 probably need a more intuitive name for this function.
 
 
  That'd be nice - a version that does this appears below.
  I named it win32_long_path - it'll just return what was
  passed into it if not on Win32.

 But my idea was to eliminate any os-specific words win32. I think it should
 just be long_path... Think of it as File::Spec function.

OK, I'll do that. I put in the win32_ to indicate that it'll
do something for Win32, and otherwise just return what was
passed in.

 I'm still not quite happy about the naming of the function, what exactly
 GetLongPathName($file) does?
 can this be done using some File::Spec function?

I haven't found an equivalent one in File::Spec ... The
problem here is that cwd (or any file/directory name) on
Win32 has two representations - a long path name (that can
include spaces) and a short path name, limited to 6
characters (this is a holdout from early days), plus 3 if an
extension is present.  Here we want to match cwd to
/Apache-Test/, but cwd may return the short path name (eg,
Apache~1.0), depending on if, for example, you have
different Apache-Test* directories at the same level. So
GetLongPathName can be used to get the full long path name.

The thing with naming it, eg, just long_path, is that
Unix users (the majority) wouldn't know what it does.

  +require File::Spec;

  +my $candidate = File::Spec-catfile($_, 'Apache', $file);

 we import catfile in all other Apache::Test files, can do
 that here as well...  will make code simpler

Good point - thanks.


  +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 $@;
  +}

 Hmm, I thought we agreed that eval {require $sys_config} will always succeed,
 since that file is always available. so this code should be needed:

 + die 'Could not find a suitable Apache::TestConfigData'
 +unless defined CONFIG_DATA;

I was thinking here if someone, after installation, had
mis-edited Apache::TestConfigData, either the system one or
one found in some path in @INC being added thru, eg, use
lib). But this might be overkill - not worrying about this
at this time will simplify things here.

 One more problem is TestRun.pm's layout: subs should go
 after the declarations (uses/constants/etc). use 'use
 subs' if you need to predeclare them.

OK - thanks.

 Another issue, is in_apache_test. Since a user may get it
 with modperl-2.0 or separately it should return true in
 either case.

I forgot about that - thanks.

  +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;

 it's easier to parse when written as:

 my $file = IN_APACHE_TEST
  ? catfile($vars-{top_dir}, CONFIG_DATA)
  : CONFIG_DATA;

  +my $pkg =  EOC;
  +package Apache::TestConfigData;

 better have it strict, to avoid misterious errors (same in the pod below)

 use strict;
 use warnings;

 use vars (\$Apache::TestConfigData);

Thanks - I'll add that.

I was also thinking about the problem of $ENV{HOME} not
being available in mod_perl. As Apache::TestConfigData is
being loaded in order to configure things, shouldn't
this not be a problem, because at this point one isn't
yet in a mod_perl environment?

-- 
best regards,
randy


Re: need help to add per-user config to Apache::Test

2003-09-05 Thread Randy Kobes
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 -  1.113
+++ lib/Apache/TestRun.pm   4 Sep 2003 21:02:44 -
@@ -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

Re: need help to add per-user config to Apache::Test

2003-09-03 Thread Randy Kobes
On Tue, 2 Sep 2003, Stas Bekman wrote:

 Randy Kobes wrote:
[ .. ]
 Very good, a few more comments following

  ===
  Index: TestRun.pm
 [...]
   +$self-write_config() if

 probably better to do that right after $self-configure is
 completed, as the very last thing in:
 Apache::TestRun::configure

OK - this is done in the diff at the end. For this, to
override a setting within Apache::TestConfigData from some
external package, one has to do
   t/TEST -config -save -httpd /usr/local/httpd/bin/httpd

 [...]
  +use Symbol qw(gensym);
 [...]
  +my $fh = Symbol::gensym();

 then probably don't need to import it.

Right - thanks.

  +my $file = catfile($dir, 'TestConfigData.pm');
  +unless (open($fh, $file)) {
  +warn Cannot open $file: $!;
  +return;
  +}
[ .. ]
 Ahm, so you write that file twice if inside the
 Apache-Test build dir because Makefile.PL has been run
 long time ago. We will have problems with MakeMaker
 picking this file for 'make install', so we must provide a
 placeholder for that file. I suppose
 Apache/TestConfigData.pm always needs to be in the
 distribution but include an empty:

$Apache::TestConfigData = {};

 So now instead of trying to eval {} for the module in @_
 we can simply require it, and then test whether
 %$Apache::TestConfigData has something in it?

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.
===
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 -  1.113
+++ lib/Apache/TestRun.pm   3 Sep 2003 06:56:29 -
@@ -11,10 +11,54 @@
 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 $config;
+my $file = 'TestConfigData.pm';
+for (@INC) {
+   my $candidate = File::Spec-catfile($_, 'Apache', $file);
+   if (-e $candidate) {
+   $config = $candidate;
+   last;
+   }
+}
+eval {require $config};
+return $config if (not $@ and IN_APACHE_TEST);
+# XXX $HOME isn't propagated in mod_perl
+if ($ENV{HOME}) {
+   $config = File::Spec-catfile($ENV{HOME},
+ '.apache-test',
+ $file);
+eval {require $config};
+   return $config unless $@;
+}
+return $@ ? undef : $config;
+}
+
+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);
@@ -23,7 +67,7 @@
 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 +99,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 +452,8 @@
 $test_config-cmodules_configure;
 $test_config-generate_httpd_conf;
 $test_config-save;
+$self-write_config() if
+(IN_APACHE_TEST or $self-{opts}-{save});
 }

 sub try_exit_opts {
@@ -509,6 +556,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 +665,7 @@
 $self-run_tests;

 $self

Re: need help to add per-user config to Apache::Test

2003-09-02 Thread Randy Kobes
On Tue, 2 Sep 2003, Stas Bekman wrote:

 Randy Kobes wrote:
[ ... ]
   sub filter_args {
   my($args, $wanted_args) = @_;
  +if (HAS_CONFIG) {
  +for (qw(group user apxs port httpd)) {
  +next unless defined $Apache::MyTestConfig-{$_};
  +unshift @$args, -$_, $Apache::MyTestConfig-{$_};
  +}
  +}

 may be it's better to do it at a later stage? this just
 used to generate t/TEST and similar scripts. If MyConfig
 has changed since t/TEST was generated the changes won't
 affect t/TEST.
[ .. ]

Thanks, Stas. You're right about the problems with $HOME,
and I'll take a more careful look at it, as well as your
other comments. In the meantime, here's something that
inserts the data at a later stage, and yet still can get
overridden by explicit arguments to t/TEST. In this
attempt, all the changes are made to Apache::TestRun.pm.
===
Index: 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
--- TestRun.pm  22 Jul 2003 11:21:36 -  1.113
+++ TestRun.pm  2 Sep 2003 22:31:40 -
@@ -11,10 +11,31 @@
 use Apache::TestHarness ();
 use Apache::TestTrace;

+require File::Spec;
+sub has_config {
+my $has_config = 0;
+# XXX $HOME isn't propagated in mod_perl
+if ($ENV{HOME}) {
+eval
+{require File::Spec-catfile($ENV{HOME},
+ '.apache-test',
+'TestConfigData.pm');};
+$has_config = 1 unless $@;
+}
+unless ($has_config) {
+eval {require Apache::TestConfigData;};
+$has_config = 1 unless $@;
+}
+return $has_config;
+}
+use constant HAS_CONFIG = has_config();
+
 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 qw(gensym);

 use constant STARTUP_TIMEOUT = 300; # secs (good for extreme debug cases)
 use subs qw(exit_shell exit_perl);
@@ -23,7 +44,7 @@
 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 +76,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),
 );

@@ -509,6 +531,12 @@

 sub new_test_config {
 my $self = shift;
+if (HAS_CONFIG) {
+for (qw(httpd port user group apxs)) {
+next unless $Apache::TestConfigData-{$_};
+   $self-{conf_opts}-{$_} ||= $Apache::TestConfigData-{$_};
+}
+}
 Apache::TestConfig-new($self-{conf_opts});
 }

@@ -614,6 +642,10 @@
 $self-run_tests;

 $self-stop;
+
+$self-write_config() if
+($self-{opts}-{save} or not HAS_CONFIG);
+
 }

 my @oh = qw(jeez golly gosh darn shucks dangit rats nuts dangnabit crap);
@@ -915,6 +947,75 @@
 #require Carp;
 #Carp::cluck('exiting');
 CORE::exit $_[0];
+}
+
+sub write_config {
+my $self = shift;
+my $dir;
+for (@INC) {
+my $candidate = catfile($_, 'Apache', 'Test.pm');
+if (-e $candidate) {
+$dir = dirname($candidate);
+last;
+}
+}
+unless (-w $dir) {
+$dir = catdir($ENV{HOME}, '.apache-test');
+unless (-d $dir) {
+mkdir $dir or do {
+warn Cannot mkdir $dir: $!;
+return;
+};
+}
+}
+
+my $fh = Symbol::gensym();
+my $file = catfile($dir, 'TestConfigData.pm');
+unless (open($fh, $file)) {
+warn Cannot open $file: $!;
+return;
+}
+warn Writing $file \n;
+my $vars = $self-{test_config}-{vars};
+my $config_dump;
+for (qw(group user apxs port httpd)) {
+next unless $vars-{$_};
+$config_dump .= qq{'$_' = } . qq{'$vars-{$_}',\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;
+my $test = catdir($vars-{top_dir}, 'blib/lib/Apache');
+if (-e catfile($test, 'Test.pm')) {
+my $fh = Symbol::gensym();
+my $file = catfile($test, 'TestConfigData.pm');
+if (-e $file) {
+unlink $file or do {
+warn

Re: need help to add per-user config to Apache::Test

2003-08-29 Thread Randy Kobes
On Thu, 28 Aug 2003, Stas Bekman wrote:

 Several people have asked for having a new feature in
 Apache::Test: they want to configure it once (where the
 server, apxs, etx are) and run Apache::Test without
 needing to pass any arguments. Matt suggested that it
 should remember the values passed the first time it's used
 and then re-use them. However on a system with several
 users and different preferences, this won't work.
 Therefore we need to be able to support per-user
 preferences. CPAN.pm's setup seems to provide a good
 solution to the same problem (CPAN/Config.pm and
 ~user/.cpan/CPAN/Config.pm). So I thought that someone
 would like to port the functionality from CPAN.pm to
 Apache::Test and send the patches here. It's all pure
 perl, so you have no excuses that it's XS/C ;)

I have a mostly functional version of this, save for
the ability to use a $HOME/.apache-test/Config.pm, which
shouldn't be too hard to add. I'll try to finish it
off this weekend.

-- 
best regards,
randy kobes


Re: apxs on Win32

2003-07-30 Thread Randy Kobes
On Tue, 29 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
 [...]
  I'll take a look at this tonight as well - it'd probably
  be easier to change, for Win32, the assumption of the
  name of the httpd binary when apxs is present.

 Thanks Randy!

Thanks for looking this over, Stas - I know you're really busy
right now ... I've attached a diff incorporating the earlier
suggestions - this one also has an additional fix to adjust the
file names to be cleaned on Win32, which are different.

As far getting the right name for the Win32 binary goes with apxs
present, I don't think there's an ideal solution ... To
summarize, the problem is that apxs -q TARGET ( = httpd) is used
in Apache-Test for the name of the apache binary, whereas in
other places (in apxs itself, for example) it's used to represent
httpd.conf. What I ended up doing here is following the
Apache-Test convention of setting $vars-{target} to Apache.exe
for Win32 - this means overwriting the apxs value, which isn't
great, but I guess as long as the same convention is followed
throughout the package, it should be OK.

-- 
best regards,
randy? s.diff
? s.txt
Index: TestConfig.pm
===
RCS file: 
/home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
retrieving revision 1.166
diff -u -r1.166 TestConfig.pm
--- TestConfig.pm   29 Jul 2003 15:19:24 -  1.166
+++ TestConfig.pm   30 Jul 2003 02:50:32 -
@@ -283,7 +283,7 @@
 $self-{APXS} = $self-default_apxs;
 
 return unless $self-{APXS};
-
+$self-{APXS} =~ s {/}{\\}g if WIN32;
 my $vars = $self-{vars};
 
 $vars-{bindir}   ||= $self-apxs('BINDIR', 1);
@@ -300,7 +300,8 @@
 my $self = shift;
 my $vars = $self-{vars};
 
-$vars-{target} ||= (WIN32 ? 'Apache.exe' : 'httpd');
+$vars-{target} ||= 'httpd';
+$vars-{target} = 'Apache.exe' if WIN32;
 
 unless ($vars-{httpd}) {
 #sbindir should be bin/ with the default layout
Index: TestConfigC.pm
===
RCS file: 
/home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigC.pm,v
retrieving revision 1.20
diff -u -r1.20 TestConfigC.pm
--- TestConfigC.pm  31 Mar 2003 06:58:40 -  1.20
+++ TestConfigC.pm  30 Jul 2003 02:50:32 -
@@ -9,6 +9,8 @@
 use Apache::TestTrace;
 use File::Find qw(finddepth);
 
+use constant WIN32 = Apache::TestConfig::WIN32;
+
 sub cmodule_find {
 my($self, $mod) = @_;
 
@@ -76,7 +78,7 @@
 EOF
 }
 
-my %lib_dir = (1 = , 2 = .libs/);
+my %lib_dir = WIN32 ? (1 = , 2 = ) : (1 = , 2 = .libs/);
 
 sub cmodules_build_so {
 my($self, $name) = @_;
@@ -135,6 +137,11 @@
 
 my $lib = $self-cmodules_build_so($name);
 
+my $extras = WIN32 ? ' -llibhttpd -p ' : '';
+my $rm = WIN32 ? '@erase' : 'rm -rf';
+my $goners = join ' ', ( map {$name . '.' . $_}
+(WIN32 ? qw(exp lib so lo) : qw(o lo slo la)) );
+
 my $fh = Symbol::gensym();
 open $fh, $makefile or die open $makefile: $!;
 
@@ -143,10 +150,10 @@
 all: $lib
 
 $lib: $name.c
-   \$(APXS) $dversion -I$self-{cmodules_dir} -c $name.c
+   \$(APXS) $dversion -I$self-{cmodules_dir} $extras -c $name.c
 
 clean:
-   -rm -rf $name.o $name.lo $name.slo $name.la .libs
+   -$rm $goners .libs
 EOF
 
 close $fh or die close $makefile: $!;


Re: apxs on Win32

2003-07-30 Thread Randy Kobes
On Tue, 29 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
  On Tue, 29 Jul 2003, Stas Bekman wrote:
 
 Randy Kobes wrote:
 
 I've been looking at getting apxs for Win32 working on Apache 2.
 
 where would it go? Apache::Test? mod_perl?
 
  If there's consensus, I think the better place would be
  Apache-Test, as it can be used outside of mod_perl. If so,
  I'll clean things up a bit, and put up a new version; I
  could also generate something for Apache-Test's Makefile.PL
  to have it configure and install this on Win32, if wanted.

 +1

Here's a diff to do this for the top-level Apache-Test
Makefile.PL:

Index: Makefile.PL
===
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/Makefile.PL,v
retrieving revision 1.13
diff -u -r1.13 Makefile.PL
--- Makefile.PL 18 Jun 2003 08:55:57 -  1.13
+++ Makefile.PL 30 Jul 2003 04:56:53 -
@@ -10,6 +10,8 @@
 # Makefile.PL, top-level sets this env var
 use constant TOP_LEVEL = !exists $ENV{MOD_PERL_2_BUILD};

+use constant WIN32 = $^O =~ /Win32/;
+
 use ExtUtils::MakeMaker;
 use Symbol;

@@ -26,6 +28,8 @@
 Apache::TestMM::generate_script($_);
 }

+ask_about_apxs() if WIN32;
+
 set_version();

 # if built with mod_perl 2.0, it top-level Makefile.PL already
@@ -97,4 +101,24 @@

 $string;
 };
+}
+
+sub ask_about_apxs {
+print 'END';
+
+I see you're on Win32. If you use Apache 2, I can install a
+version of apxs, which is a tool that automates many of the
+steps to build Apache C modules, if you like. Just answer 'yes'
+at the prompt below.
+
+END
+my $ans = prompt('Install apxs?', 'yes');
+if ($ans =~ /^y/i) {
+my $file =  'apxs_win32_PL';
+unless (my $return = do $file) {
+warn Couldn't parse $file: $@  if $@;
+warn Couldn't do $file: $! unless defined $return;
+warn Couldn't run $fileunless $return;
+}
+}
 }

This requires two files at the same level as Makefile.PL -
apxs_win32 and apxs_win32_PL, which I've put up under
http://theoryx5.uwinnipeg.ca/. apxs_win32 isn't the cleanest
script ever been written :); part of the reason is that
I tried to make minimal changes, in case it was desired to
merge the changes at some point into the unix version.

-- 
best regards,
randy


Re: Apache::Test oustanding issues

2003-07-30 Thread Randy Kobes
On Tue, 29 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
  On Tue, 29 Jul 2003, Stas Bekman wrote:
 
 In the last few weeks the following two issues were raised:
 
 1) store a default location of httpd/apxs in Apache::Test so one should
 provide it only once.
 
 I'm +1 on this feature. Is anybody interested to implement it?
 
  That sounds like a good idea ... Are you thinking of something
  like Apache::MyConfig.pm of mod_perl 1, or libnet.cfg of libnet -
  a file which gets created the first time the user installs the
  package, and then gets used on subsequent locations, with perhaps
  an initial dialogue asking the user if they want to keep the
  stored settings?

 Yes. That's the idea Matt brought up earlier on this list.

I'd be interested in taking a look at this ... But just so
I understand the intent,
- this configuration file would get written at the
'perl Makefile.PL' stage?
- if the user supplies -httpd and/or -apxs values to
'perl Makefile.PL', or suitable environment variables
are set, a dialogue should be invoked, confirming
that the user wants to store these values?
- if no such values nor environment variables are supplied,
guesses are made, and again the user is asked to confirm?
- upon later uses of Apache::Test, these stored values
would be used, unless explicit -httpd or -apxs arguments
to t/TEST are given, or the appropriate environment variables
are set?
- is it only httpd and apxs that get stored, or would it
be useful to have others (eg, the Apache user, group, or port)?

-- 
best regards,
randy


Re: apxs on Win32

2003-07-30 Thread Randy Kobes
On Wed, 30 Jul 2003, Stas Bekman wrote:

 +1 on the patch

 Randy, whatever you think is the best for win32, please go
 ahead with it.  Untill we get someone else on win32 involved,
 you are pretty much free to decide how to handle things and
 what's the best for the user, as long as the changes don't
 break the code on other platforms. It's really hard to judge
 what's good or less good without seeing the problem. Perhaps
 somebody else can do that. I remember Philippe was trying to
 set win32 env, but he is now in transition from one continent
 to another...

 On the other hand, I really dislike the fact that the code gets
 too many conditionals, making it much harder to comprehend. We
 should consider to use subclasses for win32 (or any other
 platform that requires too many special cases). What do you
 think? There is no hurry for now, but we should keep it at the
 backs of our heads (unless of course you think it's a cool idea
 and want to go with it right now ;). The good thing is once
 subclassed, there is very little danger that the code on other
 platforms will go broken.

You're right that there's getting to be too many conditionals
in places, and subclassing would be a better way to go ...
I'll take a look at that, but I'm going on a bit of a break
in a couple of days - what about for now, doing something like
ModPerl::Build does: have, for some sub

sub whatever {
  my $self = shift;
  my $what = \{whatever_$^O};
  $what = \whatever_default unless defined $what;
  $what-($self);
}

sub whatever_default {
  
}

and then, to add something special for MSWin32, simply define a

sub whatever_MSWin32 {
  ...
}

which gets used in place of the default. I could redo that
patch in this form easily, if that would be better for now.

-- 
best regards,
randy


Re: apxs on Win32

2003-07-30 Thread Randy Kobes
On Thu, 31 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
[ .. ]
  As Bill mentioned in another message, it looks like it would be
  possible to integrate it within httpd-2.0. So rather than
  including it within the Apache-Test sources, what I could do is
  add a post-install script to the Win32 ppm package we have here
  for Apache-Test that would install the apxs script, if desired -
  that might be handy for people who'd like to play with it now.

 Though it won't be available for people with older httpd-2.0. I
 guess in that case Apache::Test could install it.

That's what I was thinking - sorry, I should have been clearer.
ppm has a feature that, when one installs a ppm package, a script
from some server can optionally be fetched and run (by Perl, or
anything, actually). So what I could do for the Apache-Test ppm
package we have is use such a script to get the needed files for
the apxs script and run and install them (if the user wants) -
that way, a person running an older httpd-2.0 could just ppm
install Apache-Test from here, and apxs would also get installed
(of course, associating this script with Apache-Test is just
convenience - a user can fetch and run the script him/herself
manually). So this wouldn't require any changes to the
Apache-Test sources.

-- 
best regards,
randy


Re: Apache::Test oustanding issues

2003-07-29 Thread Randy Kobes
On Mon, 28 Jul 2003, David Wheeler wrote:

 On Monday, July 28, 2003, at 04:52  PM, Stas Bekman wrote:

  We do that already. The problem is in the parent path.
  Try:
  cd /root ; mkdir t ; chmod 0777 t ;
  sudo -u 'nobody' perl -le 'print -r t  -w _  -x _ ? OK : NOK'

 Oh, right. That's one thing about Unix that I never got the hang of.
 But don't you get the username and group from httpd.conf? Couldn't use
 use that information to do chown and chgrp?

 David

Depending on where the source directory is, you may have to open
up a parent directory normally restricted to root to a non-root
user, which wouldn't be a good idea, even temporarily. What about
just skipping the tests if root is running the tests, and
printing out an explanatory message why the tests are skipped?

-- 
best regards,
randy


Re: Apache::Test oustanding issues

2003-07-29 Thread Randy Kobes
On Mon, 28 Jul 2003, David Wheeler wrote:

 On Monday, July 28, 2003, at 06:33  PM, Randy Kobes wrote:

  What about just skipping the tests if root is running the
  tests, and printing out an explanatory message why the tests
  are skipped?

 I don't think you can necessarily do this, because not all test
 need to have access to t/. My test suite for
 MasonX::ApacheHandler::WithCallbacks, for example, doesn't need
 to have the Apache user access those files. They're loaded up
 by the user that starts apache (root), and then the process
 forks off to nobody-owned children that never access the files.
 So my tests work fine even under root.

That's a good point ... As you say below, it'd be better for
the test writer to decide on an individual basis which tests
should be skipped if run as root.

 And since many, _many_ users simply install modules via CPAN.pm
 as root, you'd be eliminating a huge group of people who can
 run tests.

That's true, although that practice is discouraged ... I think
this issue has come up in the context of other CPAN modules,
where some do skip tests if run as root, for similar reasons -
some tests aren't designed for being run as root, and in
principle may give false positive (or negative) results if run as
such.

 I think a better idea is to introduce a test function like
 have_lwp, maybe called has_access_to_t, that can be used by
 the module developer to skip the relevant tests, if necessary.

-- 
best regards,
randy


Re: Apache::Test oustanding issues

2003-07-29 Thread Randy Kobes
On Tue, 29 Jul 2003, Stas Bekman wrote:

 In the last few weeks the following two issues were raised:

 1) store a default location of httpd/apxs in Apache::Test so one should
 provide it only once.

 I'm +1 on this feature. Is anybody interested to implement it?

That sounds like a good idea ... Are you thinking of something
like Apache::MyConfig.pm of mod_perl 1, or libnet.cfg of libnet -
a file which gets created the first time the user installs the
package, and then gets used on subsequent locations, with perhaps
an initial dialogue asking the user if they want to keep the
stored settings?

-- 
best regards,
randy


apxs on Win32

2003-07-29 Thread Randy Kobes
I've been looking at getting apxs for Win32 working on Apache 2.
There's a number of changes needed due to the current reliance on
libtool, so initially I've tried just a pure Win32 version - if
anyone wants to try it, I've put up two files - Configure.apxs
and apxs.in - at http://theoryx5.uwinnipeg.ca/. Running
   C:\Some\Path perl Configure.apxs
(in the same directory as apxs.in) will guess at your Apache2
directory (a --with-apache2=... option can be specified to tell
it explicitly), and then an apxs.bat will be created under
C:\Path\to\Apache2\bin\, along with the associated
C:\Path\to\Apache2\build\config_vars.mk.

I've tried using this for the c-modules tests of perl-framework,
and it seems to work OK, with the following diff applied to
a couple of files under perl-framework/Apache-Test/lib/Apache:

===
Index: TestConfig.pm
===
RCS file: 
/home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
retrieving revision 1.165
diff -u -r1.165 TestConfig.pm
--- TestConfig.pm   7 Jul 2003 18:42:29 -   1.165
+++ TestConfig.pm   29 Jul 2003 05:51:22 -
@@ -283,7 +283,7 @@
 $self-{APXS} = $self-default_apxs;

 return unless $self-{APXS};
-
+$self-{APXS} =~ s !/!\\!g if WIN32;
 my $vars = $self-{vars};

 $vars-{bindir}   ||= $self-apxs('BINDIR', 1);
Index: TestConfigC.pm
===
RCS file: 
/home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigC.pm,v
retrieving revision 1.20
diff -u -r1.20 TestConfigC.pm
--- TestConfigC.pm  31 Mar 2003 06:58:40 -  1.20
+++ TestConfigC.pm  29 Jul 2003 05:51:22 -
@@ -76,7 +76,8 @@
 EOF
 }

-my %lib_dir = (1 = , 2 = .libs/);
+my %lib_dir = Apache::TestConfig::WIN32 ? (1 = , 2 = ) :
+(1 = , 2 = .libs/);

 sub cmodules_build_so {
 my($self, $name) = @_;
@@ -135,6 +136,9 @@

 my $lib = $self-cmodules_build_so($name);

+my $extras;
+$extras = ' -llibhttpd -p ' if Apache::TestConfig::WIN32;
+
 my $fh = Symbol::gensym();
 open $fh, $makefile or die open $makefile: $!;

@@ -143,7 +147,7 @@
 all: $lib

 $lib: $name.c
-   \$(APXS) $dversion -I$self-{cmodules_dir} -c $name.c
+   \$(APXS) $dversion -I$self-{cmodules_dir} $extras -c $name.c

 clean:
-rm -rf $name.o $name.lo $name.slo $name.la .libs
===
(there's a failure in building one of the tests due to a
missing random-ish function). The tests were configured as
  C:\perl-framework Perl Makefile.PL -apxs C:\Apache2\bin\apxs
-httpd C:\Apache2\bin\Apache.exe
The reason for specifying both -apxs and -httpd is related to the
current Apache-Test using the fact that the apxs variable TARGET
specifies the name of the httpd binary (httpd). On Win32 the
binary is Apache.exe, but changing the value of TARGET on Win32
would break assumptions elsewhere that the Apache configuration
file (httpd.conf on Win32 as well) is TARGET.conf. How to handle
this better should be looked at.

Merging this Win32 apxs.in and the one in the httpd sources would
possible, if that was desired.

-- 
best regards,
randy kobes


Re: apxs on Win32

2003-07-29 Thread Randy Kobes
On Tue, 29 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
  I've been looking at getting apxs for Win32 working on Apache 2.
  There's a number of changes needed due to the current reliance on
  libtool, so initially I've tried just a pure Win32 version - if
  anyone wants to try it, I've put up two files - Configure.apxs
  and apxs.in - at http://theoryx5.uwinnipeg.ca/. Running
 C:\Some\Path perl Configure.apxs
  (in the same directory as apxs.in) will guess at your Apache2
  directory (a --with-apache2=... option can be specified to tell
  it explicitly), and then an apxs.bat will be created under
  C:\Path\to\Apache2\bin\, along with the associated
  C:\Path\to\Apache2\build\config_vars.mk.

 where would it go? Apache::Test? mod_perl?

If there's consensus, I think the better place would be
Apache-Test, as it can be used outside of mod_perl. If so,
I'll clean things up a bit, and put up a new version; I
could also generate something for Apache-Test's Makefile.PL
to have it configure and install this on Win32, if wanted.

  I've tried using this for the c-modules tests of perl-framework,
  and it seems to work OK, with the following diff applied to
  a couple of files under perl-framework/Apache-Test/lib/Apache:
 
  ===
  Index: TestConfig.pm
  ===
  RCS file: 
  /home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
  retrieving revision 1.165
  diff -u -r1.165 TestConfig.pm
  --- TestConfig.pm   7 Jul 2003 18:42:29 -   1.165
  +++ TestConfig.pm   29 Jul 2003 05:51:22 -
  @@ -283,7 +283,7 @@
   $self-{APXS} = $self-default_apxs;
 
   return unless $self-{APXS};
  -
  +$self-{APXS} =~ s !/!\\!g if WIN32;

 can this please be:

$self-{APXS} =~ s|/|\\|g if WIN32;

 os some other separator than !, probably something like s{/}{//}g

Sure, no problem.


   my $vars = $self-{vars};
 
   $vars-{bindir}   ||= $self-apxs('BINDIR', 1);
  Index: TestConfigC.pm
  ===
  RCS file: 
  /home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigC.pm,v
  retrieving revision 1.20
  diff -u -r1.20 TestConfigC.pm
  --- TestConfigC.pm  31 Mar 2003 06:58:40 -  1.20
  +++ TestConfigC.pm  29 Jul 2003 05:51:22 -
  @@ -76,7 +76,8 @@
   EOF
   }
 
  -my %lib_dir = (1 = , 2 = .libs/);
  +my %lib_dir = Apache::TestConfig::WIN32 ? (1 = , 2 = ) :
  +(1 = , 2 = .libs/);
 
   sub cmodules_build_so {
   my($self, $name) = @_;
  @@ -135,6 +136,9 @@
 
   my $lib = $self-cmodules_build_so($name);
 
  +my $extras;

 it must be:

 my $extras = '';

  +$extras = ' -llibhttpd -p ' if Apache::TestConfig::WIN32;

 or:

my $extras = Apache::TestConfig::WIN32 ? ' -llibhttpd -p ' : '';

 probably worth adding on top:

use constant WIN32 = Apache::TestConfig::WIN32;

 so there will be less to type, shorter lines...

Good idea - I'll fix that too.


   my $fh = Symbol::gensym();
   open $fh, $makefile or die open $makefile: $!;
 
  @@ -143,7 +147,7 @@
   all: $lib
 
   $lib: $name.c
  -   \$(APXS) $dversion -I$self-{cmodules_dir} -c $name.c
  +   \$(APXS) $dversion -I$self-{cmodules_dir} $extras -c $name.c

 please always inline and attach the diff when it includes tabs, since they get
 lost...

Sorry about that - I'll generate a new diff tonight.


   clean:
  -rm -rf $name.o $name.lo $name.slo $name.la .libs
  ===
  (there's a failure in building one of the tests due to a
  missing random-ish function). The tests were configured as
C:\perl-framework Perl Makefile.PL -apxs C:\Apache2\bin\apxs
  -httpd C:\Apache2\bin\Apache.exe
  The reason for specifying both -apxs and -httpd is related to the
  current Apache-Test using the fact that the apxs variable TARGET
  specifies the name of the httpd binary (httpd). On Win32 the
  binary is Apache.exe, but changing the value of TARGET on Win32
  would break assumptions elsewhere that the Apache configuration
  file (httpd.conf on Win32 as well) is TARGET.conf. How to handle
  this better should be looked at.

 it'd be cool to need to rely only on any of the two.

I'll take a look at this tonight as well - it'd probably
be easier to change, for Win32, the assumption of the
name of the httpd binary when apxs is present.

-- 
best regards,
randy


Re: Test failure with Apache::Test 1.03, Apache/2.0.40 and perl-5.8.1-to-be

2003-07-16 Thread Randy Kobes
On Tue, 15 Jul 2003, Stas Bekman wrote:

 Randy Kobes wrote:
[ .. ]
  If the above is on the right track, one possibility is to
  do the following (in cases where possible LoadModule directives
  are needed by Apache-Test):
  - die if an httpd.conf isn't found in a directory conf/ in an
  expected relative location to httpd (or perhaps add an option
  allowing a user to specify where httpd.conf is, if it's in
  a different relative to httpd).

 This sounds like a good idea to me. Apache::Test already
 provides an option to specify a custom path to the httpd.conf
 to inherit from.

 t/TEST -help | grep inherit
-httpd_conf inherit config from this file (default is apxs derived)

I didn't see that - that's great ... Does specifying explicitly
the working httpd.conf help with your problems, Slaven?

  - test the configuration, and if an Invalid Command ... error
  is generated, suggest to the user to either supply the right
  httpd.conf, or check the validity of the existing one.

 test the config of httpd.conf to be inherited or the autogenerated one?

I was thinking of the inherited one, in case that a wrong one has
been picked up. But with the ability there already to specify
the httpd.conf to inherit from, perhaps this is overkill.

-- 
best regards,
randy


Re: Test failure with Apache::Test 1.03, Apache/2.0.40 and perl-5.8.1-to-be

2003-07-11 Thread Randy Kobes
On Fri, 11 Jul 2003, Stas Bekman wrote:

 [EMAIL PROTECTED] wrote:
[ .. ]
  Now I get a different failure (Alias is now invalid):
[ .. ]

  waiting for server to start: .Syntax error on line 76 of
  /home/slavenr/work2/httpd-test/perl-framework/Apache-Test/t/conf/httpd.conf:
  Invalid command 'Alias', perhaps mis-spelled or defined by a
  module not included in the server configuration !!!

 Do you have mod_alias available?

 % prefork/bin/httpd -l | grep mod_alias
mod_alias.c

 I suppose we could run this command to check for prerequisites
 and die if they aren't available?

I'm not sure what the best way to go about this is, but maybe the
following might help in deciding ... I think the problem arises
when Apache-Test either doesn't find the right httpd.conf
corresponding to the found httpd (as might happen, for example,
when httpd is a symlink to the real one), or it finds and parses
a bogus one (this happened to me a couple of times when the
installed httpd.conf wasn't edited to include the minimal
LoadModule directives, and I forgot to check). So it's not
necessarily a problem with using an incorrect httpd (although
that may still happen), but rather incorrect or missing
information from httpd.conf is being used.

If the above is on the right track, one possibility is to
do the following (in cases where possible LoadModule directives
are needed by Apache-Test):
- die if an httpd.conf isn't found in a directory conf/ in an
expected relative location to httpd (or perhaps add an option
allowing a user to specify where httpd.conf is, if it's in
a different relative to httpd).
- test the configuration, and if an Invalid Command ... error
is generated, suggest to the user to either supply the right
httpd.conf, or check the validity of the existing one.

-- 
best regards,
randy


Re: Test failure with Apache::Test 1.03, Apache/2.0.40 and perl-5.8.1-to-be

2003-07-06 Thread Randy Kobes
On Sun, 6 Jul 2003, Slaven Rezic wrote:

 make test fails with following output:

 /usr/perl5.8.1/bin/perl -Iblib/arch -Iblib/lib \
 t/TEST -clean
 APACHE= APXS= APACHE_PORT= APACHE_USER= APACHE_GROUP= \
 /usr/perl5.8.1/bin/perl -Iblib/arch -Iblib/lib \
 t/TEST -verbose=0
 *** root mode: changing the fs ownership to 'nobody' (99:99)
 /usr/sbin/httpd  -d /home/slavenr/.cpan/build/Apache-Test-1.03/t -f 
 /home/slavenr/.cpan/build/Apache-Test-1.03/t/conf/httpd.conf -DAPACHE2
 using Apache/2.0.40 (prefork MPM)

 waiting for server to start: .Syntax error on line 22 of
 /home/slavenr/.cpan/build/Apache-Test-1.03/t/conf/httpd.conf:
 Invalid command 'TransferLog', perhaps mis-spelled or defined
 by a module not included in the server configuration !!!
 server has died with status 255 (t/logs/error_log wasn't
 created, start the server in the debug mode) make: ***
 [run_tests] Terminated

I think this is due to it parsing the system httpd.conf (obtained
from the location of httpd) and adding to the httpd.conf of
Apache-Test any enabled LoadModule directives it finds. I guess
this could fail, or get confused, if the httpd.conf of httpd
being used isn't a functional one - one possibility is that the
httpd specified is a symlink, or is from an Apache source
distribution that has not yet been edited.

-- 
best regards,
randy kobes


Re: resolving Apache::Test vs. Apache::test collision

2003-06-18 Thread Randy Kobes
On Tue, 17 Jun 2003, Stas Bekman wrote:

[ .. ]
 David, please test this patch. This version performs the
 cleanup only during 'make install'. what I'm not sure about is
 whether it handles correctly some weird paths when creating the
 packlist. I think it should work, since nothing is passed via
 shell, but goes perl-2-perl.
[ .. ]

I had problems applying the original patch to httpd-test;
manually applying it worked except for an error about
a missing string terminator in the nuke_Apache__test target
(Win32 is picky about using quotes within commands).
This diff:
===
Index: Makefile.PL
===
RCS file: /home/cvspublic/httpd-test/perl-framework/Apache-Test/Makefile.PL,v
retrieving revision 1.8
diff -u -r1.8 Makefile.PL
--- Makefile.PL 29 Apr 2003 06:37:47 -  1.8
+++ Makefile.PL 18 Jun 2003 02:38:58 -
@@ -1,16 +1,21 @@
 use 5.005;

+use strict;
+
 use ExtUtils::MakeMaker;
 use Symbol;

 use lib qw(lib);

 my $VERSION;
+use File::Spec::Functions qw(catfile catdir);

 use Apache::Test5005compat;

 use Apache::TestMM qw(test); #enable 'make test'

+my $cleanup_packlist = .mypacklist;
+
 Apache::TestMM::filter_args();

 my @scripts = qw(t/TEST);
@@ -21,6 +26,8 @@

 set_version();

+nuke_Apache__test();
+
 WriteMakefile(
 NAME  = 'Apache::Test',
 VERSION   = $VERSION,
@@ -59,3 +66,74 @@
 return $string;
 }

+
+# on Case-Insensitive systems Apache/Test.pm can't coexist with
+# Apache/test.pm, since Apache::test is now deprecated (was renamed to
+# Apache/testold.pm in mod_perl 1.28, we need to find and remove any
+# occurrences of this file. CPAN authors should
+# s/Apache::test/Apache::testold/ and can either require mod_perl 1.28
+# which already carries it or simply bundle it. The best option is to
+# port the test suite to use Apache::Test which works with both
+# mod_perl generations.
+#
+# we could have done this cleanup only for case-insensitive systems,
+# but I feel that doing it for all systems, will speedup the
+# transitions from Apache::test to either Apache::Test or
+# Apache::testold.
+#
+sub nuke_Apache__test {
+
+my @convicts = ();
+foreach (@INC) {
+my $dir = catdir $_, Apache;
+next unless -d $dir;
+opendir DIR, $dir or die Cannot opendir $dir: $!\n;
+my @matches = grep /^test.pm$/, readdir DIR;
+closedir DIR;
+push @convicts, map { catfile $dir, $_ } @matches if @matches;
+}
+
+if (@convicts) {
+print EOI;
+!!! Makefile.PL has found old copies of Apache/test.pm which will
+be removed during 'make install' to prevent collisions with Apache::Test:
+
[EMAIL PROTECTED] \n, @convicts]}
+
+CPAN authors are advised to either use Apache::testold or port their
+test suite to Apache::Test which works with both mod_perl generations.
+EOI
+}
+
+open PACKLIST, $cleanup_packlist
+or die Can't open $cleanup_packlist: $!;
+print PACKLIST join , map $_\n, @convicts;
+close PACKLIST;
+}
+
+sub MY::install {
+my $self = shift;
+
+my $string = $self-MM::install(@_);
+add_dep(\$string, pure_install = 'nuke_Apache__test');
+
+$string;
+}
+
+sub MY::top_targets {
+my $self = shift;
+my $string = $self-MY::top_targets;
+
+$string .= EOF;
+
+nuke_Apache__test:
+\t\$(PERLRUN) -MExtUtils::Install -e uninstall(qq{$cleanup_packlist}, 1, 0)
+EOF
+
+$string;
+}
+
+sub add_dep {
+my($string, $targ, $add) = @_;
+$$string =~ s/($targ\s+::)/$1 $add/;
+}
=
worked for me on Win32 in uninstalling an existing test.pm in all
possible @INC locations before installing the new Test.pm.
Thanks, Stas.

-- 
best regards,
randy


Re: resolving Apache::Test vs. Apache::test collision

2003-05-22 Thread Randy Kobes
On Thu, 22 May 2003, Stas Bekman wrote:

[ ... ]

 So is everybody happy with this solution? (rename
 Apache/test.pm with Apache/testold.pm). So we can give Geoff a
 green light to publish his article?

Sounds good ...

 It'd be very helpful if somebody could do a bit of processing
 of CPAN and figure who uses Apache::test and compile a list of
 their email addresses.

Here's a list of packages that have Apache::test in their
Makefile.PL PREREQ_PMs, or otherwise require by some means
Apache::test - this was extracted from some indices used in our
CPAN search engine, so may be incomplete. The email addresses
could be [EMAIL PROTECTED]
===
M/MA/MAUNDER/Apache-AppCluster-0.02.tar.gz
M/MS/MSCHOUT/Apache-AuthCookie-3.04.tar.gz
K/KW/KWILLIAMS/Apache-Compress-1.003.tar.gz
J/JI/JIMW/libapreq-1.1.tar.gz
B/BO/BORISZ/Apache-PageKit-1.11.tar.gz
K/KW/KWILLIAMS/Apache-SSI-2.17.tar.gz
K/KW/KWILLIAMS/Apache-Filter-1.022.tar.gz
R/RK/RKITOVER/Apache-GDGraph-0.96.tar.gz
N/NB/NBYRD/Apache-PAR-0.12.tar.gz
S/ST/STAS/Apache-Peek-1.01.tar.gz
E/EN/ENRYS/Apache-SessionManager-0.04.tar.gz
D/DW/DWHEELER/MasonX-ApacheHandler-WithCallbacks-0.95.tar.gz
D/DR/DROLSKY/MasonX-Request-WithApacheSession-0.21.tar.gz
=

-- 
best regards,
randy



Re: resolving Apache::Test vs. Apache::test collision

2003-05-22 Thread Randy Kobes
On Thu, 22 May 2003, Randy Kobes wrote:

 On Thu, 22 May 2003, Stas Bekman wrote:
 [ ... ]
  It'd be very helpful if somebody could do a bit of processing
  of CPAN and figure who uses Apache::test and compile a list of
  their email addresses.
 
 Here's a list of packages that have Apache::test in their
 Makefile.PL PREREQ_PMs, or otherwise require by some means
 Apache::test - this was extracted from some indices used in our
 CPAN search engine, so may be incomplete.
[ ... ] 
Just to add to that - this list was those packages that
explicitly mention Apache::test in their Makefile.PLs as being
needed to build. There may be other packages that use
Apache::test but specify it indirectly via something like, eg,
mod_perl = 1 or Apache::src in the PREREQ_PM, since Apache::test
would be included in the distribution containing these modules.
To get an accurate list of those that explicitly use Apache::test
one would have to go through and build all packages that use
mod_perl (I could put together a list of those), for which
there's about 124. Perhaps just mailing all these authors would
be simplest, and let them decide if the change would affect them.

-- 
best regards,
randy



Re: resolving Apache::Test vs. Apache::test collision

2003-05-16 Thread Randy Kobes
On Fri, 16 May 2003, Geoffrey Young wrote:
 
 Stas Bekman wrote:
  Folks please send your feedback on this last proposal, so we can close 
  this issue asap.
  
  In case you have missed it:
  http://marc.theaimsgroup.com/?l=apache-test-devm=105288551432493w=2
 
 the solution seems reasonable to me, but then again I never had
 a problem :)
 
 from what I remember, this wasn't really an issue on win32
 either according to randy (due to the 5.6.1 and 5.8.0 issues or
 somesuch).  so, I guess we just need david and some other OSX
 people to weigh in before moving forward.
 
 maybe committing the solution will help - I feel like we've
 kinda beat this to death.  we can always back it out later if
 it doesn't work as intended, and having CVS up to date makes it
 easier for people to test everything.

I agree - the solution looks good. So if it's OK with the OSX
people ...

-- 
best regards,
randy



Re: resolving Apache::Test vs. Apache::test collision

2003-05-06 Thread Randy Kobes
On Tue, 6 May 2003, David Wheeler wrote:

 On Tuesday, May 6, 2003, at 08:49  AM, Randy Kobes wrote:
 
  An upshot of this is that, when installing Apache-Test,
  a system file Apache/Test.pm or Apache/test.pm should
  probably be unlinked before copying to the blib/ directory.
 
 Yes, and hope that they don't reinstall mod_perl 1 with its Apache/test 
 again.
 
 I'm beginning to think that, for all the up-front hassle of it,
 just renaming it to Apache::Tester or Test::Apache will avoid
 more headaches in the long run.

That's a good point, although as Stas pointed out, it may cause
some confusion with those already using Apache::Test.

If one views (philosophically) Apache::Test as a major upgrade to
Apache::test (with a different API), might it be reasonable to
consider replacing those packages that use Apache::test with
Apache::Test? For example, in the next mod_perl 1 release,
require Apache-Test for the tests, and do away with Apache::test?  
This would require rewriting the tests, which might be worth it
anyway, as a major illustration that Apache-Test works equally
well with mod_perl 1 (I'd volunteer to look at that, as I'm on
one of the offending systems).

I guess one advantage to this, recalling Stas' suggestion of
putting the functionality of Apache::test into Apache::Test, is
that two quite distinct test frameworks don't have to,
officially, be supported. And it also, eventually, addresses the
problem of installing mod_perl 1 after an Apache-Test
installation and overwriting Apache/Test.pm with Apache/test.pm.
The downside, of course, is that mod_perl 1 is very stable, and
so major changes like this aren't desireable. Another
disadvantage is that there's 3rd party mod_perl 1 modules that
use Apache::test (for example, Apache-Filter), and these would be
affected. 

Perhaps a compromise to the above is to just do this on Win32/Mac
OSX (or even not changing the test framework at all in mod_perl
1, and just not install Apache/test.pm), and then just print out
a warning that this is being done, and why. This wouldn't affect
as many users, and in the Win32 world, and perhaps also on the
Mac, I think users are used to major upgrades that aren't
necessarily backwards compatible.

-- 
best regards,
randy



Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestRun.pm

2003-01-31 Thread Randy Kobes
On Fri, 31 Jan 2003, Stas Bekman wrote:

 [EMAIL PROTECTED] wrote:
  stas2003/01/30 16:53:45
  
Modified:perl-framework/Apache-Test/lib/Apache TestRun.pm
Log:
# handle the cases when the test suite is run under 'root':
#
# 1. When user 'bar' is chosen to run Apache with, files and dirs
#created by 'root' might be not writable/readable by 'bar'
#
# 2. when the source is extracted as user 'foo', and the chosen user
#to run Apache under is 'bar', in which case normally 'bar' won't
#have the right permissions to write into the fs created by 'foo'.
#
# We solve that by 'chown -R bar.bar t/' in a portable way.
#
# at the end of the run we restore the perms to the original ones
 
 Randy, can you please check that this handles the win32 case as well? I've no 
 clue whether the concept of 'root' applies there.

Hi Stas,
   On Win32, I get an error about getpwuid($) being 
unimplemented. This diff

==
Index: Apache-Test/lib/Apache/TestRun.pm
===
RCS file: 
/home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.100
diff -u -r1.100 TestRun.pm
--- Apache-Test/lib/Apache/TestRun.pm   31 Jan 2003 00:53:45 -  1.100
+++ Apache-Test/lib/Apache/TestRun.pm   31 Jan 2003 04:38:35 -
@@ -667,7 +667,7 @@
 my $self = shift;
 %original_t_perms = (); # reset global
 
-my $user = getpwuid($) || '';
+my $user = Apache::TestConfig::WIN32 ? '' : (getpwuid($) || '');
 if ($user eq 'root') {
 my $vars = $self-{test_config}-{vars};
 my $user = $vars-{user};
===

allows things to run.

-- 
best regards,
randy



Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestRun.pm

2003-01-31 Thread Randy Kobes
On Fri, 31 Jan 2003, Stas Bekman wrote:

 Is the whole test-under-'root' issue moot under win32, and can
 be safely skipped without messing the code?

Hi Stas,
  There is a concept of permissions under Win32 (some flavours)
which in principle can enter this (for example, an Administrator
can block users from modifying certain system settings). However,
I've not had, or heard of, such problems in this context of
testing Apache. Probably if they did arise a much different
logic would have to be used.
  
-- 
best regards,
randy



Re: Asst'd Win32 failures [that should simply be skipped]

2002-06-22 Thread Randy Kobes
On Sat, 22 Jun 2002, William A. Rowe, Jr. wrote:

 This one is just plain silly, looks like a semantics error...

 modules\include.t 516  11.76%  46-51

 ok 36
 ok 37 # Skipping XBitHack tests on this platform
 ok 38 # Skipping XBitHack tests on this platform
 ok 39 # Skipping XBitHack tests on this platform
 ok 40 # Skipping XBitHack tests on this platform
 ok 41 # Skipping XBitHack tests on this platform
 ok 42 # Skipping XBitHack tests on this platform
 ok 43 # Skipping XBitHack tests on this platform
 ok 44 # Skipping XBitHack tests on this platform
 ok 45 # Skipping XBitHack tests on this platform
 FAILED tests 46-51
   Failed 6/51 tests, 88.24% okay (-9 skipped tests: 36 okay, 70.59%)

 Since when is a skip == failure :-?

The following

===
Index: t/modules/include.t
===
RCS file: /home/cvspublic/httpd-test/perl-framework/t/modules/include.t,v
retrieving revision 1.21
diff -u -r1.21 include.t
--- t/modules/include.t 20 Jun 2002 04:05:04 -  1.21
+++ t/modules/include.t 22 Jun 2002 21:31:00 -
@@ -141,9 +141,9 @@
 for (1..9) {
 skip Skipping XBitHack tests on this platform, 1;
 }
-exit;
+#exit;
 }
-
+else {
 ### XBITHACK TESTS
 # test xbithack off
 $doc = xbithack/off/test.html;
@@ -189,7 +189,7 @@
  XBitHack full [0554]
 );

-
+}
 ### MOD_BUCKETEER+MOD_INCLUDE TESTS
 # we can use mod_bucketeer to create edge conditions for mod_include, since
 # it allows us to create bucket and brigade boundaries wherever we want

===

is one way of fixing this.

best regards,
randy kobes



Re: Outch - what a tangled web.

2002-01-06 Thread Randy Kobes
- Original Message -
From: Doug MacEachern [EMAIL PROTECTED]
To: William A. Rowe, Jr. [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]; dev@apr.apache.org
Sent: Saturday, January 05, 2002 6:38 PM
Subject: Re: Outch - what a tangled web.


 i wouldn't object to special casing to make win32 happy.  though i find it
 odd that things are working ok as-is on my win32 box and on others.  is
 there any info i can give you about my win32 setup that would help?  fwiw
 your script outputs the following on my box:

 localhost is at 127.0.0.1
 127.0.0.1 is named bramble
 bramble is at 10.0.1.2
 10.0.1.2 is named bramble

For one more data point, on my Win98 machine, which is on a
dial-up network without a permanent ip address, the script gives

localhost is at 127.0.0.1
127.0.0.1 is named localhost
localhost is at 127.0.0.1
127.0.0.1 is named localhost

and the modules/access.t tests all pass.

best regards,
randy kobes




Re: Begging your pardons,

2001-12-30 Thread Randy Kobes

- Original Message -
From: William A. Rowe, Jr. [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Friday, December 28, 2001 10:55 PM
Subject: Begging your pardons,



 but is anyone familiar with the following failure cases on win32?

 modules\access..FAILED tests 4, 20-21, 24, 26, 28, 30, 38, 55, 72, 89,
106-1
 07, 123-124, 141, 154, 168, 170, 175, 192, 209, 226, 277, 290, 304, 306,
311, 32
 8, 345, 362
 Failed 31/408 tests, 92.40% okay

 modules\dav.FAILED test 4
 Failed 1/14 tests, 92.86% okay

 modules\negotiation.FAILED tests 1-3, 24-26, 70-72
 Failed 9/98 tests, 90.82% okay

[ ... ]

I didn't have dav nor ssl set up, but with the latest cvs apache-2 all the
access and negotiation tests passed on my Win98 machine. I've seen in
some cases that a failure in an early test may cause latter tests to
fail that otherwise would have passed (eg, by running tests individually).

best regards,
randy kobes