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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
package Apache::FakeRequest;
$Apache::FakeRequest::VERSION = "1.00";
sub new {
my $class = shift;
bless {@_}, $class;
}
sub print { shift; CORE::print(@_) }
#dummy method stubs
my @methods = qw{
allow_options args
as_string auth_name auth_type
basic_http_header bootstrap bytes_sent
can_stack_handlers cgi_env cgi_header_out
cgi_var clear_rgy_endav connection
content content_encoding content_language
content_type dir_config document_root
err_header_out err_headers_out exit
filename get_basic_auth_pw get_remote_host
get_remote_logname handler hard_timeout
header_in header_only header_out
headers_in headers_out hostname import
internal_redirect_handler is_initial_req is_main
kill_timeout log_error log_reason
lookup_file lookup_uri main
max_requests_per_child method method_number
module next no_cache
note_basic_auth_failure notes parse_args
path_info perl_hook post_connection prev
protocol proxyreq push_handlers
query_string read read_client_block
read_length register_cleanup request
requires reset_timeout rflush
send_cgi_header send_fd send_http_header
sent_header seqno server
server_root_relative soft_timeout status
status_line subprocess_env taint
the_request translate_name unescape_url
unescape_url_info untaint uri warn
write_client
};
sub elem {
my($self, $key, $val) = @_;
$self->{$key} = $val if $val;
$self->{$key};
}
{
my @code;
for my $meth (@methods) {
push @code, "sub $meth { shift->elem('$meth', \@_) };";
}
eval "@code";
die $@ if $@;
}
package Apache::Constants;
sub OK { 0 }
sub DECLINED { -1 }
sub DONE { -2 }
sub CONTINUE { 100 }
sub DOCUMENT_FOLLOWS { 200 }
sub NOT_AUTHORITATIVE { 203 }
sub HTTP_NO_CONTENT { 204 }
sub MOVED { 301 }
sub REDIRECT { 302 }
sub USE_LOCAL_COPY { 304 }
sub HTTP_NOT_MODIFIED { 304 }
sub BAD_REQUEST { 400 }
sub AUTH_REQUIRED { 401 }
sub FORBIDDEN { 403 }
sub NOT_FOUND { 404 }
sub HTTP_METHOD_NOT_ALLOWED { 405 }
sub HTTP_NOT_ACCEPTABLE { 406 }
sub HTTP_LENGTH_REQUIRED { 411 }
sub HTTP_PRECONDITION_FAILED { 412 }
sub SERVER_ERROR { 500 }
sub NOT_IMPLEMENTED { 501 }
sub BAD_GATEWAY { 502 }
sub HTTP_SERVICE_UNAVAILABLE { 503 }
sub HTTP_VARIANT_ALSO_VARIES { 506 }
# methods
sub M_GET { 0 }
sub M_PUT { 1 }
sub M_POST { 2 }
sub M_DELETE { 3 }
sub M_CONNECT { 4 }
sub M_OPTIONS { 5 }
sub M_TRACE { 6 }
sub M_INVALID { 7 }
# options
sub OPT_NONE { 0 }
sub OPT_INDEXES { 1 }
sub OPT_INCLUDES { 2 }
sub OPT_SYM_LINKS { 4 }
sub OPT_EXECCGI { 8 }
sub OPT_UNSET { 16 }
sub OPT_INCNOEXEC { 32 }
sub OPT_SYM_OWNER { 64 }
sub OPT_MULTI { 128 }
sub OPT_ALL { 15 }
# satisfy
sub SATISFY_ALL { 0 }
sub SATISFY_ANY { 1 }
sub SATISFY_NOSPEC { 2 }
# remotehost
sub REMOTE_HOST { 0 }
sub REMOTE_NAME { 1 }
sub REMOTE_NOLOOKUP { 2 }
sub REMOTE_DOUBLE_REV { 3 }
sub MODULE_MAGIC_NUMBER { "The answer is 42" }
sub SERVER_VERSION { "1.x" }
sub SERVER_BUILT { "199908" }
1;
__END__
=head1 NAME
Apache::FakeRequest - fake request object for debugging
=head1 SYNOPSIS
use Apache::FakeRequest;
my $request = Apache::FakeRequest->new(method_name => 'value', ...);
=head1 DESCRIPTION
B<Apache::FakeRequest> is used to set up an empty Apache request
object that can be used for debugging. The B<Apache::FakeRequest>
methods just set internal variables of the same name as the method and
return the value of the internal variables. Initial values for
methods can be specified when the object is created. The I<print>
method prints to STDOUT.
Subroutines for Apache constants are also defined so that using
B<Apache::Constants> while debugging works, although the values of the
constants are hard-coded rather than extracted from the Apache source
code.
#!/usr/bin/perl
use Apache::FakeRequest ();
use mymodule ();
my $request = Apache::FakeRequest->new('get_remote_host'=>'foobar.com');
mymodule::handler($request);
=head1 AUTHORS
Doug MacEachern, with contributions from Andrew Ford <A.Ford@ford-mason.co.uk>.
|