Hi Dan, With your 28-part patch, I was getting a daemon-conf failure in "make check". This fixes it: Unless you tell me otherwise, I will apply most of this right away, (and let you remove the space-before-max_clients in your patch) since no other part of this change conflicts with your series. >From 57842865f8845c788408e18033f739cf02987ca3 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyering@xxxxxxxxxx> Date: Mon, 1 Dec 2008 14:12:44 +0100 Subject: [PATCH] tests: daemon-conf: accommodate new numeric-valued config params: This test would hang when failing to perturb the new numeric (and non-boolean) valued parameters, max_clients, max_workers, min_workers. * tests/daemon-conf: Require that all commented out settings in libvirtd.conf have the same form. Before, two parameters were not being tested, since a space had snuck between the leading "#" and the "param = value" parts. Apply each RHS-value-perturbing transformation separately, not in series. Let VERBOSE=yes turn on debugging. Be more verbose by default, since this is a relatively long-running test. * qemud/libvirtd.conf: Normalize the spacing around each setting that is to be perturbed by tests/daemon-conf. --- qemud/libvirtd.conf | 10 ++++++---- tests/daemon-conf | 32 ++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/qemud/libvirtd.conf b/qemud/libvirtd.conf index f269766..b0962f2 100644 --- a/qemud/libvirtd.conf +++ b/qemud/libvirtd.conf @@ -1,7 +1,10 @@ # Master libvirt daemon configuration file # # For further information consult http://libvirt.org/format.html - +# +# NOTE: the tests/daemon-conf regression test script requires +# that each "PARAMETER = VALUE" line in this file have the parameter +# name just after a leading "#". ################################################################# # @@ -45,7 +48,7 @@ # Override the default configuration which binds to all network # interfaces. This can be a numeric IPv4/6 address, or hostname # -# listen_addr = "192.168.0.1" +#listen_addr = "192.168.0.1" # Flag toggling mDNS advertizement of the libvirt service. @@ -233,7 +236,7 @@ # The maximum number of concurrent client connections to allow # over all sockets combined. -# max_clients = 20 +#max_clients = 20 # The minimum limit sets the number of workers to start up @@ -243,4 +246,3 @@ # of clients allowed #min_workers = 5 #max_workers = 20 - diff --git a/tests/daemon-conf b/tests/daemon-conf index db1f0d3..03189d5 100755 --- a/tests/daemon-conf +++ b/tests/daemon-conf @@ -1,6 +1,11 @@ #!/bin/sh # Get coverage of libvirtd's config-parsing code. +if test "$VERBOSE" = yes; then + set -x + libvirtd --version +fi + # Boilerplate code to set up a test directory, cd into it, # and to ensure we remove it upon completion. this_test_() { echo "./$0" | sed 's,.*/,,'; } @@ -12,8 +17,14 @@ trap '(exit $?); exit $?' 1 2 13 15 mkdir "$t_" || fail=1 cd "$t_" || fail=1 +conf="$abs_top_srcdir/qemud/libvirtd.conf" + +# Ensure that each commented out PARAMETER = VALUE line has the expected form. +grep '[a-z_] *= *[^ ]' "$conf" | grep -vE '^#[a-z_]+ = ' \ + && { echo "$0: found unexpected lines (above) in $conf" 1>&2; exit 1; } + # Start with the sample libvirtd.conf file, uncommenting all real directives. -sed -n 's/^#\([^ #]\)/\1/p' $abs_top_srcdir/qemud/libvirtd.conf > tmp.conf +sed -n 's/^#\([^ #]\)/\1/p' "$conf" > tmp.conf # Iterate through that list of directives, corrupting one RHS at a # time and running libvirtd with the resulting config. Each libvirtd @@ -22,16 +33,23 @@ n=$(wc -l < tmp.conf) i=1 while :; do param_name=$(sed -n "$i"'s/ = .*//p' tmp.conf) + printf "testing with corrupted config: $param_name\n" 1>&2 rhs=$(sed -n "$i"'s/.* = \(.*\)/\1/p' tmp.conf) f=in$i.conf - # Change an RHS that starts with '"' or '[' to "3". - # Change an RHS that starts with 0 or 1 to the string '"foo"'. - sed "$i"'s/ = [["].*/ = 3/;'"$i"'s/ = [01].*/ = "foo"/' tmp.conf > $f + case $rhs in + # Change an RHS that starts with '"' or '[' to "3". + [[\"]*) sed "$i"'s/ = [["].*/ = 3/' tmp.conf > $f;; + # Change an RHS that starts with a digit to the string '"foo"'. + [0-9]*) sed "$i"'s/ = [0-9].*/ = "foo"/' tmp.conf > $f;; + esac + + # Run libvirtd, expecting it to fail. libvirtd --config=$f 2> err && fail=1 + case $rhs in # '"'*) msg='should be a string';; '"'*) msg='invalid type: got long; expected string';; - [01]*) msg='invalid type: got string; expected long';; + [0-9]*) msg='invalid type: got string; expected long';; '['*) msg='must be a string or list of strings';; *) echo "unexpected RHS: $rhs" 1>&2; fail=1;; esac @@ -48,8 +66,10 @@ while :; do done # Run with the unmodified config file. +sleep_secs=2 +printf "running libvirtd with a valid config file ($sleep_secs seconds)\n" 1>&2 libvirtd --config=tmp.conf > log 2>&1 & pid=$! -sleep 2 +sleep $sleep_secs kill $pid # Expect an orderly shut-down and successful exit. -- 1.6.0.4.1044.g77718 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list