From 1c359d1140fee575cf478e2b4bf0c5ca0af9d05e Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 11 Jan 2016 20:34:28 +0000 Subject: [PATCH 06/11] Test the -o (oldstyle) command line option. --- .gitignore | 1 + tests/Makefile.am | 8 ++++ tests/test-oldstyle.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 tests/test-oldstyle.c diff --git a/.gitignore b/.gitignore index 9ea072f..bc151ca 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ Makefile.in /tests/test-newstyle /tests/test-ocaml /tests/test-ocaml-plugin.so +/tests/test-oldstyle /tests/test-perl /tests/test-python /tests/test-streaming diff --git a/tests/Makefile.am b/tests/Makefile.am index 8d27032..1e6114c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -111,6 +111,14 @@ test_newstyle_SOURCES = test-newstyle.c test.h test_newstyle_CFLAGS = $(WARNINGS_CFLAGS) $(LIBGUESTFS_CFLAGS) test_newstyle_LDADD = libtest.la $(LIBGUESTFS_LIBS) +# oldstyle protocol test. +check_PROGRAMS += test-oldstyle +TESTS += test-oldstyle + +test_oldstyle_SOURCES = test-oldstyle.c test.h +test_oldstyle_CFLAGS = $(WARNINGS_CFLAGS) $(LIBGUESTFS_CFLAGS) +test_oldstyle_LDADD = libtest.la $(LIBGUESTFS_LIBS) + # gzip plugin test. if HAVE_ZLIB if HAVE_GUESTFISH diff --git a/tests/test-oldstyle.c b/tests/test-oldstyle.c new file mode 100644 index 0000000..d809a0c --- /dev/null +++ b/tests/test-oldstyle.c @@ -0,0 +1,102 @@ +/* nbdkit + * Copyright (C) 2013-2016 Red Hat Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Red Hat nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "test.h" + +int +main (int argc, char *argv[]) +{ + guestfs_h *g; + int r; + char *data; + size_t i, size; + + if (test_start_nbdkit ("-o", NBDKIT_PLUGIN ("file"), "file=file-data", + NULL) == -1) + exit (EXIT_FAILURE); + + g = guestfs_create (); + if (g == NULL) { + perror ("guestfs_create"); + exit (EXIT_FAILURE); + } + + /* Using exportname = "" causes qemu to use the oldstyle protocol. */ + r = guestfs_add_drive_opts (g, "", + GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", + GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "nbd", + GUESTFS_ADD_DRIVE_OPTS_SERVER, server, + -1); + if (r == -1) + exit (EXIT_FAILURE); + + if (guestfs_launch (g) == -1) + exit (EXIT_FAILURE); + + /* Check the data in the file is \x01-\x08 repeated 512 times. */ + data = guestfs_pread_device (g, "/dev/sda", 8 * 512, 0, &size); + if (!data) + exit (EXIT_FAILURE); + if (size != 8 * 512) { + fprintf (stderr, "%s FAILED: unexpected size (actual: %zu, expected: 512)\n", + program_name, size); + exit (EXIT_FAILURE); + } + + for (i = 0; i < 512 * 8; i += 8) { + if (data[i] != 1 || data[i+1] != 2 || + data[i+2] != 3 || data[i+3] != 4 || + data[i+4] != 5 || data[i+5] != 6 || + data[i+6] != 7 || data[i+7] != 8) { + fprintf (stderr, "%s FAILED: unexpected data returned at offset %zu\n", + program_name, i); + exit (EXIT_FAILURE); + } + } + + free (data); + + guestfs_close (g); + exit (EXIT_SUCCESS); +} -- 2.7.4