rainbows 0.95.1 → 0.96.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/Documentation/comparison.haml +1 -1
  2. data/GIT-VERSION-GEN +1 -1
  3. data/GNUmakefile +2 -1
  4. data/Rakefile +16 -3
  5. data/Static_Files +11 -11
  6. data/TODO +1 -6
  7. data/lib/rainbows.rb +3 -2
  8. data/lib/rainbows/base.rb +12 -9
  9. data/lib/rainbows/const.rb +2 -4
  10. data/lib/rainbows/dev_fd_response.rb +16 -13
  11. data/lib/rainbows/error.rb +2 -0
  12. data/lib/rainbows/ev_core.rb +13 -0
  13. data/lib/rainbows/event_machine.rb +85 -128
  14. data/lib/rainbows/event_machine/response_chunk_pipe.rb +25 -0
  15. data/lib/rainbows/event_machine/response_pipe.rb +30 -0
  16. data/lib/rainbows/event_machine/try_defer.rb +27 -0
  17. data/lib/rainbows/fiber/body.rb +6 -4
  18. data/lib/rainbows/fiber/io.rb +4 -4
  19. data/lib/rainbows/fiber/rev.rb +16 -8
  20. data/lib/rainbows/http_response.rb +5 -6
  21. data/lib/rainbows/response.rb +37 -22
  22. data/lib/rainbows/response/body.rb +19 -16
  23. data/lib/rainbows/response/range.rb +34 -0
  24. data/lib/rainbows/rev.rb +2 -1
  25. data/lib/rainbows/rev/client.rb +105 -77
  26. data/lib/rainbows/rev/deferred_chunk_response.rb +16 -0
  27. data/lib/rainbows/rev/deferred_response.rb +16 -24
  28. data/lib/rainbows/rev/sendfile.rb +4 -13
  29. data/lib/rainbows/rev/thread.rb +3 -12
  30. data/lib/rainbows/rev_thread_pool.rb +2 -2
  31. data/lib/rainbows/revactor.rb +16 -9
  32. data/lib/rainbows/revactor/body.rb +42 -0
  33. data/lib/rainbows/revactor/proxy.rb +55 -0
  34. data/lib/rainbows/sendfile.rb +12 -14
  35. data/lib/rainbows/stream_file.rb +3 -3
  36. data/lib/rainbows/writer_thread_pool.rb +12 -12
  37. data/lib/rainbows/writer_thread_spawn.rb +6 -7
  38. data/t/GNUmakefile +2 -2
  39. data/t/close-pipe-response.ru +25 -0
  40. data/t/cramp/rainsocket.ru +1 -1
  41. data/t/fast-pipe-response.ru +10 -0
  42. data/t/file-wrap-to_path.ru +24 -0
  43. data/t/t0015-working_directory.sh +5 -1
  44. data/t/t0020-large-sendfile-response.sh +3 -3
  45. data/t/t0021-sendfile-wrap-to_path.sh +108 -0
  46. data/t/t0022-copy_stream-byte-range.sh +139 -0
  47. data/t/t0023-sendfile-byte-range.sh +63 -0
  48. data/t/t0024-pipelined-sendfile-response.sh +89 -0
  49. data/t/t0030-fast-pipe-response.sh +63 -0
  50. data/t/t0031-close-pipe-response.sh +96 -0
  51. data/t/t0034-pipelined-pipe-response.sh +87 -0
  52. data/t/t0105-rack-input-limit-bigger.sh +5 -2
  53. data/t/t0500-cramp-streaming.sh +0 -1
  54. data/t/t0501-cramp-rainsocket.sh +1 -0
  55. data/t/t9000-rack-app-pool.sh +1 -1
  56. data/t/test_isolate.rb +1 -0
  57. metadata +29 -5
