From 6c9a5e8df38c6bd90845743a9e145b639d44b9b2 Mon Sep 17 00:00:00 2001 From: Alex Rousskov Date: Tue, 30 Aug 2022 15:07:49 +0000 Subject: [PATCH] Fixed "make check" in a --disable-auth-basic build (#1125) FATAL: Bungled squidconf/bug4832 line 1: auth_param basic /dev/null FAIL: squid.conf test: squidconf/bug4832 Also added initial support for test-suite/squidconf/ tests that depend on ./configure options/results. This framework will be extended to support testing with invalid configuration files that Squid must reject. Existing Squid configuration files in test-suite/squidconf/ were given a .conf filename extension for ease of auto-distinguishing them from .instructions files that contain testing "rules". The customary .conf extension also improves handling of those files by humans. --- test-suite/Makefile.am | 7 +- .../squidconf/{bug4832 => bug4832.conf} | 0 .../squidconf/bug4832.conf.instructions | 1 + test-suite/squidconf/{empty => empty.conf} | 0 ...ternal_acl_type => external_acl_type.conf} | 0 .../squidconf/{mgr_passwd => mgr_passwd.conf} | 0 test-suite/squidconf/{regex => regex.conf} | 0 .../{regressions-3.3 => regressions-3.3.conf} | 0 ...sions-3.4.0.1 => regressions-3.4.0.1.conf} | 0 ...sions-3.5.0.2 => regressions-3.5.0.2.conf} | 0 ...essions-4.0.18 => regressions-4.0.18.conf} | 0 .../squidconf/{time_units => time_units.conf} | 0 test-suite/test-squid-conf.sh | 74 +++++++++++++++++++ 13 files changed, 79 insertions(+), 3 deletions(-) rename test-suite/squidconf/{bug4832 => bug4832.conf} (100%) create mode 100644 test-suite/squidconf/bug4832.conf.instructions rename test-suite/squidconf/{empty => empty.conf} (100%) rename test-suite/squidconf/{external_acl_type => external_acl_type.conf} (100%) rename test-suite/squidconf/{mgr_passwd => mgr_passwd.conf} (100%) rename test-suite/squidconf/{regex => regex.conf} (100%) rename test-suite/squidconf/{regressions-3.3 => regressions-3.3.conf} (100%) rename test-suite/squidconf/{regressions-3.4.0.1 => regressions-3.4.0.1.conf} (100%) rename test-suite/squidconf/{regressions-3.5.0.2 => regressions-3.5.0.2.conf} (100%) rename test-suite/squidconf/{regressions-4.0.18 => regressions-4.0.18.conf} (100%) rename test-suite/squidconf/{time_units => time_units.conf} (100%) create mode 100755 test-suite/test-squid-conf.sh diff --git a/test-suite/Makefile.am b/test-suite/Makefile.am index d599e42e69..6dfef1c10c 100644 --- a/test-suite/Makefile.am +++ b/test-suite/Makefile.am @@ -22,6 +22,7 @@ EXTRA_PROGRAMS = mem_node_test splay tcp-banger2 EXTRA_DIST = \ $(srcdir)/squidconf/* \ + test-squid-conf.sh \ testheaders.sh ESI_ALL_TESTS = \ @@ -133,10 +134,10 @@ VirtualDeleteOperator_SOURCES = \ VirtualDeleteOperator.cc \ stub_libmem.cc -squid-conf-tests: $(top_builddir)/src/squid.conf.default $(srcdir)/squidconf/* - @failed=0; cfglist="$?"; rm -f $@ || $(TRUE); \ +squid-conf-tests: $(srcdir)/test-squid-conf.sh $(top_builddir)/src/squid.conf.default $(srcdir)/squidconf/* + @failed=0; cfglist="$(top_builddir)/src/squid.conf.default $(srcdir)/squidconf/*.conf"; rm -f $@ || $(TRUE); \ for cfg in $$cfglist ; do \ - $(top_builddir)/src/squid -k parse -f $$cfg || \ + $(srcdir)/test-squid-conf.sh $(top_builddir) $$cfg || \ { echo "FAIL: squid.conf test: $$cfg" | \ sed s%$(top_builddir)/src/%% | \ sed s%$(srcdir)/squidconf/%% ; \ diff --git a/test-suite/squidconf/bug4832 b/test-suite/squidconf/bug4832.conf similarity index 100% rename from test-suite/squidconf/bug4832 rename to test-suite/squidconf/bug4832.conf diff --git a/test-suite/squidconf/bug4832.conf.instructions b/test-suite/squidconf/bug4832.conf.instructions new file mode 100644 index 0000000000..989850e32d --- /dev/null +++ b/test-suite/squidconf/bug4832.conf.instructions @@ -0,0 +1 @@ +skip-unless-autoconf-defines HAVE_AUTH_MODULE_BASIC diff --git a/test-suite/squidconf/empty b/test-suite/squidconf/empty.conf similarity index 100% rename from test-suite/squidconf/empty rename to test-suite/squidconf/empty.conf diff --git a/test-suite/squidconf/external_acl_type b/test-suite/squidconf/external_acl_type.conf similarity index 100% rename from test-suite/squidconf/external_acl_type rename to test-suite/squidconf/external_acl_type.conf diff --git a/test-suite/squidconf/mgr_passwd b/test-suite/squidconf/mgr_passwd.conf similarity index 100% rename from test-suite/squidconf/mgr_passwd rename to test-suite/squidconf/mgr_passwd.conf diff --git a/test-suite/squidconf/regex b/test-suite/squidconf/regex.conf similarity index 100% rename from test-suite/squidconf/regex rename to test-suite/squidconf/regex.conf diff --git a/test-suite/squidconf/regressions-3.3 b/test-suite/squidconf/regressions-3.3.conf similarity index 100% rename from test-suite/squidconf/regressions-3.3 rename to test-suite/squidconf/regressions-3.3.conf diff --git a/test-suite/squidconf/regressions-3.4.0.1 b/test-suite/squidconf/regressions-3.4.0.1.conf similarity index 100% rename from test-suite/squidconf/regressions-3.4.0.1 rename to test-suite/squidconf/regressions-3.4.0.1.conf diff --git a/test-suite/squidconf/regressions-3.5.0.2 b/test-suite/squidconf/regressions-3.5.0.2.conf similarity index 100% rename from test-suite/squidconf/regressions-3.5.0.2 rename to test-suite/squidconf/regressions-3.5.0.2.conf diff --git a/test-suite/squidconf/regressions-4.0.18 b/test-suite/squidconf/regressions-4.0.18.conf similarity index 100% rename from test-suite/squidconf/regressions-4.0.18 rename to test-suite/squidconf/regressions-4.0.18.conf diff --git a/test-suite/squidconf/time_units b/test-suite/squidconf/time_units.conf similarity index 100% rename from test-suite/squidconf/time_units rename to test-suite/squidconf/time_units.conf diff --git a/test-suite/test-squid-conf.sh b/test-suite/test-squid-conf.sh new file mode 100755 index 0000000000..286c328c5d --- /dev/null +++ b/test-suite/test-squid-conf.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# +## Copyright (C) 1996-2022 The Squid Software Foundation and contributors +## +## Squid software is distributed under GPLv2+ license and includes +## contributions from numerous individuals and organizations. +## Please see the COPYING and CONTRIBUTORS files for details. +## + +# Orchestrates a "squid -k parse ..." test of a single Squid configuration +# file (with an optional .instructions file containing testing directions). +# Usage: test-squid-conf.sh + +top_builddir=$1 +configFile=$2 + +instructionsFile="$configFile.instructions" +if test -e $instructionsFile +then + lineNo=0 + while read instructionName p1 p2 + do + lineNo=$(($lineNo+1)) + here="$instructionsFile:$lineNo"; + + if test -z "$instructionName" + then + continue; # skip empty lines + fi + + if test "$instructionName" = "#" + then + continue; # skip comment lines + fi + + if test "$instructionName" = "skip-unless-autoconf-defines" + then + # Skip test unless the given macro is #defined in autoconf.h + defineName=$p1 + + if test -n "$p2" + then + echo "$here: ERROR: Bad $instructionName instruction: Unexpected second parameter: $p2"; + exit 1; + fi + + autoconfHeader="$top_builddir/include/autoconf.h" + if ! grep -q -w "$defineName" $autoconfHeader + then + echo "$here: ERROR: Bad $instructionName instruction: Unknown macro $defineName"; + exit 1; + fi + + if grep -q "# *undef *\b$defineName\b" $autoconfHeader + then + echo "$here: WARNING: Skipping $configFile test because $defineName is not defined in $autoconfHeader"; + exit 0; + fi + + if ! grep -q "# *define *\b$defineName\b" $autoconfHeader + then + echo "$here: ERROR: Cannot determine status of $defineName macro"; + exit 1; + fi + else + echo "$here: ERROR: Unknown test-squid-conf.sh instruction name: $instructionName"; + exit 1; + fi + done < $instructionsFile + + # TODO: Add support for the "require-failure" instruction. +fi + +exec $top_builddir/src/squid -k parse -f $configFile -- 2.47.2