unicorn 2.0.0pre2.4.gf202 → 2.0.0pre3
Sign up to get free protection for your applications and to get access to all the features.
- data/GIT-VERSION-GEN +1 -1
- data/lib/unicorn/const.rb +2 -2
- data/lib/unicorn/preread_input.rb +30 -0
- data/script/isolate_for_tests +1 -1
- data/t/preread_input.ru +17 -0
- data/t/t9000-preread-input.sh +48 -0
- data/unicorn.gemspec +1 -1
- metadata +11 -9
data/GIT-VERSION-GEN
CHANGED
data/lib/unicorn/const.rb
CHANGED
@@ -7,8 +7,8 @@
|
|
7
7
|
# improve things much compared to constants.
|
8
8
|
module Unicorn::Const
|
9
9
|
|
10
|
-
# The current version of Unicorn, currently 2.0.
|
11
|
-
UNICORN_VERSION = "2.0.
|
10
|
+
# The current version of Unicorn, currently 2.0.0pre3
|
11
|
+
UNICORN_VERSION = "2.0.0pre3"
|
12
12
|
|
13
13
|
# default TCP listen host address (0.0.0.0, all interfaces)
|
14
14
|
DEFAULT_HOST = "0.0.0.0"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
|
3
|
+
module Unicorn
|
4
|
+
# This middleware is used to ensure input is buffered to memory
|
5
|
+
# or disk (depending on size) before the application is dispatched
|
6
|
+
# by entirely consuming it (from TeeInput) beforehand.
|
7
|
+
#
|
8
|
+
# Usage (in config.ru):
|
9
|
+
#
|
10
|
+
# require 'unicorn/preread_input'
|
11
|
+
# if defined?(Unicorn)
|
12
|
+
# use Unicorn::PrereadInput
|
13
|
+
# end
|
14
|
+
# run YourApp.new
|
15
|
+
class PrereadInput
|
16
|
+
def initialize(app)
|
17
|
+
@app = app
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
buf = ""
|
22
|
+
input = env["rack.input"]
|
23
|
+
if buf = input.read(16384)
|
24
|
+
true while input.read(16384, buf)
|
25
|
+
input.rewind
|
26
|
+
end
|
27
|
+
@app.call(env)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/script/isolate_for_tests
CHANGED
data/t/preread_input.ru
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#\-E none
|
2
|
+
require 'digest/sha1'
|
3
|
+
require 'unicorn/preread_input'
|
4
|
+
use Rack::ContentLength
|
5
|
+
use Rack::ContentType, "text/plain"
|
6
|
+
use Unicorn::PrereadInput
|
7
|
+
nr = 0
|
8
|
+
run lambda { |env|
|
9
|
+
$stderr.write "app dispatch: #{nr += 1}\n"
|
10
|
+
input = env["rack.input"]
|
11
|
+
dig = Digest::SHA1.new
|
12
|
+
while buf = input.read(16384)
|
13
|
+
dig.update(buf)
|
14
|
+
end
|
15
|
+
|
16
|
+
[ 200, {}, [ "#{dig.hexdigest}\n" ] ]
|
17
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
t_plan 9 "PrereadInput middleware tests"
|
4
|
+
|
5
|
+
t_begin "setup and start" && {
|
6
|
+
random_blob_sha1=$(rsha1 < random_blob)
|
7
|
+
unicorn_setup
|
8
|
+
unicorn -D -c $unicorn_config preread_input.ru
|
9
|
+
unicorn_wait_start
|
10
|
+
}
|
11
|
+
|
12
|
+
t_begin "single identity request" && {
|
13
|
+
curl -sSf -T random_blob http://$listen/ > $tmp
|
14
|
+
}
|
15
|
+
|
16
|
+
t_begin "sha1 matches" && {
|
17
|
+
test x"$(cat $tmp)" = x"$random_blob_sha1"
|
18
|
+
}
|
19
|
+
|
20
|
+
t_begin "single chunked request" && {
|
21
|
+
curl -sSf -T- < random_blob http://$listen/ > $tmp
|
22
|
+
}
|
23
|
+
|
24
|
+
t_begin "sha1 matches" && {
|
25
|
+
test x"$(cat $tmp)" = x"$random_blob_sha1"
|
26
|
+
}
|
27
|
+
|
28
|
+
t_begin "app only dispatched twice" && {
|
29
|
+
test 2 -eq "$(grep 'app dispatch:' < $r_err | wc -l )"
|
30
|
+
}
|
31
|
+
|
32
|
+
t_begin "aborted chunked request" && {
|
33
|
+
rm -f $tmp
|
34
|
+
curl -sSf -T- < $fifo http://$listen/ > $tmp &
|
35
|
+
curl_pid=$!
|
36
|
+
kill -9 $curl_pid
|
37
|
+
wait
|
38
|
+
}
|
39
|
+
|
40
|
+
t_begin "app only dispatched twice" && {
|
41
|
+
test 2 -eq "$(grep 'app dispatch:' < $r_err | wc -l )"
|
42
|
+
}
|
43
|
+
|
44
|
+
t_begin "killing succeeds" && {
|
45
|
+
kill -QUIT $unicorn_pid
|
46
|
+
}
|
47
|
+
|
48
|
+
t_done
|
data/unicorn.gemspec
CHANGED
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
# commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
|
49
49
|
# *strongly* recommended for security reasons.
|
50
50
|
s.add_dependency(%q<rack>)
|
51
|
-
s.add_dependency(%q<kgio>, '~> 1.3.
|
51
|
+
s.add_dependency(%q<kgio>, '~> 1.3.1')
|
52
52
|
|
53
53
|
s.add_development_dependency('isolate', '~> 2.1.2')
|
54
54
|
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unicorn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: -766259860
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
|
11
|
-
- gf202
|
12
|
-
version: 2.0.0pre2.4.gf202
|
9
|
+
- 0pre3
|
10
|
+
version: 2.0.0pre3
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Unicorn hackers
|
@@ -17,7 +15,7 @@ autorequire:
|
|
17
15
|
bindir: bin
|
18
16
|
cert_chain: []
|
19
17
|
|
20
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-09 00:00:00 +00:00
|
21
19
|
default_executable:
|
22
20
|
dependencies:
|
23
21
|
- !ruby/object:Gem::Dependency
|
@@ -42,12 +40,12 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
43
|
+
hash: 25
|
46
44
|
segments:
|
47
45
|
- 1
|
48
46
|
- 3
|
49
|
-
-
|
50
|
-
version: 1.3.
|
47
|
+
- 1
|
48
|
+
version: 1.3.1
|
51
49
|
type: :runtime
|
52
50
|
version_requirements: *id002
|
53
51
|
- !ruby/object:Gem::Dependency
|
@@ -105,6 +103,7 @@ extra_rdoc_files:
|
|
105
103
|
- lib/unicorn/http_server.rb
|
106
104
|
- lib/unicorn/launcher.rb
|
107
105
|
- lib/unicorn/oob_gc.rb
|
106
|
+
- lib/unicorn/preread_input.rb
|
108
107
|
- lib/unicorn/socket_helper.rb
|
109
108
|
- lib/unicorn/tee_input.rb
|
110
109
|
- lib/unicorn/tmpio.rb
|
@@ -175,6 +174,7 @@ files:
|
|
175
174
|
- lib/unicorn/http_server.rb
|
176
175
|
- lib/unicorn/launcher.rb
|
177
176
|
- lib/unicorn/oob_gc.rb
|
177
|
+
- lib/unicorn/preread_input.rb
|
178
178
|
- lib/unicorn/socket_helper.rb
|
179
179
|
- lib/unicorn/tee_input.rb
|
180
180
|
- lib/unicorn/tmpio.rb
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- t/env.ru
|
196
196
|
- t/my-tap-lib.sh
|
197
197
|
- t/pid.ru
|
198
|
+
- t/preread_input.ru
|
198
199
|
- t/rails3-app/.gitignore
|
199
200
|
- t/rails3-app/Gemfile
|
200
201
|
- t/rails3-app/Rakefile
|
@@ -244,6 +245,7 @@ files:
|
|
244
245
|
- t/t0302-rails3-alt-working_directory.sh
|
245
246
|
- t/t0303-rails3-alt-working_directory_config.ru.sh
|
246
247
|
- t/t0304-rails3-alt-working_directory_no_embed_cli.sh
|
248
|
+
- t/t9000-preread-input.sh
|
247
249
|
- t/test-lib.sh
|
248
250
|
- t/test-rails3.sh
|
249
251
|
- test/aggregate.rb
|