]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fixed "make check" in a --disable-auth-basic build (#1125)
authorAlex Rousskov <rousskov@measurement-factory.com>
Tue, 30 Aug 2022 15:07:49 +0000 (15:07 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Tue, 30 Aug 2022 15:07:59 +0000 (15:07 +0000)
    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.

13 files changed:
test-suite/Makefile.am
test-suite/squidconf/bug4832.conf [moved from test-suite/squidconf/bug4832 with 100% similarity]
test-suite/squidconf/bug4832.conf.instructions [new file with mode: 0644]
test-suite/squidconf/empty.conf [moved from test-suite/squidconf/empty with 100% similarity]
test-suite/squidconf/external_acl_type.conf [moved from test-suite/squidconf/external_acl_type with 100% similarity]
test-suite/squidconf/mgr_passwd.conf [moved from test-suite/squidconf/mgr_passwd with 100% similarity]
test-suite/squidconf/regex.conf [moved from test-suite/squidconf/regex with 100% similarity]
test-suite/squidconf/regressions-3.3.conf [moved from test-suite/squidconf/regressions-3.3 with 100% similarity]
test-suite/squidconf/regressions-3.4.0.1.conf [moved from test-suite/squidconf/regressions-3.4.0.1 with 100% similarity]
test-suite/squidconf/regressions-3.5.0.2.conf [moved from test-suite/squidconf/regressions-3.5.0.2 with 100% similarity]
test-suite/squidconf/regressions-4.0.18.conf [moved from test-suite/squidconf/regressions-4.0.18 with 100% similarity]
test-suite/squidconf/time_units.conf [moved from test-suite/squidconf/time_units with 100% similarity]
test-suite/test-squid-conf.sh [new file with mode: 0755]

index d599e42e69436df635a945dc292ea00b6a5c0e5a..6dfef1c10c77185dcdf1f5e4c47e4676b7efe09c 100644 (file)
@@ -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.conf.instructions b/test-suite/squidconf/bug4832.conf.instructions
new file mode 100644 (file)
index 0000000..989850e
--- /dev/null
@@ -0,0 +1 @@
+skip-unless-autoconf-defines HAVE_AUTH_MODULE_BASIC
diff --git a/test-suite/test-squid-conf.sh b/test-suite/test-squid-conf.sh
new file mode 100755 (executable)
index 0000000..286c328
--- /dev/null
@@ -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> <squid.conf>
+
+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