blob: c2406d3e255595c4aab79dd05137a13f0530bbb8 [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
package TestCompat::request;
# $r->"method" compat layer tests
# these tests are all run and validated on the server side.
use strict;
use warnings FATAL => 'all';
use Apache::TestUtil;
use Apache::Test;
use APR::Finfo ();
use File::Spec::Functions qw(catfile);
use Apache2::compat ();
use Apache::Constants qw(OK REMOTE_HOST);
sub handler {
my $r = shift;
plan $r, tests => 22;
$r->send_http_header('text/plain');
# header_in() and header_out() and err_header_out()
for my $prefix ('err_', '') {
my @ways = 'out';
push @ways, 'in' unless $prefix;
for my $way (@ways) {
my $sub_test = "${prefix}header_$way";
my $sub_good = "${prefix}headers_$way";
my $key = 'header-test';
# scalar context
{
my $key;
if ($way eq 'in') {
$key = "user-agent"; # should exist with lwp
} else {
# outgoing headers aren't set yet, so we set one
$key = "X-barabara";
$r->$sub_good->set($key, $key x 2);
}
ok t_cmp($r->$sub_test($key),
$r->$sub_good->get($key),
"\$r->$sub_test in scalar context");
}
# list context
{
my @exp = qw(foo bar);
$r->$sub_good->add($key => $_) for @exp;
ok t_cmp([ $r->$sub_test($key) ],
\@exp,
"\$r->$sub_test in list context");
}
# set
{
my $exp = $key x 2;
$r->$sub_test($key => $exp);
my $got = $r->$sub_test($key);
ok t_cmp($got, $exp, "\$r->$sub_test set()");
}
# unset
{
my $exp = undef;
$r->$sub_test($key => $exp);
my $got = $r->$sub_test($key);
ok t_cmp($got, $exp, "\$r->$sub_test unset()");
}
}
}
# $r->filename
{
Apache2::compat::override_mp2_api('Apache2::RequestRec::filename');
my $orig = $r->filename;
my $new = catfile Apache::Test::vars("serverroot"),
"conf", "httpd.conf";
# in mp1 setting filename, updates $r's finfo (not in mp2)
$r->filename($new);
ok t_cmp $r->finfo->size, -s $new , "new filesize";
# restore
$new = __FILE__;
$r->filename($new);
ok t_cmp $r->finfo->size, -s $new , "new filesize";
# restore the real 2.0 filename() method, now that we are done
# with the compat one
Apache2::compat::restore_mp2_api('Apache2::RequestRec::filename');
}
# $r->notes
{
Apache2::compat::override_mp2_api('Apache2::RequestRec::notes');
my $key = 'notes-test';
# get/set scalar context
{
my $val = 'ok';
$r->notes($key => $val);
ok t_cmp($val, $r->notes->get($key), "\$r->notes->get(\$key)");
ok t_cmp($val, $r->notes($key), "\$r->notes(\$key)");
}
# unset
{
my $exp = undef;
$r->notes($key => $exp);
my $got = $r->notes($key);
ok t_cmp($got, $exp, "\$r->notes unset()");
}
# get/set list context
{
my @exp = qw(foo bar);
$r->notes->add($key => $_) for @exp;
ok t_cmp([ $r->notes($key) ], \@exp, "\$r->notes in list context");
}
# restore the real 2.0 notes() method, now that we are done
# with the compat one
Apache2::compat::restore_mp2_api('Apache2::RequestRec::notes');
}
# get_remote_host()
ok $r->get_remote_host() || 1;
ok $r->get_remote_host(Apache2::Const::REMOTE_HOST) || 1;
# post_connection()
$r->post_connection(sub { OK });
ok 1;
# register_cleanup
ok 1;
$r->register_cleanup(sub { OK });
OK;
}
1;