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