--- .gitignore | 2 ++ tests/Makefile.am | 26 ++++++++++++++++ tests/test-ext2.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) diff --git a/.gitignore b/.gitignore index 3b7365f..f41de87 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ Makefile.in /tests/disk /tests/disk.gz /tests/disk.xz +/tests/ext2.img /tests/file-data /tests/offset-data /tests/partition-disk @@ -57,6 +58,7 @@ Makefile.in /tests/test-connect /tests/test-delay /tests/test-exit-with-parent +/tests/test-ext2 /tests/test-file /tests/test-gzip /tests/test-memory diff --git a/tests/Makefile.am b/tests/Makefile.am index 1830cd3..850240b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -244,6 +244,32 @@ disk: endif HAVE_GUESTFISH +# ext2 plugin test. +if HAVE_EXT2 +if HAVE_GUESTFISH + +LIBGUESTFS_TESTS += test-ext2 +check_DATA += ext2.img +MAINTAINERCLEANFILES += ext2.img + +ext2.img: disk + rm -f $@ $@-t + guestfish \ + sparse $@-t 2G : \ + run : \ + mkfs ext4 /dev/sda : \ + mount /dev/sda / : \ + mkdir /disks : \ + upload $< /disks/disk.img + mv $@-t $@ + +test_ext2_SOURCES = test-ext2.c test.h +test_ext2_CFLAGS = $(WARNINGS_CFLAGS) $(LIBGUESTFS_CFLAGS) +test_ext2_LDADD = libtest.la $(LIBGUESTFS_LIBS) + +endif HAVE_GUESTFISH +endif HAVE_EXT2 + # file plugin test. LIBGUESTFS_TESTS += test-file diff --git a/tests/test-ext2.c b/tests/test-ext2.c new file mode 100644 index 0000000..b222533 --- /dev/null +++ b/tests/test-ext2.c @@ -0,0 +1,92 @@ +/* nbdkit + * Copyright (C) 2013-2018 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; + + if (test_start_nbdkit ("ext2", "-r", "disk=ext2.img", "file=/disks/disk.img", + NULL) == -1) + exit (EXIT_FAILURE); + + g = guestfs_create (); + if (g == NULL) { + perror ("guestfs_create"); + exit (EXIT_FAILURE); + } + + r = guestfs_add_drive_opts (g, "", + GUESTFS_ADD_DRIVE_OPTS_READONLY, 1, + 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); + + /* disk.img contains one partition and a test file called "hello.txt" */ + if (guestfs_mount_ro (g, "/dev/sda1", "/") == -1) + exit (EXIT_FAILURE); + + data = guestfs_cat (g, "/hello.txt"); + if (!data) + exit (EXIT_FAILURE); + + if (strcmp (data, "hello,world") != 0) { + fprintf (stderr, "%s FAILED: unexpected content of /hello.txt file (actual: %s, expected: \"hello,world\")\n", + program_name, data); + exit (EXIT_FAILURE); + } + + guestfs_close (g); + exit (EXIT_SUCCESS); +} -- 2.16.2