From fa7ce0a6a755cb71a30417478fb797ee7b8d94b5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 17 Jun 2011 07:32:17 +0000 Subject: add broken app test from Rainbows! "app error" is more correct, and consistent with Rainbows! --- t/broken-app.ru | 12 +++++++++++ t/t0009-broken-app.sh | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 t/broken-app.ru create mode 100755 t/t0009-broken-app.sh (limited to 't') diff --git a/t/broken-app.ru b/t/broken-app.ru new file mode 100644 index 0000000..d05d7ab --- /dev/null +++ b/t/broken-app.ru @@ -0,0 +1,12 @@ +# we do not want Rack::Lint or anything to protect us +use Rack::ContentLength +use Rack::ContentType, "text/plain" +map "/" do + run lambda { |env| [ 200, {}, [ "OK\n" ] ] } +end +map "/raise" do + run lambda { |env| raise "BAD" } +end +map "/nil" do + run lambda { |env| nil } +end diff --git a/t/t0009-broken-app.sh b/t/t0009-broken-app.sh new file mode 100755 index 0000000..895b178 --- /dev/null +++ b/t/t0009-broken-app.sh @@ -0,0 +1,56 @@ +#!/bin/sh +. ./test-lib.sh + +t_plan 9 "graceful handling of broken apps" + +t_begin "setup and start" && { + unicorn_setup + unicorn -E none -D broken-app.ru -c $unicorn_config + unicorn_wait_start +} + +t_begin "normal response is alright" && { + test xOK = x"$(curl -sSf http://$listen/)" +} + +t_begin "app raised exception" && { + curl -sSf http://$listen/raise 2> $tmp || : + grep -F 500 $tmp + > $tmp +} + +t_begin "app exception logged and backtrace not swallowed" && { + grep -F 'app error' $r_err + grep -A1 -F 'app error' $r_err | tail -1 | grep broken-app.ru: + dbgcat r_err + > $r_err +} + +t_begin "trigger bad response" && { + curl -sSf http://$listen/nil 2> $tmp || : + grep -F 500 $tmp + > $tmp +} + +t_begin "app exception logged" && { + grep -F 'app error' $r_err + > $r_err +} + +t_begin "normal responses alright afterwards" && { + > $tmp + curl -sSf http://$listen/ >> $tmp & + curl -sSf http://$listen/ >> $tmp & + curl -sSf http://$listen/ >> $tmp & + curl -sSf http://$listen/ >> $tmp & + wait + test xOK = x$(sort < $tmp | uniq) +} + +t_begin "teardown" && { + kill $unicorn_pid +} + +t_begin "check stderr" && check_stderr + +t_done -- cgit v1.2.3-24-ge0c7