The mod_info test (t/modules/info.t) asks Apache::Test::config() for a
list of modules.  It then expects each of those modules to be reported
by mod_info.  But some of those modules are not actually loaded
because of modules which are skipped by TestConfigParse.pm

#XXX mod_jk requires JkWorkerFile or JkWorker to be configured
#skip it for now, tomcat has its own test suite anyhow.
#XXX: mod_casp2.so requires other settings in addition to LoadModule
#XXX: mod_bwshare.so blocks fast requests that tests are doing
my @autoconfig_skip_module = qw(mod_jk.c mod_casp2.c mod_bwshare.c);

If mod_jk is in the configuration being tested, the mod_info test will
fail because it expects mod_jk to be reported by mod_info, even though
the LoadModule for mod_jk is skipped.

One possible fix is to consult should_skip_module() to see if it was
skipped from the test httpd.conf file too:

Index: t/modules/info.t
===================================================================
--- t/modules/info.t    (revision 825306)
+++ t/modules/info.t    (working copy)
@@ -28,7 +28,7 @@
 }

 foreach (sort keys %$mods) {
-    push(@expected,$_) if $mods->{$_};
+    push(@expected,$_) if $mods->{$_} && !$config->should_skip_module($_);
 }
 @actual = sort @actual;
 @expected = sort @expected;

Another possible fix is to omit skipped modules from the module list:

Index: Apache-Test/lib/Apache/TestConfigParse.pm
===================================================================
--- Apache-Test/lib/Apache/TestConfigParse.pm   (revision 822728)
+++ Apache-Test/lib/Apache/TestConfigParse.pm   (working copy)
@@ -224,15 +224,15 @@

         $name = $modname_alias{$name} if $modname_alias{$name};

-        # remember all found modules
-        $self->{modules}->{$name} = $file;
-        debug "Found: $modname => $name";
-
         if ($self->should_skip_module($name)) {
             debug "Skipping LoadModule of $name";
             next;
         }

+        # remember all found modules that aren't skipped
+        $self->{modules}->{$name} = $file;
+        debug "Found: $modname => $name";
+
         debug "LoadModule $modname $name";

         # sometimes people have broken system-wide httpd.conf files,

So is either of these a reasonable fix?  (It doesn't seem right that
info.t has to worry about modules which were found in the
configuration but not loaded, but I don't know what is expected of the
configuration object.)

Reply via email to