diff options
-rw-r--r-- | config/isolate.rb | 1 | ||||
-rw-r--r-- | t/rack-fiber_pool/app.ru | 5 | ||||
-rwxr-xr-x | t/t0600-rack-fiber_pool.sh | 49 |
3 files changed, 55 insertions, 0 deletions
diff --git a/config/isolate.rb b/config/isolate.rb index 3ac1af5..1c6874b 100644 --- a/config/isolate.rb +++ b/config/isolate.rb @@ -19,6 +19,7 @@ gem 'neverblock', '0.1.6.2' if defined?(::Fiber) gem 'case', '0.5' gem 'revactor', '0.1.5' + gem 'rack-fiber_pool', '0.9.0' end gem 'cramp', '0.10' diff --git a/t/rack-fiber_pool/app.ru b/t/rack-fiber_pool/app.ru new file mode 100644 index 0000000..a4777ca --- /dev/null +++ b/t/rack-fiber_pool/app.ru @@ -0,0 +1,5 @@ +require 'rack/fiber_pool' +use Rack::FiberPool +use Rack::ContentLength +use Rack::ContentType, 'text/plain' +run lambda { |env| [ 200, {}, [ "#{Fiber.current}\n" ] ] } diff --git a/t/t0600-rack-fiber_pool.sh b/t/t0600-rack-fiber_pool.sh new file mode 100755 index 0000000..01f28b5 --- /dev/null +++ b/t/t0600-rack-fiber_pool.sh @@ -0,0 +1,49 @@ +#!/bin/sh +. ./test-lib.sh +case $model in +EventMachine) ;; +*) + t_info "skipping $T since it's not compatible with $model" + exit 0 + ;; +esac + +require_check rack/fiber_pool Rack::FiberPool + +t_plan 7 "basic test with rack-fiber_pool gem" + +CONFIG_RU=rack-fiber_pool/app.ru + +t_begin "setup and start" && { + rainbows_setup + rtmpfiles curl_err curl_out + + rainbows -D -c $unicorn_config $CONFIG_RU + rainbows_wait_start +} + +t_begin "send requests off in parallel" && { + curl --no-buffer -sSf http://$listen/ >> $curl_out 2>> $curl_err & + curl --no-buffer -sSf http://$listen/ >> $curl_out 2>> $curl_err & + curl --no-buffer -sSf http://$listen/ >> $curl_out 2>> $curl_err & +} + +t_begin "wait for curl terminations" && { + wait +} + +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 "ensure we hit 3 separate fibers" && { + test x3 = x"$(sort < $curl_out | uniq | wc -l)" +} + +t_done |