stas 2002/12/13 02:46:20
Modified: src/docs/general/testing testing.pod
Log:
Document the following configuration issues:
- Virtual Hosts
- Running Pre-Configuration Code
- Controlling the Configuration Order (a new feature!)
Revision Changes Path
1.3 +155 -3 modperl-docs/src/docs/general/testing/testing.pod
Index: testing.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- testing.pod 2 Dec 2002 16:16:18 -0000 1.2
+++ testing.pod 13 Dec 2002 10:46:20 -0000 1.3
@@ -2429,11 +2429,163 @@
to a minimum and let Perl do the rest of the job for us.
+=head3 Virtual Hosts
+
+C<Apache::Test> automatically assigns an unused port for the virtual
+host configuration. Just make sure that you use the package name in
+the place where you usually specify a I<hostname:port> value. For
+example for the following package:
+
+ #file:MyApacheTest/Foo.pm
+ #------------------------
+ package MyApacheTest::Foo;
+ ...
+ 1;
+ __END__
+ <VirtualHost MyApacheTest::Foo>
+ <Location /test_foo>
+ ....
+ </Location>
+ </VirtualHost>
+
+After running:
+
+ % t/TEST -conf
+
+Check the autogenerated I<t/conf/httpd.conf> and you will find what
+port was assigned. Of course it can change when more tests which
+require a special virtual host are used.
+
+Now in the request script, you can figure out what port that virtual
+host was assigned, using the package name. For example:
+
+ #file:test_foo.t
+ #---------------
+ use Apache::TestRequest;
+
+ my $module = "MyApacheTest::Foo;";
+ my $config = Apache::Test::config();
+ Apache::TestRequest::module($module);
+ my $hostport = Apache::TestRequest::hostport($config);
+
+ print GET_BODY "http://$hostport/test_foo";
+
+=head3 Running Pre-Configuration Code
+
+Sometimes you need to setup things for the test. This usually includes
+creating directories and files, and populating the latter with some
+data, which will be used at request time. Instead of performing that
+operation in the client script every time a test is run, it's usually
+better to do it once when the server is configured. If you wish to run
+such a code, all you have to do is to add a special subroutine
+C<APACHE_TEST_CONFIGURE> in the response package (assuming that that
+response package exists). When server is configured (C<t/TEST -conf>)
+it scans all the response packages for that subroutine and if found
+runs it.
+
+C<APACHE_TEST_CONFIGURE> accepts two arguments: the package name of
+the file this subroutine is defined in and the C<Apache::TestConfig>
+configuration object.
+
+Here is an example of a package that uses such a subroutine:
+
+ package TestDirective::perlmodule;
+
+ use strict;
+ use warnings FATAL => 'all';
+
+ use Apache::Test ();
+
+ use Apache::RequestRec ();
+ use Apache::RequestIO ();
+ use File::Spec::Functions qw(catfile);
+
+ use Apache::Const -compile => 'OK';
+
+ sub handler {
+ my $r = shift;
+
+ $r->content_type('text/plain');
+ $r->puts($ApacheTest::PerlModuleTest::MAGIC || '');
+
+ Apache::OK;
+ }
+
+ sub APACHE_TEST_CONFIGURE {
+ my ($class, $self) = @_;
+
+ my $vars = $self->{vars};
+ my $target_dir = catfile $vars->{documentroot}, 'testdirective';
+
+ my $magic = __PACKAGE__;
+ my $content = <<EOF;
+ package ApacheTest::PerlModuleTest;
+ \$ApacheTest::PerlModuleTest::MAGIC = '$magic';
+ 1;
+ EOF
+ my $file = catfile $target_dir,
+ 'perlmodule-vh', 'ApacheTest', 'PerlModuleTest.pm';
+ $self->writefile($file, $content, 1);
+ }
+ 1;
+
+In this example's function a directory is created. Then a file with
+some perl code as a content is created.
+
+
+=head3 Controling the Configuration Order
+
+Sometimes it's important in which order the configuration section of
+each response package is inserted. C<Apache::Test> controls the
+insertion order using a special token C<APACHE_TEST_CONFIG_ORDER>. To
+decide on the configuration insertion order, C<Apache::Test> scans all
+response packages and tries to match the following pattern:
+
+ /APACHE_TEST_CONFIG_ORDER\s+([+-]?\d+)/
+
+So you can assign any integer number (positive or negative). If the
+match fails, it's assumed that the token's value is 0. Next a simple
+numerical search is performed and those configuration sections with
+lower token value are inserted first.
+
+It's not specified how sections with the same token value are
+ordered. This usually depends on the order the files were read from
+the disk, which may vary from machine to machine and shouldn't be
+relied upon.
+
+As already mentioned by default all configuration sections have a
+token whose value is 0, meaning that their ordering is
+unimportant. Now if you want to make sure that some section is
+inserted first, assign to it a negative number, e.g.:
+
+ # APACHE_TEST_CONFIG_ORDER -150
+
+Now if a new test is added and it has to be the first, add to this new
+test a token with a negative value whose absolute value is higher than
+C<-150>, e.g.:
+
+ # APACHE_TEST_CONFIG_ORDER -151
+
+or
+
+ # APACHE_TEST_CONFIG_ORDER -500
+
+Decide how big the gaps should be by thinking ahead. This is similar
+to the Basic language line numbering ;) In any case, you can always
+adjust other tests' token if you need to squeeze a number between two
+consequent integers.
+
+If on the other hand you want to ensure that some test is configured
+last, use the highest positive number, e.g.:
+
+ # APACHE_TEST_CONFIG_ORDER 100
+
+If some other test needs to be configured just before the one we just
+inserted, assign a token with a lower value, e.g.:
+
+ # APACHE_TEST_CONFIG_ORDER 99
-META: Virtual host?
-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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]