X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fuse%2Ftest-fuse.sh;h=7de5211fd5988fa7d4bf21dac80aa926d03be853;hp=fffd851f021bfa727dbd3743d11fedd67a4cdc96;hb=b148df4df9f27162b2e1991c3fbeef070b2c343a;hpb=5c2da21b2ae56adc16bbd5bf9740a04ca70f9f19 diff --git a/fuse/test-fuse.sh b/fuse/test-fuse.sh index fffd851..7de5211 100755 --- a/fuse/test-fuse.sh +++ b/fuse/test-fuse.sh @@ -1,6 +1,6 @@ #!/bin/bash - # libguestfs -# Copyright (C) 2009 Red Hat Inc. +# Copyright (C) 2009-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 @@ -20,6 +20,11 @@ unset CDPATH set -e #set -v +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 @@ -31,6 +36,10 @@ nr_stages=$(grep "^stage " $0 | wc -l) # and move to that directory for the initial phase of the script. top_builddir=$(cd "$top_builddir" > /dev/null; pwd) +# 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" @@ -69,8 +78,8 @@ function cleanup () # you from unmounting it! Hence the need for this loop. count=10 while ! fusermount -u "$mp" && [ $count -gt 0 ]; do - sleep 1 - ((count--)) + sleep 1 + ((count--)) done rm -f "$image" @@ -86,20 +95,29 @@ function stage () ((s++)) } -stage Create filesystem with some inital content +stage Create filesystem with some initial content $guestfish < /dev/null EOF stage Mounting the filesystem -$guestmount -a "$image" -m /dev/sda1 "$mp" +$guestmount \ + -a "$image" -m /dev/sda1:/:acl,user_xattr \ + -o uid="$(id -u)" -o gid="$(id -g)" "$mp" +# To debug guestmount, add this to the end of the preceding command: +# -v -x & sleep 60 stage Changing into mounted directory cd "$mp" @@ -195,21 +213,46 @@ truncate -c -s 0 truncated [ "$(stat -c %s truncated)" -eq 0 ] rm -f truncated -stage Checking utimens and timestamps -for ts in 12345 1234567 987654321; do - # NB: It's not possible to set the ctime with touch. - touch -a -d @$ts timestamp - [ "$(stat -c %X timestamp)" -eq $ts ] - touch -m -d @$ts timestamp - [ "$(stat -c %Y timestamp)" -eq $ts ] - touch -d @$ts timestamp - [ "$(stat -c %X timestamp)" -eq $ts ] - [ "$(stat -c %Y timestamp)" -eq $ts ] -done +# Disabled because of RHBZ#660687 on Debian. +# stage Checking utimens and timestamps +# for ts in 12345 1234567 987654321; do +# # NB: It's not possible to set the ctime with touch. +# touch -a -d @$ts timestamp +# [ "$(stat -c %X timestamp)" -eq $ts ] +# touch -m -d @$ts timestamp +# [ "$(stat -c %Y timestamp)" -eq $ts ] +# touch -d @$ts timestamp +# [ "$(stat -c %X timestamp)" -eq $ts ] +# [ "$(stat -c %Y timestamp)" -eq $ts ] +# done + +stage Checking writes +cp hello.txt copy.txt +echo >> copy.txt +echo world >> copy.txt +echo bigger >> copy.txt +echo biggest >> copy.txt +[ "$(cat copy.txt)" = "hello +world +bigger +biggest" ] + +stage 'Checking extended attribute (xattr) read operation' +if getfattr --help > /dev/null 2>&1 ; then + [ "$(getfattr -d user_xattr | grep -v ^#)" = 'user.test="hello123"' ] +fi + +stage Checking POSIX ACL read operation +if getfacl --help > /dev/null 2>&1 ; then + [ "$(getfacl -n acl | grep -v ^#)" = "user::rw- +user:500:r-- +group::r-- +mask::r-- +other::r--" ] +fi # These ones are not yet tested by the current script: #stage XXX statfs/statvfs -#stage XXX xattr operations # These ones cannot easily be tested by the current script, eg because # this script doesn't run as root: