mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
Test libvirtd's config-processing code.
And remove a minor diagnostic inconsistency. * tests/daemon-conf: New test. * tests/Makefile.am (TESTS_ENVIRONMENT): Prepend qemud/ to PATH, so we can invoke libvirtd without an absolute name. (test_scripts): Add daemon-conf. * qemud/qemud.c (remoteConfigGetAuth): Use checkType, rather than open-coding it with a different diagnostic.
This commit is contained in:
parent
ac6bb7e131
commit
5a190594f4
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
Tue Dec 11 22:19:22 CET 2007 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Test libvirtd's config-processing code.
|
||||
And remove a minor diagnostic inconsistency.
|
||||
* tests/daemon-conf: New test.
|
||||
* tests/Makefile.am (TESTS_ENVIRONMENT): Prepend qemud/ to PATH,
|
||||
so we can invoke libvirtd without an absolute name.
|
||||
(test_scripts): Add daemon-conf.
|
||||
* qemud/qemud.c (remoteConfigGetAuth): Use checkType,
|
||||
rather than open-coding it with a different diagnostic.
|
||||
|
||||
Mon Dec 10 19:25:22 CET 2007 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Add gnulib-tool unit tests.
|
||||
|
@ -1783,10 +1783,8 @@ static int remoteConfigGetAuth(virConfPtr conf, const char *key, int *auth, cons
|
||||
if (!p)
|
||||
return 0;
|
||||
|
||||
if (p->type != VIR_CONF_STRING) {
|
||||
qemudLog (QEMUD_ERR, "remoteReadConfigFile: %s: %s: should be a string\n", filename, key);
|
||||
if (checkType (p, filename, key, VIR_CONF_STRING) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!p->str)
|
||||
return 0;
|
||||
|
@ -47,7 +47,9 @@ noinst_PROGRAMS = xmlrpctest xml2sexprtest sexpr2xmltest virshtest conftest \
|
||||
nodeinfotest
|
||||
|
||||
test_scripts = \
|
||||
daemon-conf \
|
||||
int-overflow
|
||||
|
||||
EXTRA_DIST += $(test_scripts)
|
||||
|
||||
TESTS = xml2sexprtest sexpr2xmltest virshtest test_conf.sh xmconfigtest \
|
||||
@ -63,6 +65,7 @@ endif
|
||||
TESTS_ENVIRONMENT = \
|
||||
abs_top_builddir=`pwd`/'$(top_builddir)' \
|
||||
abs_top_srcdir=`pwd`/'$(top_srcdir)' \
|
||||
PATH='$(abs_top_builddir)/qemud$(PATH_SEPARATOR)'"$$PATH" \
|
||||
$(VG)
|
||||
|
||||
valgrind:
|
||||
|
64
tests/daemon-conf
Executable file
64
tests/daemon-conf
Executable file
@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
# Get coverage of libvirtd's config-parsing code.
|
||||
|
||||
# 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,.*/,,'; }
|
||||
t_=$(this_test_)-$$
|
||||
init_cwd_=$(pwd)
|
||||
trap 'st=$?; d='"$t_"';
|
||||
cd '"$init_cwd_"' && chmod -R u+rwx "$d" && rm -rf "$d" && exit $st' 0
|
||||
trap '(exit $?); exit $?' 1 2 13 15
|
||||
mkdir "$t_" || fail=1
|
||||
cd "$t_" || fail=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
|
||||
|
||||
# Iterate through that list of directives, corrupting one RHS at a
|
||||
# time and running libvirtd with the resulting config. Each libvirtd
|
||||
# invocation must fail.
|
||||
n=$(wc -l < tmp.conf)
|
||||
i=1
|
||||
while :; do
|
||||
param_name=$(sed -n "$i"'s/ = .*//p' tmp.conf)
|
||||
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
|
||||
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';;
|
||||
'['*) msg='must be a string or list of strings';;
|
||||
*) echo "unexpected RHS: $rhs" 1>&2; fail=1;;
|
||||
esac
|
||||
|
||||
test $i = $n && break
|
||||
|
||||
# Filter out this diagnostic.
|
||||
sed '/^Cannot set group when not running as root$/d' err > k && mv k err
|
||||
|
||||
printf '%s\n\n' "remoteReadConfigFile: $f: $param_name: $msg" > expected-err
|
||||
diff -u expected-err err || fail=1
|
||||
|
||||
i=$(expr $i + 1)
|
||||
done
|
||||
|
||||
# Run with the unmodified config file.
|
||||
libvirtd --config=tmp.conf > log 2>&1 & pid=$!
|
||||
sleep 2
|
||||
kill $pid
|
||||
|
||||
# Expect an orderly shut-down and successful exit.
|
||||
wait $pid || fail=1
|
||||
|
||||
# "cat log" would print this for non-root:
|
||||
# Cannot set group when not running as root
|
||||
# Shutting down on signal 15
|
||||
# And normally, we'd require that output, but obviously
|
||||
# it'd be different for root.
|
||||
|
||||
exit $fail
|
Loading…
x
Reference in New Issue
Block a user