| #!/bin/bash |
| . ./wvtest/wvtest.sh |
| |
| WUC=./host-wait-until-created |
| |
| WVSTART "wait-until-created test" |
| |
| rm -f f1 f2 |
| |
| try_timeout() |
| { |
| local timeout=$1 pid= pid2= rv= |
| shift |
| "$@" & |
| pid=$! |
| ( |
| sleep $timeout & |
| pid3=$! |
| trap 'kill $pid3' SIGTERM |
| wait |
| kill $pid 2>/dev/null |
| ) & |
| pid2=$! |
| echo "waiting for '$*'..." |
| wait $pid |
| rv=$? |
| kill $pid2 2>/dev/null |
| wait $pid2 |
| return $rv |
| } |
| |
| # fails instantly if no files given |
| WVFAIL $WUC |
| |
| # returns instantly if file exists |
| touch f1 |
| WVPASS $WUC f1 |
| WVPASS $WUC "$PWD/f1" |
| |
| # returns instantly if any one file exists |
| WVPASS $WUC f1 ../file-does-not-exist |
| |
| # returns instantly if the file does exist (verifying try_timeout) |
| WVPASS try_timeout 5 $WUC f1 |
| |
| # does *not* return if the file doesn't exist |
| time WVFAIL try_timeout 0.1 $WUC will-never-exist |
| |
| # does return if file is created during test |
| echo 'starting wait for f2' |
| WVPASS try_timeout 5 $WUC f2 & |
| echo 'bg process running' |
| echo 'creating f2' |
| touch f2 |
| echo 'waiting' |
| wait |
| |
| # does return if directory is created during test |
| echo 'starting wait for d2/f2' |
| WVPASS try_timeout 5 $WUC d2/f2 & |
| echo 'bg process running' |
| echo 'creating d2' |
| mkdir d2 |
| echo 'creating d2/f2' |
| touch d2/f2 |
| echo 'waiting' |
| wait |
| |
| |
| rm -f f1 f2 |
| rm -rf d2 |
| |