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(a)redhat.com>
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