diff options
author | Anand Avati <avati@redhat.com> | 2013-02-21 16:42:17 -0800 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-02-21 23:26:57 -0800 |
commit | 91052d8b5677920f2e5aea56fc082e243c76ca43 (patch) | |
tree | 3cd68c12b9bf0e159e967ee5e69728a67d484f3b /tests/fileio.rc | |
parent | 72ad9a3a8b684595dc394252c88c76c859919a45 (diff) |
tests/fileio.rc: library for file descriptor based IO in tests
There are situations in test scripts where we want to keep open file
descriptors while performing other commands. Bash has abilities
to manage file descriptors by numbers, but the syntax is a little
brain damaging.
This library provides wrappers around it to abstract away bash's
syntax and also provides a helper function to pick a free file
descriptor on the fly.
The APIs are pretty self explanatory.
Change-Id: I82f1d1957646dd6c468d9e85c90ec30c978c7ad6
BUG: 764966
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/4565
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'tests/fileio.rc')
-rw-r--r-- | tests/fileio.rc | 61 |
1 files changed, 61 insertions, 0 deletions
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; +} |