Update dependencies
[sunshowers.git] / t / test-lib.sh
blobd1c1e25daa3426a86a19d2db0656c2b85db805b2
1 #!/bin/sh
2 . ./my-tap-lib.sh
4 set -e
5 set +u
6 RUBY="${RUBY-ruby}"
7 RUBY_VERSION=${RUBY_VERSION-$($RUBY -e 'puts RUBY_VERSION')}
8 t_pfx=$PWD/trash/$T-$RUBY_VERSION
10 if test -z "$RAINBOWS_MODEL"
11 then
12 case $RUBY_VERSION in
13 1.9.*) RAINBOWS_MODEL=FiberSpawn ;;
14 *) RAINBOWS_MODEL=ThreadSpawn ;;
15 esac
17 set -u
19 PATH=$PWD/bin:$PATH
20 export PATH
22 test -x $PWD/bin/unused_listen || die "must be run in 't' directory"
24 wait_for_test_s () {
25 path="$1"
26 nr=30
27 while ! test -s "$path" && test $nr -gt 0
29 nr=$(($nr - 1))
30 sleep 1
31 done
34 # requires $1 and prints out the value of $2
35 require_check () {
36 lib=$1
37 const=$2
38 if ! $RUBY -r$lib -e "puts $const" >/dev/null 2>&1
39 then
40 t_info "skipping $T since we don't have $lib"
41 exit 0
45 # given a list of variable names, create temporary files and assign
46 # the pathnames to those variables
47 rtmpfiles () {
48 for id in "$@"
50 name=$id
51 _tmp=$t_pfx.$id
52 eval "$id=$_tmp"
54 case $name in
55 *fifo)
56 rm -f $_tmp
57 mkfifo $_tmp
58 T_RM_LIST="$T_RM_LIST $_tmp"
60 *socket)
61 rm -f $_tmp
62 T_RM_LIST="$T_RM_LIST $_tmp"
65 > $_tmp
66 T_OK_RM_LIST="$T_OK_RM_LIST $_tmp"
68 esac
69 done
72 dbgcat () {
73 id=$1
74 eval '_file=$'$id
75 echo "==> $id <=="
76 sed -e "s/^/$id:/" < $_file
79 check_stderr () {
80 set +u
81 _r_err=${1-${r_err}}
82 set -u
83 if grep -i Error $_r_err
84 then
85 die "Errors found in $_r_err"
86 elif grep SIGKILL $_r_err
87 then
88 die "SIGKILL found in $_r_err"
92 rack_server_setup () {
93 eval $(unused_listen)
94 rtmpfiles unicorn_config pid r_err r_out fifo tmp ok
95 cat > $unicorn_config <<EOF
96 listen "$listen"
97 pid "$pid"
98 stderr_path "$r_err"
99 stdout_path "$r_out"
101 # close my-tap-lib.sh FDs
102 unless ENV['UNICORN_FD']
103 IO.for_fd(3).close rescue nil
104 IO.for_fd(4).close rescue nil
107 before_fork do |server, worker|
108 # test script will block while reading from $fifo,
109 # so notify the script on the first worker we spawn
110 # by opening the FIFO
111 if worker.nr == 0
112 File.open("$fifo", "wb") { |fp| fp.syswrite "START" }
116 Rainbows! do
117 use :$RAINBOWS_MODEL
122 rack_server_wait_start () {
123 # "cat $fifo" will block until the before_fork hook is called in
124 # the Unicorn config file
125 test xSTART = x"$(cat $fifo)"
126 rack_server_pid=$(cat $pid)
129 rack_server_start () {
130 rack_server_setup
131 rainbows -D echo.ru -c $unicorn_config
132 rack_server_wait_start
135 teardown () {
136 kill "$rack_server_pid"