about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/rainbows/dev_fd_response.rb2
-rwxr-xr-xt/t0202-async-response-one-oh.sh56
2 files changed, 57 insertions, 1 deletions
diff --git a/lib/rainbows/dev_fd_response.rb b/lib/rainbows/dev_fd_response.rb
index 1d50a2c..a42697d 100644
--- a/lib/rainbows/dev_fd_response.rb
+++ b/lib/rainbows/dev_fd_response.rb
@@ -48,7 +48,7 @@ class Rainbows::DevFdResponse < Struct.new(:app)
       headers.delete('Transfer-Encoding')
     elsif st.pipe? || st.socket? # epoll-able things
       unless headers.include?('Content-Length')
-        if env['rainbows.autochunk']
+        if env['rainbows.autochunk'] && "HTTP/1.0" != env["HTTP_VERSION"]
           headers['Transfer-Encoding'] = 'chunked'
         else
           env['rainbows.autochunk'] = false
diff --git a/t/t0202-async-response-one-oh.sh b/t/t0202-async-response-one-oh.sh
new file mode 100755
index 0000000..0d833ca
--- /dev/null
+++ b/t/t0202-async-response-one-oh.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+CONFIG_RU=${CONFIG_RU-'async-response.ru'}
+. ./test-lib.sh
+
+skip_models Base WriterThreadPool WriterThreadSpawn
+
+t_plan 6 "async HTTP/1.0 response for $model"
+
+t_begin "setup and start" && {
+        rainbows_setup
+        rtmpfiles a b c a_err b_err c_err
+        # can't load Rack::Lint here since it'll cause Rev to slurp
+        rainbows -E none -D $CONFIG_RU -c $unicorn_config
+        rainbows_wait_start
+}
+
+t_begin "send async requests off in parallel" && {
+        t0=$(date +%s)
+        curl="curl -0 --no-buffer -vsSf http://$listen/"
+        ( $curl 2>> $a_err | utee $a) &
+        ( $curl 2>> $b_err | utee $b) &
+        ( $curl 2>> $c_err | utee $c) &
+        wait
+        t1=$(date +%s)
+}
+
+t_begin "ensure elapsed requests were processed in parallel" && {
+        elapsed=$(( $t1 - $t0 ))
+        echo "elapsed=$elapsed < 30"
+        test $elapsed -lt 30
+}
+
+t_begin "termination signal sent" && {
+        kill $rainbows_pid
+}
+
+dbgcat a
+dbgcat b
+dbgcat c
+dbgcat a_err
+
+t_begin "no errors from curl" && {
+        if grep -i Transfer-Encoding $a_err $b_err $c_err
+        then
+                die "Unexpected Transfer-Encoding: header"
+        fi
+        for i in $a_err $b_err $c_err
+        do
+                grep 'Connection: close' $i
+        done
+}
+
+dbgcat r_err
+t_begin "no errors in stderr" && check_stderr
+
+t_done