about summary refs log tree commit homepage
path: root/t/t0401-em-async-tailer.sh
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-12-30 01:27:15 -0800
committerEric Wong <normalperson@yhbt.net>2009-12-30 01:53:46 -0800
commit96fbc5e91017c4912169629abc7dbb56cda9082c (patch)
tree763cc51001ef8459e8e65b315740701b15a2b48d /t/t0401-em-async-tailer.sh
parent44a80df0c4c0d47fd2ac503396cb9accfe770f0a (diff)
downloadrainbows-96fbc5e91017c4912169629abc7dbb56cda9082c.tar.gz
Some async apps rely on more than just "async.callback" and
make full use of Deferrables provided by the EM::Deferrable
module.  Thanks to James Tucker for bringing this to our
attention.
Diffstat (limited to 't/t0401-em-async-tailer.sh')
-rwxr-xr-xt/t0401-em-async-tailer.sh74
1 files changed, 74 insertions, 0 deletions
diff --git a/t/t0401-em-async-tailer.sh b/t/t0401-em-async-tailer.sh
new file mode 100755
index 0000000..cd3bd31
--- /dev/null
+++ b/t/t0401-em-async-tailer.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+nr=${nr-5}
+. ./test-lib.sh
+case $model in
+NeverBlock|EventMachine) ;;
+*)
+        t_info "skipping $T since it's not compatible with $model"
+        exit 0
+        ;;
+esac
+
+t_plan 8 "async_tailer test for test for EM"
+
+CONFIG_RU=async_examples/async_tailer.ru
+
+t_begin "setup and start" && {
+        rainbows_setup
+        rtmpfiles a b c curl_err TAIL_LOG_FILE expect
+
+        printf '<h1>Async Tailer</h1><pre>' >> $expect
+
+        export TAIL_LOG_FILE
+
+        # this does not does not support Rack::Lint
+        rainbows -E deployment -D $CONFIG_RU -c $unicorn_config
+        rainbows_wait_start
+}
+
+t_begin "send async requests off in parallel" && {
+        t0=$(date +%s)
+        curl --no-buffer -sSf http://$listen/ > $a 2>> $curl_err &
+        curl_a=$!
+        curl --no-buffer -sSf http://$listen/ > $b 2>> $curl_err &
+        curl_b=$!
+        curl --no-buffer -sSf http://$listen/ > $c 2>> $curl_err &
+        curl_c=$!
+}
+
+t_begin "generate log output" && {
+        for i in $(awk "BEGIN {for(i=0;i<$nr;i++) print i}" < /dev/null)
+        do
+                date >> $TAIL_LOG_FILE
+                sleep 1
+        done
+        # sometimes tail(1) can be slow
+        sleep 2
+}
+
+t_begin "kill curls and wait for termination" && {
+        kill $curl_a $curl_b $curl_c
+        wait
+        t1=$(date +%s)
+        elapsed=$(( $t1 - $t0 ))
+        t_info "elapsed=$elapsed"
+}
+
+t_begin "termination signal sent" && {
+        kill $rainbows_pid
+}
+
+t_begin "no errors from curl" && {
+        test ! -s $curl_err
+}
+
+t_begin "no errors in stderr" && check_stderr
+
+t_begin "responses match expected" && {
+        cat $TAIL_LOG_FILE >> $expect
+        cmp $expect $a
+        cmp $expect $b
+        cmp $expect $c
+}
+
+t_done