diff options
| -rw-r--r-- | tests/bugs/bug-846240.t | 6 | ||||
| -rw-r--r-- | tests/fileio.rc | 61 | 
2 files changed, 65 insertions, 2 deletions
diff --git a/tests/bugs/bug-846240.t b/tests/bugs/bug-846240.t index 5c5fbf0147a..12e4949ef36 100644 --- a/tests/bugs/bug-846240.t +++ b/tests/bugs/bug-846240.t @@ -2,6 +2,7 @@  . $(dirname $0)/../include.rc  . $(dirname $0)/../volume.rc +. $(dirname $0)/../fileio.rc  cleanup; @@ -30,7 +31,8 @@ TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M1;  TEST touch $M0/testfile;  # open the file with the fd as 4 -exec 4>"$M0/testfile"; +TEST fd=`fd_available`; +TEST fd_open $fd 'w' "$M0/testfile";  # remove the file from the other mount point. If unlink is sent from  # $M0 itself, then the file will be actually opened by open-behind which @@ -47,7 +49,7 @@ TEST rm -f $M1/testfile;  echo "data" >> $M0/testfile 2>/dev/null 1>/dev/null;  TEST [ $? -ne 0 ] -exec 4>&- +TEST fd_close $fd;  TEST rm -rf $MOUNTDIR/* diff --git a/tests/fileio.rc b/tests/fileio.rc new file mode 100644 index 00000000000..58871b3b97a --- /dev/null +++ b/tests/fileio.rc @@ -0,0 +1,61 @@ +#!/bin/bash + +function fd_available() { +         for i in {1..65536}; do +	     if [ ! -e /proc/$$/fd/$i ]; then +		 echo $i; +		 return 0; +	     fi +	 done + +	 return 1; +} + +function fd_open() { +	 local fd=$1; +	 local mode=$2 +	 local path=$3; + +	 case $mode in +	     r) +		 eval "exec $fd<$path";; +	     w) +		 eval "exec $fd>$path";; +	     rw) +		 eval "exec $fd<>$path";; +	     *) +		 false;; +	 esac +} + + +function fd_cat() { +	 local fd=$1; + +	 eval "cat <&$fd"; +} + + +function fd_write() { +	 local fd=$1; +	 shift; +	 local msg="$@"; + +	 eval "echo $@ >&$fd"; +} + + +function fd_close() { +	 local fd=$1; + +	 eval "exec $fd>&-"; +} + + +function fd_based_example() { +    TEST fd=`fd_available`; +    TEST fd_open $fd "rw" $M0/filename; +    TEST fd_cat $fd; # print existing stuff +    TEST fd_write $fd "new stuff"; # append +    TEST fd_close $fd; +}  | 
