File: include_subreq.pm

package info (click to toggle)
libapache2-mod-perl2 2.0.4-7%2Bsqueeze1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 9,896 kB
  • ctags: 3,820
  • sloc: perl: 56,663; ansic: 14,001; makefile: 93; sh: 38
file content (77 lines) | stat: -rw-r--r-- 2,232 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package TestModules::include_subreq;

# this test calls a simple response handler, whose output includes a
# simple SSI directive, processed by the INCLUDES output filter, which
# triggers another response handler, which again returns an SSI
# directive, again processed by INCLUDES, which again calls a response
# handler
#
# main
# resp => INCLUDES =>                                        => client
#                  => 1st                                  =>
#                     subreq => INCLUDES =>              =>
#                     response           =>            =>
#                                        => 2nd      =>
#                                           subreq =>
#                                           response
#
#
#
# here we test whether :Apache perlio (STDOUT) is reentrant, since the test
# overrides STDOUT 3 times, recursively.

use strict;
use warnings FATAL => 'all';

use Apache::TestTrace;

use Apache2::Const -compile => 'OK';

sub handler {
    my $r = shift;

    $r->content_type('text/plain');

    my $path_info = $r->path_info || '';
    my $uri = $r->uri;

    debug "uri: $uri, path_info: $path_info";

    if ($path_info eq '/one') {
        $uri =~ s/one/two/;
        print qq[subreq <!--#include virtual="$uri" -->ok];
    }
    elsif ($path_info eq '/two') {
        $uri = "/TestModules__include_subreq_dup/three";
        #$uri =~ s/two/three/;
        print qq[is <!--#include virtual="$uri" -->];
        #print "is";
    }
    elsif ($path_info eq '/three') {
        print "quite ";
    }
    else {
        die "something is wrong, didn't get path_info";
    }

    Apache2::Const::OK;
}

1;
__END__
# notice that perl-script is used on purpose here - testing whether
# :Apache perlio is reentrant (SetHandler modperl doesn't go through
# :Apache perlio layer)
SetHandler perl-script
PerlSetOutputFilter INCLUDES
Options +IncludesNoExec
<Base>
# it's silly that we have to duplicate the resource, but mod_include
# otherwise thinks we have a recursive call loop
<Location /TestModules__include_subreq_dup>
    PerlSetOutputFilter INCLUDES
    Options +IncludesNoExec
    SetHandler perl-script
    PerlResponseHandler TestModules::include_subreq
</Location>
</Base>