Add top-level "test" target for make
[rainbows.git] / t / t3000-revactor-basic.sh
blob163e0dba45c30d02d07d5ef57a0af9cc9786a73a
1 #!/bin/sh
2 . ./test-lib.sh
3 require_revactor
5 eval $(unused_listen)
6 config_ru=$(mktemp -t rainbows.$$.XXXXXXXX.config.ru)
7 unicorn_config=$(mktemp -t rainbows.$$.XXXXXXXX.unicorn.rb)
8 curl_out=$(mktemp -t rainbows.$$.XXXXXXXX.curl.out)
9 curl_err=$(mktemp -t rainbows.$$.XXXXXXXX.curl.err)
10 pid=$(mktemp -t rainbows.$$.XXXXXXXX.pid)
11 TEST_RM_LIST="$TEST_RM_LIST $config_ru $unicorn_config $lock_path"
12 TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err"
14 cat > $config_ru <<\EOF
15 use Rack::ContentLength
16 use Rack::ContentType
17 run lambda { |env|
18 Actor.sleep 1
19 [ 200, {}, [ Thread.current.inspect << "\n" ] ]
21 EOF
23 nr_client=30
24 nr_actor=10
26 cat > $unicorn_config <<EOF
27 listen "$listen"
28 pid "$pid"
29 Rainbows! do
30 use :Revactor
31 worker_connections $nr_actor
32 end
33 EOF
35 rainbows -D $config_ru -c $unicorn_config
36 wait_for_pid $pid
38 start=$(date +%s)
39 for i in $(awk "BEGIN{for(i=0;i<$nr_client;++i) print i}" </dev/null)
41 ( curl -sSf http://$listen/$i >> $curl_out 2>> $curl_err ) &
42 done
43 wait
44 echo elapsed=$(( $(date +%s) - $start ))
46 kill $(cat $pid)
48 ! test -s $curl_err
49 test x"$(wc -l < $curl_out)" = x$nr_client
50 nr=$(sort < $curl_out | uniq | wc -l)
52 test "$nr" -eq 1