From 9c8372c3a4972cacf0eb15ad85d34cb33293672e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 19 Jul 2010 10:10:08 +0000 Subject: ensure client aborted file/stream response bodies are closed We need to remember to close response bodies even if a client aborts the connection, since body.close can trigger interesting things like logging and such... --- t/t0031-close-pipe-response.sh | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) mode change 100644 => 100755 t/t0031-close-pipe-response.sh (limited to 't/t0031-close-pipe-response.sh') diff --git a/t/t0031-close-pipe-response.sh b/t/t0031-close-pipe-response.sh old mode 100644 new mode 100755 index 7439b5f..58b6346 --- a/t/t0031-close-pipe-response.sh +++ b/t/t0031-close-pipe-response.sh @@ -1,19 +1,28 @@ #!/bin/sh . ./test-lib.sh -t_plan 5 "close pipe response for $model" +t_plan 10 "close pipe response for $model" t_begin "setup and startup" && { - rtmpfiles err out + rtmpfiles err out http_fifo sub_ok rainbows_setup $model export fifo rainbows -E none -D close-pipe-response.ru -c $unicorn_config rainbows_wait_start } -t_begin "single request matches" && { +t_begin "read random blob sha1" && { + random_blob_sha1=$(rsha1 < random_blob) +} + +t_begin "start FIFO reader" && { cat $fifo > $out & - test x'hello world' = x"$(curl -sSfv 2> $err http://$listen/)" +} + +t_begin "single request matches" && { + sha1=$(curl -sSfv 2> $err http://$listen/ | rsha1) + test -n "$sha1" + test x"$sha1" = x"$random_blob_sha1" } t_begin "body.close called" && { @@ -21,6 +30,24 @@ t_begin "body.close called" && { grep CLOSING $out || die "body.close not logged" } +t_begin "start FIFO reader for abortive request" && { + cat $fifo > $out & +} + +t_begin "send abortive request" && { + ( + printf 'GET /random_blob\r\n' + dd bs=4096 count=1 < $http_fifo >/dev/null + echo ok > $ok + ) | socat - TCP:$listen > $http_fifo || : + test xok = x$(cat $ok) +} + +t_begin "body.close called for aborted request" && { + wait # for cat $fifo + grep CLOSING $out || die "body.close not logged" +} + t_begin "shutdown server" && { kill -QUIT $rainbows_pid } -- cgit v1.2.3-24-ge0c7