mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
Add caution subdirectory containing safety and liveness tests.
Not that I'm paranoid about qemu breaking snapshots of anything like that ...
This commit is contained in:
@@ -30,7 +30,7 @@ SUBDIRS += appliance
|
||||
endif
|
||||
|
||||
# Tests and the test-tool.
|
||||
SUBDIRS += gnulib/tests capitests regressions test-tool
|
||||
SUBDIRS += gnulib/tests capitests caution regressions test-tool
|
||||
|
||||
# Guestfish.
|
||||
SUBDIRS += fish
|
||||
|
||||
36
caution/Makefile.am
Normal file
36
caution/Makefile.am
Normal file
@@ -0,0 +1,36 @@
|
||||
# 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., 675 Mass Ave, Cambridge, MA 02139, 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
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(TESTS)
|
||||
94
caution/qemu-snapshot-isolation.sh
Executable file
94
caution/qemu-snapshot-isolation.sh
Executable file
@@ -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., 675 Mass Ave, Cambridge, MA 02139, 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
|
||||
@@ -802,6 +802,7 @@ AC_CONFIG_FILES([Makefile
|
||||
appliance/Makefile
|
||||
capitests/Makefile
|
||||
cat/Makefile
|
||||
caution/Makefile
|
||||
csharp/Makefile
|
||||
debian/changelog
|
||||
df/Makefile
|
||||
|
||||
@@ -2658,6 +2658,11 @@ Automated tests of the C API.
|
||||
The L<virt-cat(1)>, L<virt-filesystems(1)> and L<virt-ls(1)> commands
|
||||
and documentation.
|
||||
|
||||
=item C<caution>
|
||||
|
||||
Safety and liveness tests of components that libguestfs depends upon
|
||||
(not of libguestfs itself). Mainly this is for qemu and the kernel.
|
||||
|
||||
=item C<contrib>
|
||||
|
||||
Outside contributions, experimental parts.
|
||||
|
||||
Reference in New Issue
Block a user