From 72f5487be2df82277021d61f01884381ed9efbc5 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 22 Dec 2011 08:34:57 +0000 Subject: tests: Rename caution -> tests/qemu. --- Makefile.am | 2 +- caution/Makefile.am | 37 -------------- caution/qemu-snapshot-isolation.sh | 94 ----------------------------------- configure.ac | 2 +- src/guestfs.pod | 5 -- tests/qemu/Makefile.am | 37 ++++++++++++++ tests/qemu/qemu-snapshot-isolation.sh | 94 +++++++++++++++++++++++++++++++++++ 7 files changed, 133 insertions(+), 138 deletions(-) delete mode 100644 caution/Makefile.am delete mode 100755 caution/qemu-snapshot-isolation.sh create mode 100644 tests/qemu/Makefile.am create mode 100755 tests/qemu/qemu-snapshot-isolation.sh diff --git a/Makefile.am b/Makefile.am index 5c900045..eddf4f9d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -30,7 +30,7 @@ SUBDIRS += appliance endif # Tests and the test-tool. -SUBDIRS += gnulib/tests capitests caution regressions extratests test-tool +SUBDIRS += gnulib/tests capitests tests/qemu regressions extratests test-tool # Guestfish. SUBDIRS += fish diff --git a/caution/Makefile.am b/caution/Makefile.am deleted file mode 100644 index fb95a747..00000000 --- a/caution/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -# libguestfs -# Copyright (C) 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 -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# Safety and liveness tests of components that libguestfs depends upon -# (not of libguestfs itself). Mainly this is for qemu and the kernel. -# -# See also capitests and regressions directories. - -include $(top_srcdir)/subdir-rules.mk - -TESTS = \ - qemu-snapshot-isolation.sh - -random_val := $(shell awk 'BEGIN{srand(); print 1+int(255*rand())}' < /dev/null) - -TESTS_ENVIRONMENT = \ - MALLOC_PERTURB_=$(random_val) \ - LD_LIBRARY_PATH=$(top_builddir)/src/.libs \ - LIBGUESTFS_PATH=$(top_builddir)/appliance \ - TMPDIR=$(top_builddir) - -EXTRA_DIST = \ - $(TESTS) diff --git a/caution/qemu-snapshot-isolation.sh b/caution/qemu-snapshot-isolation.sh deleted file mode 100755 index 384706c2..00000000 --- a/caution/qemu-snapshot-isolation.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash - -# libguestfs -# Copyright (C) 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 -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# Test that qemu snapshots are really isolating writes from the -# underlying disk image. If this test were to fail, you could expect -# libguestfs to cause massive disk corruption on live guests. - -set -e - -rm -f test1.img test2.img test3.img - -truncate -s 100M test1.img -test1_md5sum="$(md5sum test1.img | awk '{print $1}')" -truncate -s 100M test2.img -test2_md5sum="$(md5sum test2.img | awk '{print $1}')" -qemu-img create -f qcow2 test3.img 100M -test3_md5sum="$(md5sum test3.img | awk '{print $1}')" - -# The vitally important calls are 'add-drive-ro' and -# 'add-drive-opts ... readonly:true'. -../fish/guestfish <<'EOF' -add-drive-ro test1.img -add-drive-opts test2.img format:raw readonly:true -add-drive-opts test3.img format:qcow2 readonly:true -run - -part-disk /dev/sda mbr -part-disk /dev/sdb mbr -part-disk /dev/sdc mbr - -mkfs ext2 /dev/sda1 -copy-size /dev/sda1 /dev/sdb1 5M -pvcreate /dev/sdc1 -vgcreate VG /dev/sdc1 -lvcreate LV VG 80 -mkfs ext3 /dev/VG/LV - -mkmountpoint /a -mount-options "" /dev/sda1 /a -mkmountpoint /b -mount-options "" /dev/sdb1 /b -mkmountpoint /c -mount-options "" /dev/VG/LV /c - -write /a/test "This is a test" -write /b/test "This is a test" -write /c/test "This is a test" - -# Really try hard to force writes to the disk. -umount-all -sync - -EOF - -# Now verify that the original disks have not been touched. -function serious_error -{ - echo - echo - echo "***** SERIOUS ERROR *****" - echo "qemu's snapshot isolation does not appear to be working." - echo "Running libguestfs could cause disk corruption on live guests." - echo - echo "DO NOT USE libguestfs before you have resolved this problem." - echo - exit 1 -} - -if [ "$(md5sum test1.img | awk '{print $1}')" != "$test1_md5sum" ]; then - serious_error -fi -if [ "$(md5sum test2.img | awk '{print $1}')" != "$test2_md5sum" ]; then - serious_error -fi -if [ "$(md5sum test3.img | awk '{print $1}')" != "$test3_md5sum" ]; then - serious_error -fi - -rm test1.img test2.img test3.img diff --git a/configure.ac b/configure.ac index 28243a29..ce38b41e 100644 --- a/configure.ac +++ b/configure.ac @@ -1008,7 +1008,6 @@ AC_CONFIG_FILES([Makefile appliance/Makefile capitests/Makefile cat/Makefile - caution/Makefile clone/Makefile csharp/Makefile daemon/Makefile @@ -1052,6 +1051,7 @@ AC_CONFIG_FILES([Makefile sparsify/Makefile src/Makefile test-tool/Makefile + tests/qemu/Makefile tools/Makefile]) AC_OUTPUT diff --git a/src/guestfs.pod b/src/guestfs.pod index f9a715ab..2e18fd6d 100644 --- a/src/guestfs.pod +++ b/src/guestfs.pod @@ -2926,11 +2926,6 @@ Automated tests of the C API. The L, L and L commands and documentation. -=item C - -Safety and liveness tests of components that libguestfs depends upon -(not of libguestfs itself). Mainly this is for qemu and the kernel. - =item C Tools for cloning virtual machines. Currently contains diff --git a/tests/qemu/Makefile.am b/tests/qemu/Makefile.am new file mode 100644 index 00000000..fb95a747 --- /dev/null +++ b/tests/qemu/Makefile.am @@ -0,0 +1,37 @@ +# libguestfs +# Copyright (C) 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 +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Safety and liveness tests of components that libguestfs depends upon +# (not of libguestfs itself). Mainly this is for qemu and the kernel. +# +# See also capitests and regressions directories. + +include $(top_srcdir)/subdir-rules.mk + +TESTS = \ + qemu-snapshot-isolation.sh + +random_val := $(shell awk 'BEGIN{srand(); print 1+int(255*rand())}' < /dev/null) + +TESTS_ENVIRONMENT = \ + MALLOC_PERTURB_=$(random_val) \ + LD_LIBRARY_PATH=$(top_builddir)/src/.libs \ + LIBGUESTFS_PATH=$(top_builddir)/appliance \ + TMPDIR=$(top_builddir) + +EXTRA_DIST = \ + $(TESTS) diff --git a/tests/qemu/qemu-snapshot-isolation.sh b/tests/qemu/qemu-snapshot-isolation.sh new file mode 100755 index 00000000..384706c2 --- /dev/null +++ b/tests/qemu/qemu-snapshot-isolation.sh @@ -0,0 +1,94 @@ +#!/bin/bash - +# libguestfs +# Copyright (C) 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 +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Test that qemu snapshots are really isolating writes from the +# underlying disk image. If this test were to fail, you could expect +# libguestfs to cause massive disk corruption on live guests. + +set -e + +rm -f test1.img test2.img test3.img + +truncate -s 100M test1.img +test1_md5sum="$(md5sum test1.img | awk '{print $1}')" +truncate -s 100M test2.img +test2_md5sum="$(md5sum test2.img | awk '{print $1}')" +qemu-img create -f qcow2 test3.img 100M +test3_md5sum="$(md5sum test3.img | awk '{print $1}')" + +# The vitally important calls are 'add-drive-ro' and +# 'add-drive-opts ... readonly:true'. +../fish/guestfish <<'EOF' +add-drive-ro test1.img +add-drive-opts test2.img format:raw readonly:true +add-drive-opts test3.img format:qcow2 readonly:true +run + +part-disk /dev/sda mbr +part-disk /dev/sdb mbr +part-disk /dev/sdc mbr + +mkfs ext2 /dev/sda1 +copy-size /dev/sda1 /dev/sdb1 5M +pvcreate /dev/sdc1 +vgcreate VG /dev/sdc1 +lvcreate LV VG 80 +mkfs ext3 /dev/VG/LV + +mkmountpoint /a +mount-options "" /dev/sda1 /a +mkmountpoint /b +mount-options "" /dev/sdb1 /b +mkmountpoint /c +mount-options "" /dev/VG/LV /c + +write /a/test "This is a test" +write /b/test "This is a test" +write /c/test "This is a test" + +# Really try hard to force writes to the disk. +umount-all +sync + +EOF + +# Now verify that the original disks have not been touched. +function serious_error +{ + echo + echo + echo "***** SERIOUS ERROR *****" + echo "qemu's snapshot isolation does not appear to be working." + echo "Running libguestfs could cause disk corruption on live guests." + echo + echo "DO NOT USE libguestfs before you have resolved this problem." + echo + exit 1 +} + +if [ "$(md5sum test1.img | awk '{print $1}')" != "$test1_md5sum" ]; then + serious_error +fi +if [ "$(md5sum test2.img | awk '{print $1}')" != "$test2_md5sum" ]; then + serious_error +fi +if [ "$(md5sum test3.img | awk '{print $1}')" != "$test3_md5sum" ]; then + serious_error +fi + +rm test1.img test2.img test3.img -- cgit