You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/09/23 01:33:18 UTC
cvs commit: modperl-2.0/t/response/TestApache cookie.pm
stas 2003/09/22 16:33:18
Added: t/modperl cookie2.t
t/response/TestModperl cookie2.pm
Removed: t/apache cookie.t
t/response/TestApache cookie.pm
Log:
- move the perl-script cookie tests to be after modperl tests, also change
the location to t/modperl/ as these aren't apache tests.
- extend testing to check that the cookie value is not persitent between
requests
Revision Changes Path
1.1 modperl-2.0/t/modperl/cookie2.t
Index: cookie2.t
===================================================================
use strict;
use warnings FATAL => 'all';
# The Cookie HTTP header can be accessed via $r->headers_in and in certain
# situations via $ENV{HTTP_COOKIE}.
#
# in this test we shouldn't be able get the cookie via %ENV,
# since 'SetHandler modperl' doesn't set up CGI env var. unless the
# handler calls "$r->subprocess_env" by itself
#
# since the test is run against the same interpreter we also test that
# the cookie value doesn't persist if it makes it to %ENV.
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;
plan tests => 3;
my $module = 'TestModperl::cookie2';
my $location = '/' . Apache::TestRequest::module2path($module);
my %expected =
(
header => "header",
subprocess_env => "subprocess_env",
env => '',
);
my @tests_ordered = qw(header subprocess_env env);
t_debug "getting the same interp ID for $location";
my $same_interp = Apache::TestRequest::same_interp_tie($location);
my $skip = $same_interp ? 0 : 1;
for my $test (@tests_ordered) {
my $cookie = "key=$test";
my $received = get_body($same_interp, \&GET,
"$location?$test", Cookie => $cookie);
$skip++ unless defined $received;
skip_not_same_interp(
$skip,
$expected{$test},
$received,
"perl-script+SetupEnv/cookie: $test"
);
}
# if we fail to find the same interpreter, return undef (this is not
# an error)
sub get_body {
my $res = eval {
Apache::TestRequest::same_interp_do(@_);
};
return undef if $@ =~ /unable to find interp/;
return $res->content if $res;
die $@ if $@;
}
# make the tests resistant to a failure of finding the same perl
# interpreter, which happens randomly and not an error.
# the first argument is used to decide whether to skip the sub-test,
# the rest of the arguments are passed to 'ok t_cmp';
sub skip_not_same_interp {
my $skip_cond = shift;
if ($skip_cond) {
skip "Skip couldn't find the same interpreter";
}
else {
my($package, $filename, $line) = caller;
# trick ok() into reporting the caller filename/line when a
# sub-test fails in sok()
return eval <<EOE;
#line $line $filename
ok &t_cmp;
EOE
}
}
1.1 modperl-2.0/t/response/TestModperl/cookie2.pm
Index: cookie2.pm
===================================================================
package TestModperl::cookie2;
use strict;
use warnings FATAL => 'all';
use Apache::TestTrace;
use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::Const -compile => 'OK';
sub access {
my $r = shift;
$r->subprocess_env if $r->args eq 'subprocess_env';
my($key, $val) = cookie($r);
die "I shouldn't get the cookie" if $r->args eq 'env' && defined $val;
return Apache::OK;
}
sub handler {
my $r = shift;
my($key, $val) = cookie($r);
$r->print($val) if defined $val;
return Apache::OK;
}
sub cookie {
my $r = shift;
my $header = $r->headers_in->{Cookie} || '';
my $env = $ENV{HTTP_COOKIE} || $ENV{COOKIE} || ''; # from CGI::cookie2
debug "cookie (" .$r->args . "): header: [$header], env: [$env]";
return split '=', $r->args eq 'header' ? $header : $env;
}
1;
__DATA__
SetHandler modperl
PerlModule TestModperl::cookie2
PerlInitHandler Apache::TestHandler::same_interp_fixup
PerlAccessHandler TestModperl::cookie2::access
PerlResponseHandler TestModperl::cookie2