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