summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fuse/Makefile.am4
-rwxr-xr-xfuse/test-fuse-umount-race.sh77
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