rev: async response bodies with DevFdResponse middleware
[rainbows.git] / t / lib-large-file-response.sh
blob830812aae1be912ef74e670aaba09d07caa643d0
1 . ./test-lib.sh
2 test -r random_blob || die "random_blob required, run with 'make $0'"
3 if ! grep -v ^VmRSS: /proc/self/status >/dev/null 2>&1
4 then
5 echo >&2 "skipping, can't read RSS from /proc/self/status"
6 exit 0
7 fi
8 echo "large file response slurp avoidance for model=$model"
9 eval $(unused_listen)
10 rtmpfiles unicorn_config tmp r_err r_out pid ok
12 cat > $unicorn_config <<EOF
13 listen "$listen"
14 stderr_path "$r_err"
15 stdout_path "$r_out"
16 pid "$pid"
17 Rainbows! { use :$model }
18 EOF
20 # can't load Rack::Lint here since it'll cause Rev to slurp
21 rainbows -E none -D large-file-response.ru -c $unicorn_config
22 wait_for_pid $pid
24 random_blob_size=$(wc -c < random_blob)
25 curl -v http://$listen/rss
26 dbgcat r_err
27 rss_before=$(curl -sSfv http://$listen/rss)
28 echo "rss_before=$rss_before"
30 for i in a b c
32 size=$( (curl -sSfv http://$listen/random_blob && echo ok > $ok) | wc -c)
33 test $size -eq $random_blob_size
34 test xok = x$(cat $ok)
35 done
37 dbgcat r_err
38 curl -v http://$listen/rss
39 rss_after=$(curl -sSfv http://$listen/rss)
40 echo "rss_after=$rss_after"
41 diff=$(( $rss_after - $rss_before ))
42 echo "test diff=$diff < orig=$random_blob_size"
43 kill -QUIT $(cat $pid)
44 test $diff -le $random_blob_size
45 dbgcat r_err