Hi! Here's my first submission. This test is written against your perl-framework test environment.
It tests that subrequests are correctly parsing and taking into
account directives that are declared in <Directory>, <Location> sections
and .htaccess files. I'm using the same test scenario I gave in bug
#41960.
Basically, this requires having the following global content-type:
AddType text/html; charset=iso-8859-1 html/htm
The test consists on overloading the charset to utf-8:
AddType text/html; charset=utf-8 html/htm
in the test locations under t/apache/subrequests/, one each
for <Directory>, <Location>, and .htaccess. There is a file each
time that is being requested with its complete name
http://..../apache/subrequests/.../hello.html
and through content-negotiation:
http://..../apache/subrequests/.../hello
It is the content-negotiation that is being processed thru subrequests.
The patch I sent to bug #41960 fixes the subrequest bugs. Without
that patch, one of these tests will return an error (under Apache/2.2.4).
I'm attaching a tgz file which includes a patch to extra.conf.in,
and new files to be stored under t/htdocs/apache/subrequests and
t/subrequests.t The tar archive contains the full hierarchy.
I put this test under t/apache rather than under t/modules because it
is testing subrequests, even if we do so thru content-negotiation. The
tests could be expanded to any other directive that is declared for
a specific location.
Comments are welcome.
Cheers,
-jose
=== inline version of the test and extra.config.in section follows ==
=== subrequests.t ====
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestRequest;
use Apache::TestUtil;
plan tests => 6, have_module qw(mod_negotiation mod_mime);
## Returns ok if the returned content-type is the same as the
## expected one.
#
sub check_content_type
{
my $path = shift;
my $expected = shift;
my $error_msg = shift;
my $h = HEAD_STR $path;
## parse response headers looking for our headers
my $actual_value;
foreach my $head (split /\n/, $h) {
if ($head =~ /^Content-Type: (.*)$/) {
$actual_value = $1;
last;
}
}
ok t_cmp($actual_value, $expected, $error_msg);
}
## The server is configured to return text/html; charset=iso8859-1 by default
## The different section overrides change this to charset=utf-8.
## We do the test with and without content-negotiation
my $expected_type = "text/html; charset=utf-8";
check_content_type ("/apache/subrequests/dir_override/hello.html",
$expected_type,
"subrequests with <Directory> overrides");
check_content_type ("/apache/subrequests/dir_override/hello",
$expected_type,
"subrequests with <Directory> overrides and conn-neg");
check_content_type ("/apache/subrequests/location_override/hello.html",
$expected_type,
"subrequests with <Location> overrides");
check_content_type ("/apache/subrequests/location_override/hello",
$expected_type,
"subrequests with <Location> overrides and conn-neg");
check_content_type ("/apache/subrequests/htaccess_override/hello.html",
$expected_type,
"subrequests with .htaccess overrides");
check_content_type ("/apache/subrequests/htaccess_override/hello",
$expected_type,
"subrequests with .htaccess overrides and conn-neg");
========== extra.conf.in section ==
##
## subrequests test config
##
<IfDefine APACHE2>
<IfModule mod_mime.c>
AddType text/html;charset=iso-8859-1 html htm
</IfModule>
<IfModule mod_negotiation.c>
<Directory @SERVERROOT@/htdocs/apache/subrequests/dir_override>
Options +MultiViews
AddType text/html;charset=utf-8 html htm
</Directory>
<Location "/apache/subrequests/location_override">
Options +MultiViews
AddType text/html;charset=utf-8 html htm
</Location>
<Directory "@SERVERROOT@/htdocs/apache/subrequests/htaccess_override/">
Options +MultiViews
AllowOverride FileInfo
</Directory>
</IfModule>
</IfDefine>
subrequesttest.tgz
Description: GNU Unix tar archive
