diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-05-03 12:15:27 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-05-03 12:30:05 +0100 |
commit | 00202b9c2941c2b4ff514c5ea32818807f42acf4 (patch) | |
tree | 1d32464375eb243bfa10e636c27a009ba086f8dc /tests/xml/fake_libvirt_xml.c | |
parent | f072a21f3aef6779aaa77329578ae3677a685d85 (diff) | |
download | libguestfs-00202b9c2941c2b4ff514c5ea32818807f42acf4.tar.gz libguestfs-00202b9c2941c2b4ff514c5ea32818807f42acf4.tar.xz libguestfs-00202b9c2941c2b4ff514c5ea32818807f42acf4.zip |
tests: Regression test for RHBZ#701814.
This commit adds a tests/xml directory, and an LD_PRELOAD module which
can fake arbitrary libvirt XML from an external file (and is therefore
a much more flexible test than using the libvirt test:// driver
alone).
Also added is one regression test for:
https://bugzilla.redhat.com/show_bug.cgi?id=701814
Loading the given libvirt XML using Sys::Guestfs::Lib::open_guest
used to fail with the error:
format parameter is empty or contains disallowed characters at /home/rjones/d/libguestfs/perl/blib/lib/Sys/Guestfs/Lib.pm line 256.
Thanks to Tom Horsley for supplying the test data.
Diffstat (limited to 'tests/xml/fake_libvirt_xml.c')
-rw-r--r-- | tests/xml/fake_libvirt_xml.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/xml/fake_libvirt_xml.c b/tests/xml/fake_libvirt_xml.c new file mode 100644 index 00000000..61192413 --- /dev/null +++ b/tests/xml/fake_libvirt_xml.c @@ -0,0 +1,87 @@ +/* libguestfs + * Copyright (C) 2012 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include <libvirt/libvirt.h> + +char * +virDomainGetXMLDesc (virDomainPtr dom, unsigned int flags) +{ + const char *path; + int fd; + struct stat statbuf; + char *buf, *p; + size_t n; + ssize_t r; + + path = getenv ("FAKE_LIBVIRT_XML"); + + if (!path) { + fprintf (stderr, "environment variable FAKE_LIBVIRT_XML is not set\n"); + _exit (1); + } + + fprintf (stderr, + "fake_libvirt_xml: returning fake libvirt XML from %s\n", path); + + fd = open (path, O_RDONLY | O_CLOEXEC); + if (fd == -1) { + perror (path); + _exit (1); + } + + if (fstat (fd, &statbuf) == -1) { + perror ("fstat"); + _exit (1); + } + + buf = malloc (statbuf.st_size + 1); + if (buf == NULL) { + perror ("malloc"); + _exit (1); + } + + for (n = 0, p = buf; n < statbuf.st_size; ++n) { + r = read (fd, p, statbuf.st_size - n); + if (r == -1) { + perror ("read"); + _exit (1); + } + if (r == 0) + break; + n += r; + p += r; + } + + *p = '\0'; + + if (close (fd) == -1) { + perror ("close"); + _exit (1); + } + + return buf; /* caller frees */ +} |