summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/t/apache/etags.t
diff options
context:
space:
mode:
Diffstat (limited to 'debian/perl-framework/t/apache/etags.t')
-rw-r--r--debian/perl-framework/t/apache/etags.t170
1 files changed, 170 insertions, 0 deletions
diff --git a/debian/perl-framework/t/apache/etags.t b/debian/perl-framework/t/apache/etags.t
new file mode 100644
index 0000000..6618a88
--- /dev/null
+++ b/debian/perl-framework/t/apache/etags.t
@@ -0,0 +1,170 @@
+#
+# Test the FileETag directive.
+#
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestRequest;
+use Apache::TestUtil;
+
+t_debug "Checking for existence of FileETag directive\n";
+my $resp = GET('/apache/etags/test.txt');
+my $rc = $resp->code;
+t_debug "Returned $rc:";
+if ($rc == 500) {
+ t_debug "Feature not supported, skipping..",
+ " Message was:", $resp->as_string;
+ if (defined($resp->content)) {
+ t_debug $resp->content;
+ }
+ plan tests => 1..0;
+ exit;
+}
+
+#
+# The tests verify the inclusion of the different fields, and
+# inheritance, according to the directories involved. All are
+# subdirectories under /apache/etags/. The key is the path, the value
+# is the pattern the ETag response header field needs to match,
+# and the comment is the keywords on the FileETag directive in
+# the directory's .htaccess file. A pattern of "" means the header
+# field is expected to be absent.
+#
+# The things we want to test are:
+#
+# 1. That the 'All' and 'None' keywords work.
+# 2. That the 'MTime', 'INode', and 'Size' keywords work,
+# alone and in combination.
+# 3. That '+MTime', '+INode', and '+Size' work, alone and
+# in combination.
+# 4. That '-MTime', '-INode', and '-Size' work, alone and
+# in combination.
+# 5. That relative keywords work in combination with non-relative
+# ones.
+# 6. That inheritance works properly.
+#
+my $x = '[0-9a-fA-F]+';
+my $tokens_1 = "^\"$x\"\$";
+my $tokens_2 = "^\"$x-$x\"\$";
+my $tokens_3 = "^\"$x-$x-$x\"\$";
+my %expect = ($tokens_1 => "one component in ETag field",
+ $tokens_2 => "two components in ETag field",
+ $tokens_3 => "three components in ETag field",
+ "" => "field to be absent"
+ );
+my $tokens_default = have_min_apache_version("2.3.15") ? $tokens_2 : $tokens_3;
+my %tests = (
+ '/default/' => $tokens_default,
+ #
+ # First, the absolute settings in various combinations,
+ # disregarding inheritance.
+ #
+ '/m/' => $tokens_1, # MTime
+ '/i/' => $tokens_1, # INode
+ '/s/' => $tokens_1, # Size
+ '/mi/' => $tokens_2, # MTime INode
+ '/ms/' => $tokens_2, # MTime Size
+ '/is/' => $tokens_2, # INode Size
+ '/mis/' => $tokens_3, # MTime INode Size
+ '/all/' => $tokens_3, # All
+ '/none/' => "", # None
+ '/all/m/' => $tokens_1, # MTime
+ '/all/i/' => $tokens_1, # INode
+ '/all/s/' => $tokens_1, # Size
+ '/all/mi/' => $tokens_2, # MTime INode
+ '/all/ms/' => $tokens_2, # MTime Size
+ '/all/is/' => $tokens_2, # INode Size
+ '/all/mis/' => $tokens_3, # MTime INode Size
+ '/all/inherit/' => $tokens_3, # no directive
+ '/none/m/' => $tokens_1, # MTime
+ '/none/i/' => $tokens_1, # INode
+ '/none/s/' => $tokens_1, # Size
+ '/none/mi/' => $tokens_2, # MTime INode
+ '/none/ms/' => $tokens_2, # MTime Size
+ '/none/is/' => $tokens_2, # INode Size
+ '/none/mis/' => $tokens_3, # MTime INode Size
+ '/none/inherit/' => "", # no directive
+ #
+ # Now for the relative keywords. First, subtract fields
+ # in a place where they all should have been inherited.
+ #
+ '/all/minus-m/' => $tokens_2, # -MTime
+ '/all/minus-i/' => $tokens_2, # -INode
+ '/all/minus-s/' => $tokens_2, # -Size
+ '/all/minus-mi/' => $tokens_1, # -MTime -INode
+ '/all/minus-ms/' => $tokens_1, # -MTime -Size
+ '/all/minus-is/' => $tokens_1, # -INode -Size
+ '/all/minus-mis/' => "", # -MTime -INode -Size
+ #
+ # Now add them in a location where they should all be absent.
+ #
+ '/none/plus-m/' => $tokens_1, # +MTime
+ '/none/plus-i/' => $tokens_1, # +INode
+ '/none/plus-s/' => $tokens_1, # +Size
+ '/none/plus-mi/' => $tokens_2, # +MTime +INode
+ '/none/plus-ms/' => $tokens_2, # +MTime +Size
+ '/none/plus-is/' => $tokens_2, # +INode +Size
+ '/none/plus-mis/' => $tokens_3, # +MTime +INode +Size
+ #
+ # Try subtracting them below where they were added.
+ #
+ '/none/plus-mis/minus-m/' => $tokens_2, # -MTime
+ '/none/plus-mis/minus-i/' => $tokens_2, # -INode
+ '/none/plus-mis/minus-s/' => $tokens_2, # -Size
+ '/none/plus-mis/minus-mi/' => $tokens_1, # -MTime -INode
+ '/none/plus-mis/minus-ms/' => $tokens_1, # -MTime -Size
+ '/none/plus-mis/minus-is/' => $tokens_1, # -INode -Size
+ '/none/plus-mis/minus-mis/' => "", # -MTime -INode -Size
+ #
+ # Now relative settings under a non-All non-None absolute
+ # setting location.
+ #
+ '/m/plus-m/' => $tokens_1, # +MTime
+ '/m/plus-i/' => $tokens_2, # +INode
+ '/m/plus-s/' => $tokens_2, # +Size
+ '/m/plus-mi/' => $tokens_2, # +MTime +INode
+ '/m/plus-ms/' => $tokens_2, # +MTime +Size
+ '/m/plus-is/' => $tokens_3, # +INode +Size
+ '/m/plus-mis/' => $tokens_3, # +MTime +INode +Size
+ '/m/minus-m/' => "", # -MTime
+ '/m/minus-i/' => "", # -INode
+ '/m/minus-s/' => "", # -Size
+ '/m/minus-mi/' => "", # -MTime -INode
+ '/m/minus-ms/' => "", # -MTime -Size
+ '/m/minus-is/' => "", # -INode -Size
+ '/m/minus-mis/' => "" # -MTime -INode -Size
+ );
+
+my $testcount = scalar(keys(%tests));
+plan tests => $testcount;
+
+for my $key (keys(%tests)) {
+ my $uri = "/apache/etags" . $key . "test.txt";
+ my $pattern = $tests{$key};
+ t_debug "---", "HEAD $uri",
+ "Expecting " . $expect{$pattern};
+ $resp = HEAD($uri);
+ my $etag = $resp->header("ETag");
+ if (defined($etag)) {
+ t_debug "Received $etag";
+ ok ($etag =~ /$pattern/);
+ }
+ else {
+ t_debug "ETag field is missing";
+ if ($tests{$key} eq "") {
+ ok 1;
+ }
+ else {
+ t_debug "ETag field was expected";
+ ok 0;
+ }
+ }
+}
+
+#
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# End:
+#