From cb7ec8be4ce6068b6cbc6522a67826cdbd161024 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 10 Nov 2010 11:31:01 +0000 Subject: [PATCH] capitests: Add the code to test (proposed) add-libvirt-dom C API. This API was dropped as there are some problems with it. This commit adds the original test code, but commented out. --- .gitignore | 1 + capitests/Makefile.am | 18 +++++ capitests/test-add-libvirt-dom.c | 151 +++++++++++++++++++++++++++++++++++++++ configure.ac | 1 + 4 files changed, 171 insertions(+) create mode 100644 capitests/test-add-libvirt-dom.c diff --git a/.gitignore b/.gitignore index d42898a..bf49d56 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ autom4te.cache *.bak bindtests.tmp capitests/test-add-drive-opts +capitests/test-add-libvirt-dom capitests/test-command capitests/test-config capitests/test-create-handle diff --git a/capitests/Makefile.am b/capitests/Makefile.am index 6577f69..95afa53 100644 --- a/capitests/Makefile.am +++ b/capitests/Makefile.am @@ -38,6 +38,13 @@ TESTS = \ test-add-drive-opts \ test-last-errno +# The API behind this test is not baked yet. +#if HAVE_LIBVIRT +#check_PROGRAMS += test-add-libvirt-dom +#TESTS += test-add-libvirt-dom +#endif +EXTRA_DIST += test-add-libvirt-dom.c + TESTS_ENVIRONMENT = \ SKIP_TEST_COMMAND=$(shell ldd test-command | grep -sq 'not a dynamic executable' || echo 1) \ SKIP_TEST_COMMAND_LINES=$(shell ldd test-command | grep -sq 'not a dynamic executable' || echo 1) \ @@ -86,6 +93,17 @@ test_last_errno_CFLAGS = \ test_last_errno_LDADD = \ $(top_builddir)/src/libguestfs.la +if HAVE_LIBVIRT +test_add_libvirt_dom_SOURCES = test-add-libvirt-dom.c +test_add_libvirt_dom_CFLAGS = \ + -I$(top_srcdir)/src -I$(top_builddir)/src -I$(top_srcdir)/gnulib/lib \ + $(LIBVIRT_CFLAGS) \ + $(WARN_CFLAGS) $(WERROR_CFLAGS) +test_add_libvirt_dom_LDADD = \ + $(top_builddir)/src/libguestfs.la $(LIBVIRT_LIBS) \ + $(LTLIBTHREAD) ../gnulib/lib/libgnu.la +endif + # Run the tests under valgrind. valgrind: diff --git a/capitests/test-add-libvirt-dom.c b/capitests/test-add-libvirt-dom.c new file mode 100644 index 0000000..6f99405 --- /dev/null +++ b/capitests/test-add-libvirt-dom.c @@ -0,0 +1,151 @@ +/* libguestfs + * Copyright (C) 2010 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 + +#include +#include +#include +#include + +#include "xgetcwd.h" + +#include +#include + +#include "guestfs.h" + +static void +make_test_xml (FILE *fp, const char *cwd) +{ + fprintf (fp, + "\n" + "\n" + " \n" + " guest\n" + " \n" + " hvm\n" + " \n" + " \n" + " 524288\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "", + cwd, cwd, cwd); +} + +int +main (int argc, char *argv[]) +{ + guestfs_h *g; + virConnectPtr conn; + virDomainPtr dom; + virErrorPtr err; + int r; + const char *test_xml; + char *cwd; + FILE *fp; + char libvirt_uri[1024]; + + cwd = xgetcwd (); + + /* Create the libvirt XML and test images in the current directory. */ + fp = fopen ("test.xml", "w"); + if (fp == NULL) { + perror ("test.xml"); + exit (EXIT_FAILURE); + } + make_test_xml (fp, cwd); + fclose (fp); + + fp = fopen ("test1.img", "w"); + if (fp == NULL) { + perror ("test1.img"); + exit (EXIT_FAILURE); + } + fclose (fp); + + fp = fopen ("test2.img", "w"); + if (fp == NULL) { + perror ("test2.img"); + exit (EXIT_FAILURE); + } + fclose (fp); + + fp = fopen ("test3.img", "w"); + if (fp == NULL) { + perror ("test3.img"); + exit (EXIT_FAILURE); + } + fclose (fp); + + /* Create the guestfs handle. */ + g = guestfs_create (); + if (g == NULL) { + fprintf (stderr, "failed to create handle\n"); + exit (EXIT_FAILURE); + } + + /* Create the libvirt connection. */ + snprintf (libvirt_uri, sizeof libvirt_uri, "test://%s/test.xml", cwd); + conn = virConnectOpenReadOnly (libvirt_uri); + if (!conn) { + err = virGetLastError (); + fprintf (stderr, "could not connect to libvirt (code %d, domain %d): %s\n", + err->code, err->domain, err->message); + exit (EXIT_FAILURE); + } + + dom = virDomainLookupByName (conn, "guest"); + if (!dom) { + err = virGetLastError (); + fprintf (stderr, + "no libvirt domain called '%s': %s\n", "guest", err->message); + exit (EXIT_FAILURE); + } + + r = guestfs_add_libvirt_dom (g, dom, + GUESTFS_ADD_LIBVIRT_DOM_READONLY, 1, + -1); + if (r == -1) + exit (EXIT_FAILURE); + + guestfs_close (g); + + unlink ("test.xml"); + unlink ("test1.img"); + unlink ("test2.img"); + unlink ("test3.img"); + + exit (EXIT_SUCCESS); +} diff --git a/configure.ac b/configure.ac index 67b1309..2594369 100644 --- a/configure.ac +++ b/configure.ac @@ -460,6 +460,7 @@ PKG_CHECK_MODULES([LIBVIRT], [libvirt], AC_DEFINE([HAVE_LIBVIRT],[1],[libvirt found at compile time.]) ], [AC_MSG_WARN([libvirt not found, some core features will be disabled])]) +AM_CONDITIONAL([HAVE_LIBVIRT],[test "x$LIBVIRT_LIBS" != "x"]) dnl libxml2 (highly recommended) PKG_CHECK_MODULES([LIBXML2], [libxml-2.0], -- 1.8.3.1