X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=test-tool%2Ftest-tool.c;h=c21906f3b1a2d8ced024776841805b309cd955c1;hp=f37656a7919774b2e73f2f4bfbdd0e61ff357f66;hb=61da709722ec244da1c3c7d4f1a8706f76687cb3;hpb=58e7e42033b1ac5044ae03f0aa5d5082c5fdb497 diff --git a/test-tool/test-tool.c b/test-tool/test-tool.c index f37656a..c21906f 100644 --- a/test-tool/test-tool.c +++ b/test-tool/test-tool.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include @@ -41,12 +43,33 @@ #define N_(str) str #endif +#if !ENABLE_NLS +#undef textdomain +#define textdomain(Domainname) /* empty */ +#undef bindtextdomain +#define bindtextdomain(Domainname, Dirname) /* empty */ +#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 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) + +#ifndef P_tmpdir +#define P_tmpdir "/tmp" +#endif + #define DEFAULT_TIMEOUT 120 static const char *helper = DEFAULT_HELPER; static int timeout = DEFAULT_TIMEOUT; -static char tmpf[] = "/tmp/libguestfs-test-tool-sda-XXXXXX"; -static char isof[] = "/tmp/libguestfs-test-tool-iso-XXXXXX"; +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); @@ -57,25 +80,29 @@ static void usage (void) { printf (_("libguestfs-test-tool: interactive test tool\n" - "Copyright (C) 2009 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); + "Copyright (C) 2009 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); } int main (int argc, char *argv[]) { - static const char *options = "?"; + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEBASEDIR); + textdomain (PACKAGE); + + static const char *options = "t:?"; static const struct option long_options[] = { { "help", 0, 0, '?' }, { "helper", 1, 0, 0 }, @@ -100,38 +127,38 @@ main (int argc, char *argv[]) switch (c) { case 0: /* options which are long only */ - if (strcmp (long_options[option_index].name, "helper") == 0) - helper = optarg; - else if (strcmp (long_options[option_index].name, "qemu") == 0) - set_qemu (optarg, 0); - else if (strcmp (long_options[option_index].name, "qemudir") == 0) - set_qemu (optarg, 1); + if (STREQ (long_options[option_index].name, "helper")) + helper = optarg; + else 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); else { - fprintf (stderr, - _("libguestfs-test-tool: unknown long option: %s (%d)\n"), - long_options[option_index].name, option_index); - exit (1); + fprintf (stderr, + _("libguestfs-test-tool: unknown long option: %s (%d)\n"), + long_options[option_index].name, option_index); + exit (EXIT_FAILURE); } break; case 't': if (sscanf (optarg, "%d", &timeout) != 1 || timeout < 0) { - fprintf (stderr, - _("libguestfs-test-tool: invalid timeout: %s\n"), - optarg); - exit (1); + fprintf (stderr, + _("libguestfs-test-tool: invalid timeout: %s\n"), + optarg); + exit (EXIT_FAILURE); } break; case '?': usage (); - exit (0); + exit (EXIT_SUCCESS); default: fprintf (stderr, - _("libguestfs-test-tool: unexpected command line option 0x%x\n"), - c); - exit (1); + _("libguestfs-test-tool: unexpected command line option 0x%x\n"), + c); + exit (EXIT_FAILURE); } } @@ -145,37 +172,42 @@ main (int argc, char *argv[]) /* Print out any environment variables which may relate to this test. */ for (i = 0; environ[i] != NULL; ++i) - if (strncmp (environ[i], "LIBGUESTFS_", 11) == 0) + if (STREQLEN (environ[i], "LIBGUESTFS_", 11)) printf ("%s\n", environ[i]); /* Create the handle and configure it. */ g = guestfs_create (); if (g == NULL) { fprintf (stderr, - _("libguestfs-test-tool: failed to create libguestfs handle\n")); - exit (1); + _("libguestfs-test-tool: failed to create libguestfs handle\n")); + exit (EXIT_FAILURE); } - if (guestfs_add_drive (g, tmpf) == -1) { + if (guestfs_add_drive_opts (g, tmpf, + GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", + -1) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to add drive '%s'\n"), - tmpf); - exit (1); + _("libguestfs-test-tool: failed to add drive '%s'\n"), + tmpf); + exit (EXIT_FAILURE); } - if (guestfs_add_drive (g, isof) == -1) { + 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 (1); + _("libguestfs-test-tool: failed to add drive '%s'\n"), + isof); + exit (EXIT_FAILURE); } /* Print any version info etc. */ vers = guestfs_version (g); if (vers == NULL) { fprintf (stderr, _("libguestfs-test-tool: guestfs_version failed\n")); - exit (1); + exit (EXIT_FAILURE); } printf ("library version: %"PRIi64".%"PRIi64".%"PRIi64"%s\n", - vers->major, vers->minor, vers->release, vers->extra); + vers->major, vers->minor, vers->release, vers->extra); guestfs_free_version (vers); printf ("guestfs_get_append: %s\n", guestfs_get_append (g) ? : "(null)"); @@ -186,21 +218,15 @@ main (int argc, char *argv[]) printf ("guestfs_get_verbose: %d\n", guestfs_get_verbose (g)); /* Launch the guest handle. */ - if (guestfs_launch (g) == -1) { - fprintf (stderr, - _("libguestfs-test-tool: failed to launch appliance\n")); - exit (1); - } - printf ("Launching appliance, timeout set to %d seconds.\n", timeout); fflush (stdout); alarm (timeout); - if (guestfs_wait_ready (g) == -1) { + if (guestfs_launch (g) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed or timed out in 'wait_ready'\n")); - exit (1); + _("libguestfs-test-tool: failed to launch appliance\n")); + exit (EXIT_FAILURE); } alarm (0); @@ -211,48 +237,48 @@ main (int argc, char *argv[]) /* Create the filesystem and mount everything. */ if (guestfs_sfdiskM (g, "/dev/sda", sfdisk_lines) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to run sfdisk\n")); - exit (1); + _("libguestfs-test-tool: failed to run sfdisk\n")); + exit (EXIT_FAILURE); } if (guestfs_mkfs (g, "ext2", "/dev/sda1") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mkfs.ext2\n")); - exit (1); + _("libguestfs-test-tool: failed to mkfs.ext2\n")); + exit (EXIT_FAILURE); } - if (guestfs_mount (g, "/dev/sda1", "/") == -1) { + if (guestfs_mount_options (g, "", "/dev/sda1", "/") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mount /dev/sda1 on /\n")); - exit (1); + _("libguestfs-test-tool: failed to mount /dev/sda1 on /\n")); + exit (EXIT_FAILURE); } if (guestfs_mkdir (g, "/iso") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mkdir /iso\n")); - exit (1); + _("libguestfs-test-tool: failed to mkdir /iso\n")); + exit (EXIT_FAILURE); } if (guestfs_mount (g, "/dev/sdb", "/iso") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mount /dev/sdb on /iso\n")); - exit (1); + _("libguestfs-test-tool: failed to mount /dev/sdb on /iso\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 (1); + _("libguestfs-test-tool: could not run helper program, or helper failed\n")); + exit (EXIT_FAILURE); } free (str); printf ("===== TEST FINISHED OK =====\n"); - exit (0); + exit (EXIT_SUCCESS); } -static char qemuwrapper[] = "/tmp/libguestfs-test-tool-wrapper-XXXXXX"; +static char qemuwrapper[] = P_tmpdir "/libguestfs-test-tool-wrapper-XXXXXX"; static void cleanup_wrapper (void) @@ -276,15 +302,15 @@ set_qemu (const char *path, int use_wrapper) fprintf (stderr, _("LIBGUESTFS_QEMU environment variable is already set, so\n" "--qemu/--qemudir options cannot be used.\n")); - exit (1); + exit (EXIT_FAILURE); } if (!use_wrapper) { if (access (path, X_OK) == -1) { fprintf (stderr, - _("Binary '%s' does not exist or is not executable\n"), - path); - exit (1); + _("Binary '%s' does not exist or is not executable\n"), + path); + exit (EXIT_FAILURE); } setenv ("LIBGUESTFS_QEMU", path, 1); @@ -296,26 +322,26 @@ set_qemu (const char *path, int use_wrapper) if (stat (buffer, &statbuf) == -1 || !S_ISDIR (statbuf.st_mode)) { fprintf (stderr, - _("%s: does not look like a qemu source directory\n"), - path); - exit (1); + _("%s: does not look like a qemu source directory\n"), + path); + exit (EXIT_FAILURE); } /* Make a wrapper script. */ fd = mkstemp (qemuwrapper); if (fd == -1) { perror (qemuwrapper); - exit (1); + exit (EXIT_FAILURE); } fchmod (fd, 0700); fp = fdopen (fd, "w"); fprintf (fp, - "#!/bin/sh -\n" - "qemudir='%s'\n" - "\"$qemudir\"/", - path); + "#!/bin/sh -\n" + "qemudir='%s'\n" + "\"$qemudir\"/", + path); /* Select the right qemu binary for the wrapper script. */ #ifdef __i386__ @@ -349,20 +375,20 @@ preruncheck (void) "available. Expected to find it in '%s'\n" "\n" "Use the --helper option to specify the location of this program.\n"), - helper); - exit (1); + helper); + exit (EXIT_FAILURE); } snprintf (cmd, sizeof cmd, "file '%s'", helper); fp = popen (cmd, "r"); if (fp == NULL) { perror (cmd); - exit (1); + exit (EXIT_FAILURE); } r = fread (buffer, 1, sizeof buffer - 1, fp); if (r == 0) { fprintf (stderr, _("command failed: %s"), cmd); - exit (1); + exit (EXIT_FAILURE); } pclose (fp); buffer[r] = '\0'; @@ -372,8 +398,8 @@ preruncheck (void) _("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 (1); + helper); + exit (EXIT_FAILURE); } } @@ -394,17 +420,17 @@ make_files (void) fd = mkstemp (isof); if (fd == -1) { perror (isof); - exit (1); + exit (EXIT_FAILURE); } close (fd); snprintf (cmd, sizeof cmd, "mkisofs -quiet -rJT -o '%s' '%s'", - isof, helper); + isof, helper); r = system (cmd); if (r == -1 || WEXITSTATUS(r) != 0) { fprintf (stderr, - _("mkisofs command failed: %s\n"), cmd); - exit (1); + _("mkisofs command failed: %s\n"), cmd); + exit (EXIT_FAILURE); } /* Allocate the sparse file for /dev/sda. */ @@ -412,7 +438,7 @@ make_files (void) if (fd == -1) { perror (tmpf); unlink (isof); - exit (1); + exit (EXIT_FAILURE); } if (lseek (fd, 100 * 1024 * 1024 - 1, SEEK_SET) == -1) { @@ -420,7 +446,7 @@ make_files (void) close (fd); unlink (tmpf); unlink (isof); - exit (1); + exit (EXIT_FAILURE); } if (write (fd, "\0", 1) == -1) { @@ -428,7 +454,7 @@ make_files (void) close (fd); unlink (tmpf); unlink (isof); - exit (1); + exit (EXIT_FAILURE); } close (fd);