@@ -0,0 +1,89 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+
4
+ t_plan 6 "pipelined sendfile response for $model"
5
+
6
+ t_begin "setup and startup" && {
7
+ rtmpfiles err out dd_fifo
8
+ rainbows_setup $model
9
+ echo 'require "sendfile"' >> $unicorn_config
10
+ echo 'def (::IO).copy_stream(*x); abort "NO"; end' >> $unicorn_config
11
+
12
+ # can't load Rack::Lint here since it clobbers body#to_path
13
+ rainbows -E none -D large-file-response.ru -c $unicorn_config
14
+ rainbows_wait_start
15
+ }
16
+
17
+ t_begin "read random blob sha1" && {
18
+ random_blob_sha1=$(rsha1 < random_blob)
19
+ }
20
+
21
+ script='
22
+ require "digest/sha1"
23
+ require "kcar"
24
+ $stdin.binmode
25
+ expect = ENV["random_blob_sha1"]
26
+ kcar = Kcar::Response.new($stdin, {})
27
+ 3.times do
28
+ nr = 0
29
+ status, headers, body = kcar.rack
30
+ dig = Digest::SHA1.new
31
+ body.each { |buf| dig << buf ; nr += buf.size }
32
+ sha1 = dig.hexdigest
33
+ sha1 == expect or abort "mismatch: sha1=#{sha1} != expect=#{expect}"
34
+ body.close
35
+ end
36
+ $stdout.syswrite("ok\n")
37
+ '
38
+
39
+ t_begin "staggered pipeline of 3 HTTP requests" && {
40
+ req='GET /random_blob HTTP/1.1\r\nHost: example.com\r\n'
41
+ rm -f $ok
42
+ (
43
+ export random_blob_sha1
44
+ $RUBY -e "$script" < $fifo >> $ok &
45
+ printf "$req"'X-Req:0\r\n\r\n'
46
+ exec 6>&1
47
+ (
48
+ dd bs=16384 count=1
49
+ printf "$req" >&6
50
+ dd bs=16384 count=1
51
+ printf 'X-Req:1\r\n\r\n' >&6
52
+ dd bs=16384 count=1
53
+ printf "$req" >&6
54
+ dd bs=16384 count=1
55
+ printf 'X-Req:2\r\n' >&6
56
+ dd bs=16384 count=1
57
+ printf 'Connection: close\r\n\r' >&6
58
+ dd bs=16384 count=1
59
+ printf '\n' >&6
60
+ cat
61
+ ) < $dd_fifo > $fifo &
62
+ wait
63
+ echo ok >> $ok
64
+ ) | socat - TCP:$listen > $dd_fifo
65
+ test 2 -eq $(grep '^ok$' $ok |wc -l)
66
+ }
67
+
68
+ t_begin "pipeline 3 HTTP requests" && {
69
+ rm -f $ok
70
+ req='GET /random_blob HTTP/1.1\r\nHost: example.com\r\n'
71
+ req="$req"'\r\n'"$req"'\r\n'"$req"
72
+ req="$req"'Connection: close\r\n\r\n'
73
+ (
74
+ export random_blob_sha1
75
+ $RUBY -e "$script" < $fifo >> $ok &
76
+ printf "$req"
77
+ wait
78
+ echo ok >> $ok
79
+ ) | socat - TCP:$listen > $fifo
80
+ test 2 -eq $(grep '^ok$' $ok |wc -l)
81
+ }
82
+
83
+ t_begin "shutdown server" && {
84
+ kill -QUIT $rainbows_pid
85
+ }
86
+
87
+ t_begin "check stderr" && check_stderr
88
+
89
+ t_done
@@ -0,0 +1,63 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ test -r random_blob || die "random_blob required, run with 'make $0'"
4
+
5
+ t_plan 10 "fast pipe response for $model"
6
+
7
+ t_begin "setup and startup" && {
8
+ rtmpfiles err out
9
+ rainbows_setup $model
10
+ rainbows -E none -D fast-pipe-response.ru -c $unicorn_config
11
+ rainbows_wait_start
12
+ }
13
+
14
+ t_begin "read random blob sha1" && {
15
+ random_blob_sha1=$(rsha1 < random_blob)
16
+ three_sha1=$(cat random_blob random_blob random_blob | rsha1)
17
+ }
18
+
19
+ t_begin "single request matches" && {
20
+ sha1=$(curl -sSfv 2> $err http://$listen/ | rsha1)
21
+ test -n "$sha1"
22
+ test x"$sha1" = x"$random_blob_sha1"
23
+ }
24
+
25
+ t_begin "Content-Length header preserved in response" && {
26
+ grep "^< Content-Length:" $err
27
+ }
28
+
29
+ t_begin "send three keep-alive requests" && {
30
+ sha1=$(curl -vsSf 2> $err \
31
+ http://$listen/ http://$listen/ http://$listen/ | rsha1)
32
+ test -n "$sha1"
33
+ test x"$sha1" = x"$three_sha1"
34
+ }
35
+
36
+ t_begin "ensure responses were all keep-alive" && {
37
+ test 3 -eq $(grep '< Connection: keep-alive' < $err | wc -l)
38
+ }
39
+
40
+ t_begin "HTTP/1.0 test" && {
41
+ sha1=$(curl -0 -v 2> $err -sSf http://$listen/ | rsha1)
42
+ test $sha1 = $random_blob_sha1
43
+ grep '< Connection: close' < $err
44
+ }
45
+
46
+ t_begin "HTTP/0.9 test" && {
47
+ (
48
+ printf 'GET /\r\n'
49
+ rsha1 < $fifo > $tmp &
50
+ wait
51
+ echo ok > $ok
52
+ ) | socat - TCP:$listen > $fifo
53
+ test $(cat $tmp) = $random_blob_sha1
54
+ test xok = x$(cat $ok)
55
+ }
56
+
57
+ t_begin "shutdown server" && {
58
+ kill -QUIT $rainbows_pid
59
+ }
60
+
61
+ t_begin "check stderr" && check_stderr
62
+
63
+ t_done
@@ -0,0 +1,96 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+
4
+ t_plan 16 "close pipe response for $model"
5
+
6
+ t_begin "setup and startup" && {
7
+ rtmpfiles err out http_fifo sub_ok
8
+ rainbows_setup $model
9
+ export fifo
10
+ rainbows -E none -D close-pipe-response.ru -c $unicorn_config
11
+ rainbows_wait_start
12
+ }
13
+
14
+ t_begin "read random blob sha1" && {
15
+ random_blob_sha1=$(rsha1 < random_blob)
16
+ }
17
+
18
+ t_begin "start FIFO reader" && {
19
+ cat $fifo > $out &
20
+ }
21
+
22
+ t_begin "single request matches" && {
23
+ sha1=$(curl -sSfv 2> $err http://$listen/ | rsha1)
24
+ test -n "$sha1"
25
+ test x"$sha1" = x"$random_blob_sha1"
26
+ }
27
+
28
+ t_begin "body.close called" && {
29
+ wait # for cat $fifo
30
+ grep CLOSING $out || die "body.close not logged"
31
+ }
32
+
33
+ t_begin "start FIFO reader for abortive HTTP/1.1 request" && {
34
+ cat $fifo > $out &
35
+ }
36
+
37
+ t_begin "send abortive HTTP/1.1 request" && {
38
+ rm -f $ok
39
+ (
40
+ printf 'GET /random_blob HTTP/1.1\r\nHost: example.com\r\n\r\n'
41
+ dd bs=4096 count=1 < $http_fifo >/dev/null
42
+ echo ok > $ok
43
+ ) | socat - TCP:$listen > $http_fifo || :
44
+ test xok = x$(cat $ok)
45
+ }
46
+
47
+ t_begin "body.close called for aborted HTTP/1.1 request" && {
48
+ wait # for cat $fifo
49
+ grep CLOSING $out || die "body.close not logged"
50
+ }
51
+
52
+ t_begin "start FIFO reader for abortive HTTP/1.0 request" && {
53
+ cat $fifo > $out &
54
+ }
55
+
56
+ t_begin "send abortive HTTP/1.0 request" && {
57
+ rm -f $ok
58
+ (
59
+ printf 'GET /random_blob HTTP/1.0\r\n\r\n'
60
+ dd bs=4096 count=1 < $http_fifo >/dev/null
61
+ echo ok > $ok
62
+ ) | socat - TCP:$listen > $http_fifo || :
63
+ test xok = x$(cat $ok)
64
+ }
65
+
66
+ t_begin "body.close called for aborted HTTP/1.0 request" && {
67
+ wait # for cat $fifo
68
+ grep CLOSING $out || die "body.close not logged"
69
+ }
70
+
71
+ t_begin "start FIFO reader for abortive HTTP/0.9 request" && {
72
+ cat $fifo > $out &
73
+ }
74
+
75
+ t_begin "send abortive HTTP/0.9 request" && {
76
+ rm -f $ok
77
+ (
78
+ printf 'GET /random_blob\r\n'
79
+ dd bs=4096 count=1 < $http_fifo >/dev/null
80
+ echo ok > $ok
81
+ ) | socat - TCP:$listen > $http_fifo || :
82
+ test xok = x$(cat $ok)
83
+ }
84
+
85
+ t_begin "body.close called for aborted HTTP/0.9 request" && {
86
+ wait # for cat $fifo
87
+ grep CLOSING $out || die "body.close not logged"
88
+ }
89
+
90
+ t_begin "shutdown server" && {
91
+ kill -QUIT $rainbows_pid
92
+ }
93
+
94
+ t_begin "check stderr" && check_stderr
95
+
96
+ t_done
@@ -0,0 +1,87 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+
4
+ t_plan 6 "pipelined pipe response for $model"
5
+
6
+ t_begin "setup and startup" && {
7
+ rtmpfiles err out dd_fifo
8
+ rainbows_setup $model
9
+
10
+ # can't load Rack::Lint here since it clobbers body#to_path
11
+ rainbows -E none -D fast-pipe-response.ru -c $unicorn_config
12
+ rainbows_wait_start
13
+ }
14
+
15
+ t_begin "read random blob sha1" && {
16
+ random_blob_sha1=$(rsha1 < random_blob)
17
+ }
18
+
19
+ script='
20
+ require "digest/sha1"
21
+ require "kcar"
22
+ $stdin.binmode
23
+ expect = ENV["random_blob_sha1"]
24
+ kcar = Kcar::Response.new($stdin, {})
25
+ 3.times do
26
+ nr = 0
27
+ status, headers, body = kcar.rack
28
+ dig = Digest::SHA1.new
29
+ body.each { |buf| dig << buf ; nr += buf.size }
30
+ sha1 = dig.hexdigest
31
+ sha1 == expect or abort "mismatch: sha1=#{sha1} != expect=#{expect}"
32
+ body.close
33
+ end
34
+ $stdout.syswrite("ok\n")
35
+ '
36
+
37
+ t_begin "staggered pipeline of 3 HTTP requests" && {
38
+ req='GET /random_blob HTTP/1.1\r\nHost: example.com\r\n'
39
+ rm -f $ok
40
+ (
41
+ export random_blob_sha1
42
+ $RUBY -e "$script" < $fifo >> $ok &
43
+ printf "$req"'X-Req:0\r\n\r\n'
44
+ exec 6>&1
45
+ (
46
+ dd bs=16384 count=1
47
+ printf "$req" >&6
48
+ dd bs=16384 count=1
49
+ printf 'X-Req:1\r\n\r\n' >&6
50
+ dd bs=16384 count=1
51
+ printf "$req" >&6
52
+ dd bs=16384 count=1
53
+ printf 'X-Req:2\r\n' >&6
54
+ dd bs=16384 count=1
55
+ printf 'Connection: close\r\n\r' >&6
56
+ dd bs=16384 count=1
57
+ printf '\n' >&6
58
+ cat
59
+ ) < $dd_fifo > $fifo &
60
+ wait
61
+ echo ok >> $ok
62
+ ) | socat - TCP:$listen > $dd_fifo
63
+ test 2 -eq $(grep '^ok$' $ok |wc -l)
64
+ }
65
+
66
+ t_begin "pipeline 3 HTTP requests" && {
67
+ rm -f $ok
68
+ req='GET /random_blob HTTP/1.1\r\nHost: example.com\r\n'
69
+ req="$req"'\r\n'"$req"'\r\n'"$req"
70
+ req="$req"'Connection: close\r\n\r\n'
71
+ (
72
+ export random_blob_sha1
73
+ $RUBY -e "$script" < $fifo >> $ok &
74
+ printf "$req"
75
+ wait
76
+ echo ok >> $ok
77
+ ) | socat - TCP:$listen > $fifo
78
+ test 2 -eq $(grep '^ok$' $ok |wc -l)
79
+ }
80
+
81
+ t_begin "shutdown server" && {
82
+ kill -QUIT $rainbows_pid
83
+ }
84
+
85
+ t_begin "check stderr" && check_stderr
86
+
87
+ t_done
@@ -16,9 +16,10 @@ t_begin "setup and startup" && {
16
16
 
17
17
  t_begin "stops a regular request" && {
18
18
  rm -f $ok
19
- dd if=/dev/zero bs=102485761 count=1 of=$tmp
19
+ dd if=/dev/zero bs=10485761 count=1 of=$tmp
20
20
  curl -vsSf -T $tmp -H Expect: \
21
21
  http://$listen/ > $curl_out 2> $curl_err || > $ok
22
+ rm -f $tmp
22
23
  dbgcat curl_err
23
24
  dbgcat curl_out
24
25
  test -e $ok
@@ -26,7 +27,7 @@ t_begin "stops a regular request" && {
26
27
 
27
28
  t_begin "stops a large chunked request" && {
28
29
  rm -f $ok
29
- dd if=/dev/zero bs=102485761 count=1 | \
30
+ dd if=/dev/zero bs=10485761 count=1 | \
30
31
  curl -vsSf -T- -H Expect: \
31
32
  http://$listen/ > $curl_out 2> $curl_err || > $ok
32
33
  dbgcat curl_err
@@ -73,6 +74,7 @@ t_begin "right size sha1 content-length ok" && {
73
74
  dd if=/dev/zero bs=10485760 count=1 of=$tmp
74
75
  curl -vsSf -T $tmp -H Expect: \
75
76
  http://$listen/ > $curl_out 2> $curl_err
77
+ rm -f $tmp
76
78
  dbgcat curl_err
77
79
  dbgcat curl_out
78
80
  test "$(cat $curl_out)" = $blob_sha1
@@ -95,6 +97,7 @@ t_begin "default size sha1 content-length ok" && {
95
97
  dd if=/dev/zero bs=1048576 count=1 of=$tmp
96
98
  curl -vsSf -T $tmp -H Expect: \
97
99
  http://$listen/ > $curl_out 2> $curl_err
100
+ rm -f $tmp
98
101
  dbgcat curl_err
99
102
  dbgcat curl_out
100
103
  test "$(cat $curl_out)" = $blob_sha1
@@ -27,7 +27,6 @@ t_begin "setup and start" && {
27
27
  # this will spew any unexpected input to stdout and be silent on success
28
28
  check () {
29
29
  (
30
- t0=$(date +%s)
31
30
  i=0
32
31
  while read hello world
33
32
  do
@@ -24,6 +24,7 @@ t_begin "setup and start" && {
24
24
 
25
25
  t_begin "wait for server to say hello to us" && {
26
26
  ok=$((curl --no-buffer -sS http://$listen/ || :) | \
27
+ (tr -d '\0\0377' || :) | \
27
28
  awk '/Hello from the Server/ { print "ok"; exit 0 }')
28
29
 
29
30
  test x"$ok" = xok
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  . ./test-lib.sh
3
3
  case $model in
4
- *Thread*|*Fiber*|Revactor|NeverBlock) ;;
4
+ *RevThread*|Thread*|*Fiber*|Revactor|NeverBlock) ;;
5
5
  *)
6
6
  t_info "skipping $T since it's not compatible with $model"
7
7
  exit 0
data/t/test_isolate.rb CHANGED
@@ -16,6 +16,7 @@ $stdout.reopen($stderr)
16
16
  Isolate.now!(opts) do
17
17
  gem 'rack', '1.1.0' # Cramp currently requires ~> 1.1.0
18
18
  gem 'unicorn', '1.1.1'
19
+ gem 'kcar', '0.1.1'
19
20
 
20
21
  if engine == "ruby"
21
22
  gem 'sendfile', '1.0.0' # next Rubinius should support this
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainbows
3
3
  version: !ruby/object:Gem::Version
4
- hash: 353
4
+ hash: 415
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 95
9
- - 1
10
- version: 0.95.1
8
+ - 96
9
+ - 0
10
+ version: 0.96.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rainbows! hackers
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-11 00:00:00 +00:00
18
+ date: 2010-08-03 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -97,6 +97,9 @@ extra_rdoc_files:
97
97
  - lib/rainbows/error.rb
98
98
  - lib/rainbows/ev_core.rb
99
99
  - lib/rainbows/event_machine.rb
100
+ - lib/rainbows/event_machine/response_chunk_pipe.rb
101
+ - lib/rainbows/event_machine/response_pipe.rb
102
+ - lib/rainbows/event_machine/try_defer.rb
100
103
  - lib/rainbows/fiber.rb
101
104
  - lib/rainbows/fiber/base.rb
102
105
  - lib/rainbows/fiber/body.rb
@@ -113,9 +116,11 @@ extra_rdoc_files:
113
116
  - lib/rainbows/queue_pool.rb
114
117
  - lib/rainbows/response.rb
115
118
  - lib/rainbows/response/body.rb
119
+ - lib/rainbows/response/range.rb
116
120
  - lib/rainbows/rev.rb
117
121
  - lib/rainbows/rev/client.rb
118
122
  - lib/rainbows/rev/core.rb
123
+ - lib/rainbows/rev/deferred_chunk_response.rb
119
124
  - lib/rainbows/rev/deferred_response.rb
120
125
  - lib/rainbows/rev/heartbeat.rb
121
126
  - lib/rainbows/rev/master.rb
@@ -125,6 +130,8 @@ extra_rdoc_files:
125
130
  - lib/rainbows/rev_thread_pool.rb
126
131
  - lib/rainbows/rev_thread_spawn.rb
127
132
  - lib/rainbows/revactor.rb
133
+ - lib/rainbows/revactor/body.rb
134
+ - lib/rainbows/revactor/proxy.rb
128
135
  - lib/rainbows/sendfile.rb
129
136
  - lib/rainbows/server_token.rb
130
137
  - lib/rainbows/stream_file.rb
@@ -181,6 +188,9 @@ files:
181
188
  - lib/rainbows/error.rb
182
189
  - lib/rainbows/ev_core.rb
183
190
  - lib/rainbows/event_machine.rb
191
+ - lib/rainbows/event_machine/response_chunk_pipe.rb
192
+ - lib/rainbows/event_machine/response_pipe.rb
193
+ - lib/rainbows/event_machine/try_defer.rb
184
194
  - lib/rainbows/fiber.rb
185
195
  - lib/rainbows/fiber/base.rb
186
196
  - lib/rainbows/fiber/body.rb
@@ -197,9 +207,11 @@ files:
197
207
  - lib/rainbows/queue_pool.rb
198
208
  - lib/rainbows/response.rb
199
209
  - lib/rainbows/response/body.rb
210
+ - lib/rainbows/response/range.rb
200
211
  - lib/rainbows/rev.rb
201
212
  - lib/rainbows/rev/client.rb
202
213
  - lib/rainbows/rev/core.rb
214
+ - lib/rainbows/rev/deferred_chunk_response.rb
203
215
  - lib/rainbows/rev/deferred_response.rb
204
216
  - lib/rainbows/rev/heartbeat.rb
205
217
  - lib/rainbows/rev/master.rb
@@ -209,6 +221,8 @@ files:
209
221
  - lib/rainbows/rev_thread_pool.rb
210
222
  - lib/rainbows/rev_thread_spawn.rb
211
223
  - lib/rainbows/revactor.rb
224
+ - lib/rainbows/revactor/body.rb
225
+ - lib/rainbows/revactor/proxy.rb
212
226
  - lib/rainbows/sendfile.rb
213
227
  - lib/rainbows/server_token.rb
214
228
  - lib/rainbows/stream_file.rb
@@ -235,12 +249,15 @@ files:
235
249
  - t/bin/sha1sum.rb
236
250
  - t/bin/unused_listen
237
251
  - t/bin/utee
252
+ - t/close-pipe-response.ru
238
253
  - t/content-md5.ru
239
254
  - t/cramp/README
240
255
  - t/cramp/rainsocket.ru
241
256
  - t/cramp/streaming.ru
242
257
  - t/env.ru
243
258
  - t/env_rack_env.ru
259
+ - t/fast-pipe-response.ru
260
+ - t/file-wrap-to_path.ru
244
261
  - t/fork-sleep.ru
245
262
  - t/heartbeat-timeout.ru
246
263
  - t/large-file-response.ru
@@ -286,6 +303,13 @@ files:
286
303
  - t/t0016-onenine-encoding-is-tricky.sh
287
304
  - t/t0016.rb
288
305
  - t/t0020-large-sendfile-response.sh
306
+ - t/t0021-sendfile-wrap-to_path.sh
307
+ - t/t0022-copy_stream-byte-range.sh
308
+ - t/t0023-sendfile-byte-range.sh
309
+ - t/t0024-pipelined-sendfile-response.sh
310
+ - t/t0030-fast-pipe-response.sh
311
+ - t/t0031-close-pipe-response.sh
312
+ - t/t0034-pipelined-pipe-response.sh
289
313
  - t/t0100-rack-input-hammer-chunked.sh
290
314
  - t/t0100-rack-input-hammer-content-length.sh
291
315
  - t/t0101-rack-input-trailer.sh