summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-07-09 15:56:47 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-07-10 00:21:36 +0100
commitadfc10e9a3df2bb948b870a1dabb9f121733ae99 (patch)
tree4a2f694fb16534f0b3bbcd90f83b1d2cb75ed03b
parent5cf365e56047acbbcdb4d8aac1b7518093690162 (diff)
downloadlibguestfs-adfc10e9a3df2bb948b870a1dabb9f121733ae99.tar.gz
libguestfs-adfc10e9a3df2bb948b870a1dabb9f121733ae99.tar.xz
libguestfs-adfc10e9a3df2bb948b870a1dabb9f121733ae99.zip
fuse: Add regression test for RHBZ#838592.
(cherry picked from commit 8df259496a80bc74edbab4436e3679d0900bd173)
-rw-r--r--fuse/Makefile.am4
-rwxr-xr-xfuse/test-fuse-umount-race.sh89
2 files changed, 91 insertions, 2 deletions
diff --git a/fuse/Makefile.am b/fuse/Makefile.am
index 19c498bb..c0e173ef 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
@@ -75,7 +75,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..1e4340b5
--- /dev/null
+++ b/fuse/test-fuse-umount-race.sh
@@ -0,0 +1,89 @@
+#!/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
+
+if [ -z "$top_builddir" ]; then
+ echo "$0: error: environment variable \$top_builddir must be set"
+ exit 1
+fi
+
+# Set TMPDIR so the appliance doesn't conflict with globally
+# installed libguestfs.
+export TMPDIR=$top_builddir
+
+# Set libguestfs up for running locally.
+export LIBGUESTFS_PATH="$top_builddir/appliance"
+
+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 $(pwd)/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