You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-cvs@httpd.apache.org by st...@apache.org on 2004/12/21 00:42:22 UTC
svn commit: r122906 - in httpd/test/trunk/perl-framework/Apache-Test: . Apache-TestItSelf Apache-TestItSelf/Apache-TestMe Apache-TestItSelf/Apache-TestMe/t/basic Apache-TestItSelf/Apache-TestMe/t/conf Apache-TestItSelf/Apache-TestMe/t/response/TestBasic Apache-TestItSelf/t lib/Apache
Author: stas
Date: Mon Dec 20 15:42:20 2004
New Revision: 122906
URL: http://svn.apache.org/viewcvs?view=rev&rev=122906
Log:
- fix a bug in A-T config generation, when a vhost entry was in
autogenerated httpd.conf (e.g. coming from .pm file) and another from
extra.conf.in. We used to have a ports collision, since extra.conf
wasn't reparsed and the same port was getting assigned to more than
one vhost entry, preventing server startup:
default_ VirtualHost overlap on port 8530, the first has precedence
(98)Address already in use: make_sock: could not bind to address
0.0.0.0:8530 no listening sockets available, shutting down
could be reproduced with t/TEST -conf followed by t/TEST -maxclients 1
in the mp2 test suite (or the new Apache-TestMe test suite, which now
includes a special setup for this bug).
- added a test reproducing this problem in Apache-TestItSelf
- added the setup required to reproduce this problem in Apache-TestMe
Added:
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/basic/vhost.t (contents, props changed)
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/conf/extra.conf.in
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/response/TestBasic/Vhost.pm (contents, props changed)
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/t/minmaxclients.t (contents, props changed)
Modified:
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/ (props changed)
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/conf/ (props changed)
httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes
httpd/test/trunk/perl-framework/Apache-Test/Changes
httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm
Modified: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes?view=diff&rev=122906&p1=httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes&r1=122905&p2=httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes&r2=122906
==============================================================================
--- httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes (original)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/Changes Mon Dec 20 15:42:20 2004
@@ -8,9 +8,13 @@
=item 0.01
-write a basic mod_perl test: basic/hello.t
+new test basic/vhost.t which introduces a vhost entry in .pm. also
+added a dummy vhost entry in t/conf/extra.conf.in, the setup needed by
+t/minmaxclients.t from Apache-TestItSelf [Stas]
-starting the config test suite used by Apache::TestItSelf
+write a basic mod_perl test: basic/hello.t [Stas]
+
+starting the config test suite used by Apache::TestItSelf [Stas]
=back
Added: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/basic/vhost.t
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/basic/vhost.t?view=auto&rev=122906
==============================================================================
--- (empty file)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/basic/vhost.t Mon Dec 20 15:42:20 2004
@@ -0,0 +1,7 @@
+use Apache::TestUtil;
+use Apache::TestRequest 'GET_BODY_ASSERT';
+
+my $module = 'TestBasic::Vhost';
+my $url = Apache::TestRequest::module2url($module);
+t_debug("connecting to $url");
+print GET_BODY_ASSERT $url;
Added: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/conf/extra.conf.in
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/conf/extra.conf.in?view=auto&rev=122906
==============================================================================
--- (empty file)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/conf/extra.conf.in Mon Dec 20 15:42:20 2004
@@ -0,0 +1,16 @@
+# this vhost entry is needed to check that when t/TEST -maxclients 1
+# or similar is called after t/TEST -conf was run, and extra.conf
+# includes a vhost entry and httpd.conf includes an autogenerated
+# vhost entry from some .pm file, we used to have a collision, since
+# extra.conf wasn't reparsed and the same port was getting assigned to
+# more than one vhost entry, preventing server startup:
+#
+#default_ VirtualHost overlap on port 8530, the first has precedence
+#(98)Address already in use: make_sock: could not bind to address
+#0.0.0.0:8530 no listening sockets available, shutting down
+#
+# XXX: for now using a dummy vhost entry. later if needed to put a
+# real vhost entry in ths file, the dummy one can be removed
+#
+<VirtualHost foo_bar_tar>
+</VirtualHost>
Added: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/response/TestBasic/Vhost.pm
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/response/TestBasic/Vhost.pm?view=auto&rev=122906
==============================================================================
--- (empty file)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Apache-TestMe/t/response/TestBasic/Vhost.pm Mon Dec 20 15:42:20 2004
@@ -0,0 +1,28 @@
+package TestBasic::Vhost;
+
+use Apache::Const -compile => qw(OK);
+use Apache::Test;
+
+# XXX: adjust the test that it'll work under mp1 as well
+
+sub handler {
+
+ my $r = shift;
+
+ plan $r, tests => 1;
+
+ ok 1;
+
+ return Apache::OK;
+}
+
+1;
+__END__
+<NoAutoConfig>
+<VirtualHost TestBasic::Vhost>
+ <Location /TestBasic__Vhost>
+ SetHandler modperl
+ PerlResponseHandler TestBasic::Vhost
+ </Location>
+</VirtualHost>
+</NoAutoConfig>
Modified: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes?view=diff&rev=122906&p1=httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes&r1=122905&p2=httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes&r2=122906
==============================================================================
--- httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes (original)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/Changes Mon Dec 20 15:42:20 2004
@@ -8,12 +8,15 @@
=item 0.01
-new test: interactive.t: the interactive config
+new test: minmaxclients.t: testing a bug with vhosts reproducable by
+t/TEST -conf followed by t/TEST -maxclients 1 [Stas]
+
+new test: interactive.t: the interactive config [Stas]
new test: httpd_arg.t: passing -httpd argument to 'perl Makefile.PL'
-and to 't/TEST'
+and to 't/TEST' [Stas]
-starting the config test suite
+starting the config test suite [Stas]
=back
Added: httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/t/minmaxclients.t
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/t/minmaxclients.t?view=auto&rev=122906
==============================================================================
--- (empty file)
+++ httpd/test/trunk/perl-framework/Apache-Test/Apache-TestItSelf/t/minmaxclients.t Mon Dec 20 15:42:20 2004
@@ -0,0 +1,101 @@
+#
+# -minclients / -maxclients argument passed explicitly (to
+# Makefile.PL, to t/TEST, etc.)
+#
+
+use strict;
+use warnings FATAL => 'all';
+
+use Test::More;
+use MyTest::Util qw(myrun3 go_in go_out test_configs);
+use Apache::TestConfig ();
+
+my @configs = test_configs();
+my $tests_per_config = 18;
+plan tests => $tests_per_config * @configs;
+
+my $orig_dir = go_in();
+
+# min/maxclients of 10 should work for pretty much any test suite, so
+# for now hardcoded the number in this test
+my $clients = 10;
+for my $c (@configs) {
+ for my $opt_name (qw(minclients maxclients)) {
+ my $opt = "-$opt_name $clients";
+ makefile_pl_plus_opt($c, $opt);
+ t_TEST_plus_opt($c, $opt);
+ }
+}
+
+go_out($orig_dir);
+
+# 4 sub tests
+# explicit Makefile.PL -(mix|max)clients
+sub makefile_pl_plus_opt {
+ my $c = shift;
+ my $opt = shift;
+
+ my($cmd, $out, $err);
+
+ # clean and ignore the results
+ $cmd = "make clean";
+ ($out, $err) = myrun3($cmd);
+
+ my $makepl_arg = $c->{makepl_arg} || '';
+ $cmd = "$c->{perl_exec} Makefile.PL $makepl_arg $opt " .
+ "-httpd $c->{httpd_exec} -httpd_conf $c->{httpd_conf}";
+ ($out, $err) = myrun3($cmd);
+ unlike $err, qr/\[ error\]/, $cmd;
+
+ $cmd = "make";
+ ($out, $err) = myrun3($cmd);
+ is $err, "", $cmd;
+
+ my $test_verbose = $c->{test_verbose} ? "TEST_VERBOSE=1" : "";
+ $cmd = "make test $test_verbose";
+ ($out, $err) = myrun3($cmd);
+ like $out, qr/All tests successful/, $cmd;
+ unlike $err, qr/\[ error\]/, $cmd;
+}
+
+# 5 tests
+# explicit t/TEST -(mix|max)clients
+sub t_TEST_plus_opt {
+ my $c = shift;
+ my $opt = shift;
+
+ my($cmd, $out, $err);
+
+ # clean and ignore the results
+ $cmd = "make clean";
+ ($out, $err) = myrun3($cmd);
+
+ my $makepl_arg = $c->{makepl_arg} || '';
+ $cmd = "$c->{perl_exec} Makefile.PL $makepl_arg";
+ ($out, $err) = myrun3($cmd);
+ unlike $err, qr/\[ error\]/, $cmd;
+
+ $cmd = "make";
+ ($out, $err) = myrun3($cmd);
+ is $err, "", $cmd;
+
+ # the bug was:
+ # t/TEST -conf
+ # t/TEST -maxclients 1
+ #default_ VirtualHost overlap on port 8530, the first has precedence
+ #(98)Address already in use: make_sock: could not bind to address
+ #0.0.0.0:8530 no listening sockets available, shutting down
+
+ my $test_verbose = $c->{test_verbose} ? "-v " : "";
+ $cmd = "t/TEST -httpd $c->{httpd_exec} $test_verbose -conf";
+ ($out, $err) = myrun3($cmd);
+ unlike $err, qr/\[ error\]/, $cmd;
+
+ $cmd = "t/TEST -httpd $c->{httpd_exec} $test_verbose $opt";
+ ($out, $err) = myrun3($cmd);
+ like $out, qr/All tests successful/, $cmd;
+ unlike $err, qr/\[ error\]/, $cmd;
+}
+
+__END__
+
Modified: httpd/test/trunk/perl-framework/Apache-Test/Changes
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/Changes?view=diff&rev=122906&p1=httpd/test/trunk/perl-framework/Apache-Test/Changes&r1=122905&p2=httpd/test/trunk/perl-framework/Apache-Test/Changes&r2=122906
==============================================================================
--- httpd/test/trunk/perl-framework/Apache-Test/Changes (original)
+++ httpd/test/trunk/perl-framework/Apache-Test/Changes Mon Dec 20 15:42:20 2004
@@ -8,6 +8,17 @@
=item 1.18-dev
+fix a bug in A-T config generation, when a vhost entry was in
+autogenerated httpd.conf (e.g. coming from .pm file) and another from
+extra.conf.in. We used to have a ports collision, since extra.conf
+wasn't reparsed and the same port was getting assigned to more than
+one vhost entry, preventing server startup:
+ default_ VirtualHost overlap on port 8530, the first has precedence
+ (98)Address already in use: make_sock: could not bind to address
+ 0.0.0.0:8530 no listening sockets available, shutting down
+could be reproduced with t/TEST -conf followed by t/TEST -maxclients 1
+in the mp2 test suite (or the new Apache-TestMe test suite, which now
+includes a special setup for this bug). [Stas]
new TestConfig wrapper find_and_load_module [Chia-Liang Kao <chialiang
gmail.com>]
Modified: httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm
Url: http://svn.apache.org/viewcvs/httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm?view=diff&rev=122906&p1=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm&r1=122905&p2=httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm&r2=122906
==============================================================================
--- httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm (original)
+++ httpd/test/trunk/perl-framework/Apache-Test/lib/Apache/TestConfig.pm Mon Dec 20 15:42:20 2004
@@ -1371,25 +1371,21 @@
push @extra_conf, $generated;
}
- # if at least one .in file was modified or the derivative is
- # missing, regenerate them all (so information like assigned port
- # numbers will be correct)
- if ($self->extra_conf_files_needing_update) {
- for my $file (@conf_files) {
- local $Apache::TestConfig::File = $file;
+ # regenerate .conf files
+ for my $file (@conf_files) {
+ local $Apache::TestConfig::File = $file;
- my $in = Symbol::gensym();
- open($in, $file) or next;
+ my $in = Symbol::gensym();
+ open($in, $file) or next;
- (my $generated = $file) =~ s/\.in$//;
- my $out = $self->genfile($generated, $file);
- $self->replace_vars($in, $out);
+ (my $generated = $file) =~ s/\.in$//;
+ my $out = $self->genfile($generated, $file);
+ $self->replace_vars($in, $out);
- close $in;
- close $out;
+ close $in;
+ close $out;
- $self->check_vars;
- }
+ $self->check_vars;
}
#we changed order to give ssl the first port after DEFAULT_PORT