2016-05-19 11:18:38 +00:00
|
|
|
From 1c359d1140fee575cf478e2b4bf0c5ca0af9d05e Mon Sep 17 00:00:00 2001
|
|
|
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
|
|
Date: Mon, 11 Jan 2016 20:34:28 +0000
|
2016-05-25 10:24:16 +00:00
|
|
|
Subject: [PATCH 06/11] Test the -o (oldstyle) command line option.
|
2016-05-19 11:18:38 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
.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 <config.h>
|
|
|
|
+
|
|
|
|
+#include <stdio.h>
|
|
|
|
+#include <stdlib.h>
|
|
|
|
+#include <stdint.h>
|
|
|
|
+#include <inttypes.h>
|
|
|
|
+#include <string.h>
|
|
|
|
+#include <unistd.h>
|
|
|
|
+
|
|
|
|
+#include <guestfs.h>
|
|
|
|
+
|
|
|
|
+#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
|
|
|
|
|