[libvirt] adding tests....
Daniel P. Berrange
berrange at redhat.com
Mon Jan 12 10:58:45 UTC 2009
On Thu, Jan 08, 2009 at 08:55:31PM +0100, Jim Meyering wrote:
> In adding a couple of tests, I noticed that libvirtd --config=no-such
> didn't diagnose my mistake.
>
> I fixed that with the first patch below:
>
> diagnose "libvirtd --config=no-such-file"
> * qemud/qemud.c (remoteReadConfigFile): Don't return 0 (success)
> when the config file is unreadable or nonexistent
> Return -1, not 0, upon virConfReadFile failure.
> (main): If remote_config_file is not specified via --config(-f),
> use the default config file only if it exists. Otherwise,
> use /dev/null.
>
> However, that made it so libvirtd gave two diagnostics:
>
> Failed to open file 'no-such': No such file or directory
> libvir: Config error : failed to open no-such for reading
>
> The latter part of that patch fixes it like this:
>
> * src/conf.c (virConfReadFile): Don't diagnose virFileReadAll
> failure, since it already does that.
Ok, makes sense.
> Finally, I went to add the two tests,
> one to ensure libvirtd --config=no-such-file now fails, as I expected
> another to start libvirtd and then run a small pool-related test via
> a separate virsh invocation.
>
> But that made me see a bug in tests/Makefile.am:
> A missing backslash made it so the virsh-all test wasn't being run.
> Easy to fix. But then, I saw when virsh-all runs it generated too
> much output, so I did this:
>
> tests: quiet virsh-all
> * tests/virsh-all: For now, ignore diagnostics and exit status,
> when running all virsh commands.
>
> Finally, here are the two tests:
>
> add tests
> * tests/libvirtd-pool: New file.
> * tests/libvirtd-fail: New file.
> * tests/Makefile.am (test_scripts): Add omitted backslash,
> so that the virsh-all test is run.
> Add libvirtd-fail and libvirtd-pool.
ACK
> @@ -2116,13 +2116,8 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename)
> auth_unix_ro = REMOTE_AUTH_NONE;
> #endif
>
> - /* Just check the file is readable before opening it, otherwise
> - * libvirt emits an error.
> - */
> - if (access (filename, R_OK) == -1) return 0;
> -
> conf = virConfReadFile (filename);
> - if (!conf) return 0;
> + if (!conf) return -1;
>
> /*
> * First get all the logging settings and activate them
> @@ -2301,7 +2296,7 @@ int main(int argc, char **argv) {
> struct sigaction sig_action;
> int sigpipe[2];
> const char *pid_file = NULL;
> - const char *remote_config_file = SYSCONF_DIR "/libvirt/libvirtd.conf";
> + const char *remote_config_file = NULL;
> int ret = 1;
>
> struct option opts[] = {
> @@ -2372,6 +2367,15 @@ int main(int argc, char **argv) {
> }
> }
>
> + if (remote_config_file == NULL) {
> + static const char *default_config_file
> + = SYSCONF_DIR "/libvirt/libvirtd.conf";
> + remote_config_file =
> + (access(default_config_file, X_OK) == 0
> + ? default_config_file
> + : "/dev/null");
> + }
Indentation looks off-by-2 there.
> +virsh --connect qemu:///session \
> + pool-define-as P dir src-host /src/path /src/dev S /target-path > out 2>&1 \
> + || fail=1
> +virsh --connect qemu:///session pool-dumpxml P >> out 2>&1 || fail=1
Using qemu:///session here is fragile because it'll see
all existing user defined vms/network/storage/etc. Use
the test:///default driver instead (or test:///path/to/custom/config.xml)
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list