diff options
Diffstat (limited to 'test-tool')
-rw-r--r-- | test-tool/Makefile.am | 11 | ||||
-rw-r--r-- | test-tool/helper.c | 73 | ||||
-rw-r--r-- | test-tool/libguestfs-test-tool.pod | 24 | ||||
-rwxr-xr-x | test-tool/run-test-tool-locally | 4 | ||||
-rw-r--r-- | test-tool/test-tool.c | 157 |
5 files changed, 37 insertions, 232 deletions
diff --git a/test-tool/Makefile.am b/test-tool/Makefile.am index 15a5c8f8..5ce21642 100644 --- a/test-tool/Makefile.am +++ b/test-tool/Makefile.am @@ -1,5 +1,5 @@ # libguestfs -# Copyright (C) 2009 Red Hat Inc. +# Copyright (C) 2009-2011 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 @@ -22,23 +22,16 @@ EXTRA_DIST = libguestfs-test-tool.pod run-test-tool-locally CLEANFILES = bin_PROGRAMS = libguestfs-test-tool -libexec_PROGRAMS = libguestfs-test-tool-helper man_MANS = libguestfs-test-tool.1 -AM_CPPFLAGS = \ - -DDEFAULT_HELPER='"$(libexecdir)/libguestfs-test-tool-helper"' - libguestfs_test_tool_SOURCES = test-tool.c libguestfs_test_tool_CFLAGS = \ -DLOCALEBASEDIR=\""$(datadir)/locale"\" \ -I$(top_srcdir)/src -I$(top_builddir)/src \ - -Wall + $(WARN_CFLAGS) $(WERROR_CFLAGS) libguestfs_test_tool_LDADD = \ $(top_builddir)/src/libguestfs.la -libguestfs_test_tool_helper_SOURCES = helper.c -libguestfs_test_tool_helper_LDFLAGS = -all-static - libguestfs-test-tool.1: libguestfs-test-tool.pod $(top_srcdir)/podwrapper.sh \ --man $@ \ diff --git a/test-tool/helper.c b/test-tool/helper.c deleted file mode 100644 index 731b053e..00000000 --- a/test-tool/helper.c +++ /dev/null @@ -1,73 +0,0 @@ -/* libguestfs-test-tool-helper - * Copyright (C) 2009 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* NB. This program is intended to run inside the appliance. */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <string.h> -#include <fcntl.h> -#include <unistd.h> -#include <sys/stat.h> -#include <sys/types.h> - -char buffer[10 * 1024]; - -int -main (void) -{ - int fd; - - fprintf (stderr, "This is the libguestfs-test-tool helper program.\n"); - - /* This should fail immediately if we're not in the appliance. */ - if (mkdir ("/tmp", 0700) == -1) { - perror ("mkdir"); - fprintf (stderr, "This program should not be run directly. Use libguestfs-test-tool instead.\n"); - exit (EXIT_FAILURE); - } - - if (geteuid () != 0) { - fprintf (stderr, "helper: This program doesn't appear to be running as root.\n"); - exit (EXIT_FAILURE); - } - - if (mkdir ("/tmp/helper", 0700) == -1) { - perror ("/tmp/helper"); - exit (EXIT_FAILURE); - } - - fd = open ("/tmp/helper/a", O_CREAT|O_EXCL|O_WRONLY, 0600); - if (fd == -1) { - perror ("create /tmp/helper/a"); - exit (EXIT_FAILURE); - } - if (write (fd, buffer, sizeof buffer) != sizeof buffer) { - perror ("write"); - exit (EXIT_FAILURE); - } - if (close (fd) == -1) { - perror ("close"); - exit (EXIT_FAILURE); - } - - exit (EXIT_SUCCESS); -} diff --git a/test-tool/libguestfs-test-tool.pod b/test-tool/libguestfs-test-tool.pod index df8c77b2..77bd817a 100644 --- a/test-tool/libguestfs-test-tool.pod +++ b/test-tool/libguestfs-test-tool.pod @@ -42,12 +42,6 @@ L<http://libguestfs.org/> website. Display short usage information and exit. -=item I<--helper /path/to/libguestfs-test-tool-helper> - -Pass an alternate name for the helper program. libguestfs-test-tool -will normally look in the C<$libexec> directory that was configured -when the tool was built. - =item I<--qemu qemu_binary> If you have downloaded another qemu binary, point this option at the @@ -85,22 +79,6 @@ script when you use either of the I<--qemudir> or I<--qemu> options. libguestfs-test-tool returns I<0> if the tests completed without error, or I<1> if there was an error. -=head1 FILES - -=over 4 - -=item /usr/libexec/libguestfs-test-tool-helper - -This helper program is run inside the appliance and provides -additional tests. - -=item /usr/bin/mkisofs - -The C<mkisofs> command is required in order to construct a CD-ROM ISO -file which is used as part of the tests. - -=back - =head1 ENVIRONMENT VARIABLES For the full list of environment variables which may affect @@ -118,7 +96,7 @@ Richard W.M. Jones (C<rjones at redhat dot com>) =head1 COPYRIGHT -Copyright (C) 2009 Red Hat Inc. +Copyright (C) 2009-2011 Red Hat Inc. L<http://libguestfs.org/> This program is free software; you can redistribute it and/or modify diff --git a/test-tool/run-test-tool-locally b/test-tool/run-test-tool-locally index ae681c59..21df4c57 100755 --- a/test-tool/run-test-tool-locally +++ b/test-tool/run-test-tool-locally @@ -1,5 +1,5 @@ #!/usr/bin/perl -# Copyright (C) 2010 Red Hat Inc. +# Copyright (C) 2010-2011 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 @@ -51,6 +51,4 @@ $ENV{LIBGUESTFS_PATH} = $path.'/appliance'; exec("$path/test-tool/libguestfs-test-tool", "$path/test-tool/libguestfs-test-tool", - "--helper", - "$path/test-tool/libguestfs-test-tool-helper", @ARGV); diff --git a/test-tool/test-tool.c b/test-tool/test-tool.c index c21906f3..11e8539e 100644 --- a/test-tool/test-tool.c +++ b/test-tool/test-tool.c @@ -1,5 +1,5 @@ /* libguestfs-test-tool - * Copyright (C) 2009 Red Hat Inc. + * Copyright (C) 2009-2011 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 @@ -37,10 +37,10 @@ #ifdef HAVE_GETTEXT #include "gettext.h" #define _(str) dgettext(PACKAGE, (str)) -#define N_(str) dgettext(PACKAGE, (str)) +//#define N_(str) dgettext(PACKAGE, (str)) #else #define _(str) str -#define N_(str) str +//#define N_(str) str #endif #if !ENABLE_NLS @@ -51,14 +51,14 @@ #endif #define STREQ(a,b) (strcmp((a),(b)) == 0) -#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) -#define STRNEQ(a,b) (strcmp((a),(b)) != 0) -#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0) +//#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) +//#define STRNEQ(a,b) (strcmp((a),(b)) != 0) +//#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0) #define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0) -#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0) -#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) -#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0) -#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) +//#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0) +//#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) +//#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0) +//#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) #ifndef P_tmpdir #define P_tmpdir "/tmp" @@ -66,13 +66,10 @@ #define DEFAULT_TIMEOUT 120 -static const char *helper = DEFAULT_HELPER; static int timeout = DEFAULT_TIMEOUT; static char tmpf[] = P_tmpdir "/libguestfs-test-tool-sda-XXXXXX"; -static char isof[] = P_tmpdir "/libguestfs-test-tool-iso-XXXXXX"; static guestfs_h *g; -static void preruncheck (void); static void make_files (void); static void set_qemu (const char *path, int use_wrapper); @@ -80,21 +77,21 @@ static void usage (void) { printf (_("libguestfs-test-tool: interactive test tool\n" - "Copyright (C) 2009 Red Hat Inc.\n" + "Copyright (C) 2009-2011 Red Hat Inc.\n" "Usage:\n" " libguestfs-test-tool [--options]\n" "Options:\n" " --help Display usage\n" - " --helper libguestfs-test-tool-helper\n" - " Helper program (default: %s)\n" " --qemudir dir Specify QEMU source directory\n" " --qemu qemu Specify QEMU binary\n" " --timeout n\n" " -t n Set launch timeout (default: %d seconds)\n" ), - DEFAULT_HELPER, DEFAULT_TIMEOUT); + DEFAULT_TIMEOUT); } +extern char **environ; + int main (int argc, char *argv[]) { @@ -105,7 +102,6 @@ main (int argc, char *argv[]) static const char *options = "t:?"; static const struct option long_options[] = { { "help", 0, 0, '?' }, - { "helper", 1, 0, 0 }, { "qemu", 1, 0, 0 }, { "qemudir", 1, 0, 0 }, { "timeout", 1, 0, 't' }, @@ -113,13 +109,8 @@ main (int argc, char *argv[]) }; int c; int option_index; - extern char **environ; int i; struct guestfs_version *vers; - char *sfdisk_lines[] = { ",", NULL }; - char *str; - /* XXX This is wrong if the user renames the helper. */ - char *helper_args[] = { "/iso/libguestfs-test-tool-helper", NULL }; for (;;) { c = getopt_long (argc, argv, options, long_options, &option_index); @@ -127,9 +118,7 @@ main (int argc, char *argv[]) switch (c) { case 0: /* options which are long only */ - if (STREQ (long_options[option_index].name, "helper")) - helper = optarg; - else if (STREQ (long_options[option_index].name, "qemu")) + if (STREQ (long_options[option_index].name, "qemu")) set_qemu (optarg, 0); else if (STREQ (long_options[option_index].name, "qemudir")) set_qemu (optarg, 1); @@ -162,7 +151,6 @@ main (int argc, char *argv[]) } } - preruncheck (); make_files (); printf ("===== Test starts here =====\n"); @@ -190,15 +178,6 @@ main (int argc, char *argv[]) tmpf); exit (EXIT_FAILURE); } - if (guestfs_add_drive_opts (g, isof, - GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", - GUESTFS_ADD_DRIVE_OPTS_READONLY, 1, - -1) == -1) { - fprintf (stderr, - _("libguestfs-test-tool: failed to add drive '%s'\n"), - isof); - exit (EXIT_FAILURE); - } /* Print any version info etc. */ vers = guestfs_version (g); @@ -211,12 +190,22 @@ main (int argc, char *argv[]) guestfs_free_version (vers); printf ("guestfs_get_append: %s\n", guestfs_get_append (g) ? : "(null)"); + printf ("guestfs_get_attach_method: %s\n", + guestfs_get_attach_method (g) ? : "(null)"); printf ("guestfs_get_autosync: %d\n", guestfs_get_autosync (g)); + printf ("guestfs_get_direct: %d\n", guestfs_get_direct (g)); printf ("guestfs_get_memsize: %d\n", guestfs_get_memsize (g)); + printf ("guestfs_get_network: %d\n", guestfs_get_network (g)); printf ("guestfs_get_path: %s\n", guestfs_get_path (g)); printf ("guestfs_get_qemu: %s\n", guestfs_get_qemu (g)); + printf ("guestfs_get_recovery_proc: %d\n", + guestfs_get_recovery_proc (g)); + printf ("guestfs_get_selinux: %d\n", guestfs_get_selinux (g)); + printf ("guestfs_get_trace: %d\n", guestfs_get_trace (g)); printf ("guestfs_get_verbose: %d\n", guestfs_get_verbose (g)); + printf ("host_cpu: %s\n", host_cpu); + /* Launch the guest handle. */ printf ("Launching appliance, timeout set to %d seconds.\n", timeout); fflush (stdout); @@ -235,9 +224,9 @@ main (int argc, char *argv[]) fflush (stdout); /* Create the filesystem and mount everything. */ - if (guestfs_sfdiskM (g, "/dev/sda", sfdisk_lines) == -1) { + if (guestfs_part_disk (g, "/dev/sda", "mbr") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to run sfdisk\n")); + _("libguestfs-test-tool: failed to run part-disk\n")); exit (EXIT_FAILURE); } @@ -253,27 +242,14 @@ main (int argc, char *argv[]) exit (EXIT_FAILURE); } - if (guestfs_mkdir (g, "/iso") == -1) { - fprintf (stderr, - _("libguestfs-test-tool: failed to mkdir /iso\n")); - exit (EXIT_FAILURE); - } - - if (guestfs_mount (g, "/dev/sdb", "/iso") == -1) { + /* Touch a file. */ + if (guestfs_touch (g, "/hello") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mount /dev/sdb on /iso\n")); + _("libguestfs-test-tool: failed to touch file\n")); exit (EXIT_FAILURE); } - /* Let's now run some simple tests using the helper program. */ - str = guestfs_command (g, helper_args); - if (str == NULL) { - fprintf (stderr, - _("libguestfs-test-tool: could not run helper program, or helper failed\n")); - exit (EXIT_FAILURE); - } - free (str); - + /* Booted and performed some simple operations -- success! */ printf ("===== TEST FINISHED OK =====\n"); exit (EXIT_SUCCESS); } @@ -358,86 +334,21 @@ set_qemu (const char *path, int use_wrapper) atexit (cleanup_wrapper); } -/* After getting the command line args, but before running - * anything, we check everything is in place to do the tests. - */ -static void -preruncheck (void) -{ - int r; - FILE *fp; - char cmd[256]; - char buffer[1024]; - - if (access (helper, R_OK) == -1) { - fprintf (stderr, - _("Test tool helper program 'libguestfs-test-tool-helper' is not\n" - "available. Expected to find it in '%s'\n" - "\n" - "Use the --helper option to specify the location of this program.\n"), - helper); - exit (EXIT_FAILURE); - } - - snprintf (cmd, sizeof cmd, "file '%s'", helper); - fp = popen (cmd, "r"); - if (fp == NULL) { - perror (cmd); - exit (EXIT_FAILURE); - } - r = fread (buffer, 1, sizeof buffer - 1, fp); - if (r == 0) { - fprintf (stderr, _("command failed: %s"), cmd); - exit (EXIT_FAILURE); - } - pclose (fp); - buffer[r] = '\0'; - - if (strstr (buffer, "statically linked") == NULL) { - fprintf (stderr, - _("Test tool helper program %s\n" - "is not statically linked. This is a build error when this test tool\n" - "was built.\n"), - helper); - exit (EXIT_FAILURE); - } -} - static void cleanup_tmpfiles (void) { unlink (tmpf); - unlink (isof); } static void make_files (void) { - int fd, r; - char cmd[256]; - - /* Make the ISO which will contain the helper program. */ - fd = mkstemp (isof); - if (fd == -1) { - perror (isof); - exit (EXIT_FAILURE); - } - close (fd); - - snprintf (cmd, sizeof cmd, "mkisofs -quiet -rJT -o '%s' '%s'", - isof, helper); - r = system (cmd); - if (r == -1 || WEXITSTATUS(r) != 0) { - fprintf (stderr, - _("mkisofs command failed: %s\n"), cmd); - exit (EXIT_FAILURE); - } + int fd; /* Allocate the sparse file for /dev/sda. */ fd = mkstemp (tmpf); if (fd == -1) { perror (tmpf); - unlink (isof); exit (EXIT_FAILURE); } @@ -445,7 +356,6 @@ make_files (void) perror ("lseek"); close (fd); unlink (tmpf); - unlink (isof); exit (EXIT_FAILURE); } @@ -453,11 +363,10 @@ make_files (void) perror ("write"); close (fd); unlink (tmpf); - unlink (isof); exit (EXIT_FAILURE); } close (fd); - atexit (cleanup_tmpfiles); /* Removes tmpf and isof. */ + atexit (cleanup_tmpfiles); /* Removes tmpf. */ } |