[Libguestfs] [PATCH 7/7] capitests: Test add-libvirt-dom C API.

Richard W.M. Jones rjones at redhat.com
Wed Nov 10 11:47:04 UTC 2010


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
New in Fedora 11: Fedora Windows cross-compiler. Compile Windows
programs, test, and build Windows installers. Over 70 libraries supprt'd
http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw
-------------- next part --------------
>From 42f9a73ab0bf5af74853e86a04898a6a1cebd6d8 Mon Sep 17 00:00:00 2001
From: Richard W.M. Jones <rjones at redhat.com>
Date: Wed, 10 Nov 2010 11:31:01 +0000
Subject: [PATCH 7/7] capitests: Test add-libvirt-dom C API.

---
 .gitignore                       |    1 +
 capitests/Makefile.am            |   16 ++++
 capitests/test-add-libvirt-dom.c |  151 ++++++++++++++++++++++++++++++++++++++
 configure.ac                     |    1 +
 4 files changed, 169 insertions(+), 0 deletions(-)
 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..9a3455e 100644
--- a/capitests/Makefile.am
+++ b/capitests/Makefile.am
@@ -38,6 +38,11 @@ TESTS = \
 	test-add-drive-opts \
 	test-last-errno
 
+if HAVE_LIBVIRT
+check_PROGRAMS += test-add-libvirt-dom
+TESTS += test-add-libvirt-dom
+endif
+
 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 +91,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..7861069
--- /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 <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "xgetcwd.h"
+
+#include <libvirt/libvirt.h>
+#include <libvirt/virterror.h>
+
+#include "guestfs.h"
+
+static void
+make_test_xml (FILE *fp, const char *cwd)
+{
+  fprintf (fp,
+           "<?xml version=\"1.0\"?>\n"
+           "<node>\n"
+           "  <domain type='test'>\n"
+           "    <name>guest</name>\n"
+           "    <os>\n"
+           "      <type>hvm</type>\n"
+           "      <boot dev='hd'/>\n"
+           "    </os>\n"
+           "    <memory>524288</memory>\n"
+           "    <devices>\n"
+           "      <disk type='file'>\n"
+           "        <source file='%s/test1.img'/>\n"
+           "        <target dev='hda'/>\n"
+           "      </disk>\n"
+           "      <disk type='file'>\n"
+           "        <driver name='qemu' type='raw'/>\n"
+           "        <source file='%s/test2.img'/>\n"
+           "        <target dev='hdb'/>\n"
+           "      </disk>\n"
+           "      <disk type='file'>\n"
+           "        <driver name='qemu' type='qcow2'/>\n"
+           "        <source file='%s/test3.img'/>\n"
+           "        <target dev='hdc'/>\n"
+           "      </disk>\n"
+           "    </devices>\n"
+           "  </domain>\n"
+           "</node>",
+           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 = virConnGetLastError (conn);
+    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.7.3.2



More information about the Libguestfs mailing list