diff options
-rw-r--r-- | fuse/Makefile.am | 4 | ||||
-rwxr-xr-x | fuse/test-fuse-umount-race.sh | 77 |
2 files changed, 79 insertions, 2 deletions
diff --git a/fuse/Makefile.am b/fuse/Makefile.am index 1ab8c7bd..706643ad 100644 --- a/fuse/Makefile.am +++ b/fuse/Makefile.am @@ -17,7 +17,7 @@ include $(top_srcdir)/subdir-rules.mk -EXTRA_DIST = guestmount.pod test-fuse.sh +EXTRA_DIST = guestmount.pod test-fuse.sh test-fuse-umount-race.sh CLEANFILES = stamp-guestmount.pod @@ -73,7 +73,7 @@ stamp-guestmount.pod: guestmount.pod # Tests. if ENABLE_APPLIANCE -TESTS = test-fuse.sh +TESTS = test-fuse.sh test-fuse-umount-race.sh endif ENABLE_APPLIANCE TESTS_ENVIRONMENT = \ top_builddir=.. \ diff --git a/fuse/test-fuse-umount-race.sh b/fuse/test-fuse-umount-race.sh new file mode 100755 index 00000000..a5a6e21d --- /dev/null +++ b/fuse/test-fuse-umount-race.sh @@ -0,0 +1,77 @@ +#!/bin/bash - +# libguestfs +# Copyright (C) 2012 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. + +# https://bugzilla.redhat.com/show_bug.cgi?id=838592 +# This tests that the --pid-file option can be used to fix the race. + +unset CDPATH +set -e +#set -v + +if [ -n "$SKIP_TEST_FUSE_SH" ]; then + echo "$0: test skipped because environment variable is set." + exit 0 +fi + +if [ ! -w /dev/fuse ]; then + echo "SKIPPING guestmount test, because there is no /dev/fuse." + exit 0 +fi + +rm -f test.qcow2 test-copy.qcow2 test.pid +rm -rf mp + +# Make a copy of the Fedora image so we can write to it then discard it. +qemu-img create -F raw -b ../tests/guests/fedora.img -f qcow2 test.qcow2 + +mkdir mp +./guestmount -a test.qcow2 -m /dev/VG/Root --pid-file test.pid mp +cp $0 mp/test-umount + +count=10 +while ! fusermount -u mp && [ $count -gt 0 ]; do + sleep 1 + ((count--)) +done +if [ $count -eq 0 ]; then + echo "$0: fusermount failed after 10 attempts" + exit 1 +fi + +# Wait for guestmount to exit. +count=10 +while kill -0 `cat test.pid` 2>/dev/null && [ $count -gt 0 ]; do + sleep 1 + ((count--)) +done +if [ $count -eq 0 ]; then + echo "$0: wait for guestmount to exit failed after 10 seconds" + exit 1 +fi + +# It should now be safe to copy and read the disk image. +cp test.qcow2 test-copy.qcow2 + +if [ "$(../fish/guestfish -a test-copy.qcow2 --ro -i is-file /test-umount)" != "true" ]; then + echo "$0: test failed" + exit 1 +fi + +rm test.qcow2 test-copy.qcow2 +rm -f test.pid +rm -r mp |