Hi David,

Am Donnerstag 29 Juli 2004 23:07 schrieb David Wheeler:
> On Jul 28, 2004, at 1:29 AM, Stas Bekman wrote:
> > Boris Zentner wrote:
> >> Hi,
> >> recently I try to use Apache::Test with HTTP::Cookies. But it did not
[...]
> >> HTTP::Cookies->extract_cookies is called after every request.
> >> Therefor I create the cookie_jar from
>
> Oops.
>
> >> package My::Cookies;
> >> use base 'HTTP::Cookies';
> >> sub extract_cookies {
> >>   warn "extract_cookies!!!";
> >>   shift->SUPER::extract_cookies(@_);
> >> }
> >> To get it work, I need to parse the cookie headers myself or
> >> Apache::TestRequest::user_agent(
> >>   reset => 1,   cookie_jar => $cookie_jar,   requests_redirectable =>
> >> 0 );
> >> But here I need to redirect myself or do it with the undocumented
> >> Apache::TestRequest::user_agent(
> >>   reset => 1,   cookie_jar => $cookie_jar,   requests_redirectable =>
> >> [qw~x y~]
> >> );
> >> that does anything I want but is undocumented!
> >> Here is a part from Apache::TestRequest::user_agent that looks wrong
> >> to me.
> >>         my $redir = $args->{requests_redirectable};
> >>         if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) {
> >>             $RedirectOK = 1;
> >>         } else {
> >>             $RedirectOK = 0;
> >>         }
>
> Does this address the issue?
>
> --- TestRequest.pm.~1.96.~    Thu May  6 12:11:33 2004
> +++ TestRequest.pm    Thu Jul 29 14:03:58 2004
> @@ -115,7 +115,7 @@
>
>       if (exists $args->{requests_redirectable}) {
>           my $redir = $args->{requests_redirectable};
> -        if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) {
> +        if ((ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) or
> $redir) {
>               $RedirectOK = 1;
>           } else {
>               $RedirectOK = 0;
>


No, it is not enough.

The problem is ( at least in my case ) where I use LWP. My test start with

  plan tests => 6, have 'LWP';

later I Add a cookie_jar with

  Apache::TestRequest::user_agent( reset      => 1,
                                   cookie_jar => $cookie_jar,
  );

this works fine.

But the docs from Aapche::TestRequest

      And finally, the semantics of the "requests_redirectable"
       parameter is different than for "LWP::UserAgent": It
       either follows redirects for a request, or it doesn't.
       Thus "requests_redirectable" is a boolean value instead of
       the array reference that "LWP::UserAgent" expects. To
       force "Apache::TestRequest" not to follow redirects in any
       of its convenience functions, pass a false value to
       "requests_redirectable":

This implies to me, that I have the choice to enable or disable
"requests_redirectable" with a boolean value. I choice to enable it with

  Apache::TestRequest::user_agent( reset      => 1,
                                   cookie_jar => $cookie_jar,
                                   requests_redirectable => 1
  );

and it does not work anymore. I think this is since I use LWP and the 
requests_redirectable is passwd directly to LWP::UserAgent. But 
requests_redirectable in LWP need a 0 to disable requests_redirectable or a 
arrayref, where the redirects explicite allowed. For example:

  requests_redirectable => [ qw/GET POST HEAD/ ];

the default form LWP is [ qw/GET HEAD/ ];

So I think if LWP is used, instead of passing requests_redirectable to LWP, 
the 1 should be changed to [ qw/GET POST HEAD/ ] or propably more. This patch 
passwd all my tests.

--- a/Apache-Test-1.12/lib/Apache/TestRequest.pm        2004-05-06 
21:11:33.000000000 +0200
+++ b/Apache-Test-1.12/lib/Apache/TestRequest.pm        2004-07-30 
15:27:28.686759440 +0200
@@ -117,7 +117,12 @@
         my $redir = $args->{requests_redirectable};
         if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) {
             $RedirectOK = 1;
-        } else {
+        }
+       elsif ( $redir ) {
+           $args->{requests_redirectable} = [ qw/GET HEAD POST/ ] if 
$have_lwp;
+           $RedirectOK = 1;
+       }
+       else {
             $RedirectOK = 0;
         }
     }






> I think that I might have changed this code to work this way, and
> overlooked that it could be passed as a simple boolean, even though
> that's the _only_ way it worked before I got my hands on it.
>
> So does passing the array reference actually affect the way the LWP
> user agent object operates? If so, that's cool, but it's undocumented.
> I'm not sure whether it should be documented, though, since if LWP
> isn't installed it certainly won't work with the simple request
> interface that Apache::TestRequest uses in its place.
>
> Regards,
>
> David

-- 
Boris

Reply via email to