You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs-cvs@perl.apache.org by st...@apache.org on 2002/01/01 13:11:50 UTC
cvs commit: modperl-docs/src/docs/2.0/devel/testing testing.pod
stas 02/01/01 04:11:50
Modified: src/docs/2.0/devel/testing testing.pod
Log:
- document request/response shortcuts
Revision Changes Path
1.2 +202 -4 modperl-docs/src/docs/2.0/devel/testing/testing.pod
Index: testing.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/testing/testing.pod,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- testing.pod 27 Dec 2001 11:15:04 -0000 1.1
+++ testing.pod 1 Jan 2002 12:11:50 -0000 1.2
@@ -1348,10 +1348,207 @@
=back
-=head2 Request Generation Methods
+=head2 Request and Response Methods
-META: here goes the explanation of shortcuts: GET_BODY, POST_BODY,
-etc.
+If you have LWP (libwww-perl) installed its C<LWP::UserAgent> serves
+as an user agent in tests, otherwise C<Apache::TestClient> tries to
+emulate partial LWP functionality. So most of the LWP documentation
+applies here, but the C<Apache::Test> framework provides shortcuts
+that hide many details, making the test writing a simple and swift
+task. Before using these shortcuts C<Apache::TestRequest> should be
+loaded, and its import() method will fetch the shortcuts into the
+caller namespace:
+
+ use Apache::TestRequest;
+
+Request generation methods issue a request and return a response
+object (C<HTTP::Response> if LWP is available). They are documented in
+the C<HTTP::Request::Common> manpage. The following methods are
+available:
+
+=over
+
+=item * GET
+
+Issues the C<GET> request. For example, issue a request and retrieve
+the response content:
+
+ $url = "$location?foo=1&bar=2";
+ $res = GET $url;
+ $str = $res->content;
+
+To set request headers, supply them after the C<$url>, e.g.:
+
+ $res = GET $url, 'Content-type' => 'text/html';
+
+=item * HEAD
+
+Issues the C<HEAD> request. For example issue a request and check that
+the response's I<Content-type> is I<text/plain>:
+
+ $url = "$location?foo=1&bar=2";
+ $res = HEAD $url;
+ ok $res->content_type() eq 'text/plain';
+
+=item * POST
+
+Issues the C<POST> request. For example:
+
+ $content = 'PARAM=%33';
+ $res = POST $location, content => $content;
+
+The second argument to C<POST> can be a reference to an array or a
+hash with key/value pairs to emulate HTML E<lt>formE<gt> C<POST>ing.
+
+=item * PUT
+
+Issues the C<PUT> request.
+
+=item * OPTIONS
+
+META: ???
+
+=back
+
+These are two special methods added by the C<Apache::Test> framework:
+
+=over
+
+=item * UPLOAD
+
+This special method allows to upload a file or a string which will
+look as an uploaded file to the server. To upload a file use:
+
+ UPLOAD $location, filename => $filename;
+
+You can add extra request headers as well:
+
+ UPLOAD $location, filename => $filename, 'X-Header-Test' => 'Test';
+
+To upload a string as a file, use:
+
+ UPLOAD $location, content => 'some data';
+
+=item * UPLOAD_BODY
+
+Retrieves the content from the response resulted from doing
+C<UPLOAD>. It's equal to:
+
+ my $body UPLOAD(@_)->content;
+
+For example, this code retrieves the content of the response resulted
+from file upload request:
+
+ my $str = UPLOAD_BODY $location, filename => $filename;
+
+=back
+
+
+Once the response object is returned, various response object methods
+can be applied to it. Probably the most useful ones are:
+
+ $content = $res->content;
+
+to retrieve the content fo the respose and:
+
+ $content_type = $res->header('Content-type');
+
+to retrieve specific headers.
+
+Refer to the C<HTTP::Response> manpage for a complete reference of
+these and other methods.
+
+A few response retrieval shortcuts can be used to retrieve the wanted
+parts of the response. To apply these simply add the shortcut name to
+one of the request shortcuts listed earlier. For example instead of
+retrieving the content part of the response via:
+
+ $res = GET $url;
+ $str = $res->content;
+
+simply use:
+
+ $str = GET_BODY $url;
+
+=over
+
+=item * RC
+
+returns the I<response code>, equivalent to:
+
+ $res->code;
+
+For example to test whether some URL is bogus:
+
+ use Apache::Const 'NOT_FOUND';
+ ok GET_RC('/bogus_url') == NOT_FOUND;
+
+You usually need to import and use C<Apache::Const> constants for the
+response code comparisons, rather then using codes' corresponding
+numerical values directly. You can import groups of code as well. For
+example:
+
+ use Apache::Const ':common';
+
+Refer to the C<Apache::Const> manpage for a complete reference. Also
+you may need to use C<APR> and mod_perl constants, which reside in
+C<APR::Const> and C<ModPerl::Const> modules respectively.
+
+=item * OK
+
+tests whether the response was successful, equivalent to:
+
+ $res->is_success;
+
+For example:
+
+ ok GET_OK '/foo';
+
+=item * STR
+
+returns the response (both, headers and body) as a string and is
+equivalent to:
+
+ $res->as_string;
+
+Mostly useful for debugging, for example:
+
+ use Apache::TestUtil;
+ t_debug POST_STR '/test.pl';
+
+=item * HEAD
+
+returns the headers part of the response as a multi-line string.
+
+For example, this code dumps all the response headers:
+
+ use Apache::TestUtil;
+ t_debug GET_HEAD '/index.html';
+
+=item * BODY
+
+returns the response body and is equivalent to:
+
+ $res->content;
+
+For example, this code validates that the response's body is the one
+that was expected:
+
+ use Apache::TestUtil;
+ ok GET_BODY('/index.html') eq $expect;
+
+=back
+
+=head2 Other Request Generation helpers
+
+META: these methods need documentation
+
+Request part:
+
+ Apache::TestRequest::scheme('http'); #force http for t/TEST -ssl
+ Apache::TestRequest::module($module);
+ my $config = Apache::Test::config();
+ my $hostport = Apache::TestRequest::hostport($config);
=head2 Starting Multiple Servers
@@ -2146,7 +2343,8 @@
META: Virtual host?
-META: to be completed
+META: a special -configure time method in response part:
+APACHE_TEST_CONFIGURE
=head2 Threaded versus Non-threaded Perl Test's Compatibility
---------------------------------------------------------------------
To unsubscribe, e-mail: docs-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: docs-cvs-help@perl.apache.org