unicorn 0.5.3 → 0.5.4

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,4 @@
1
+ v0.5.4 - fix data corruption with some small uploads (not curl)
1
2
  v0.5.3 - fix 100% CPU usage when idle, small cleanups
2
3
  v0.5.2 - force Status: header for compat, small cleanups
3
4
  v0.5.1 - exit correctly on INT/TERM, QUIT is still recommended, however
@@ -87,15 +87,10 @@ module Unicorn
87
87
  remain = content_length - http_body.length
88
88
 
89
89
  # must read more data to complete body
90
- if remain < Const::MAX_BODY
91
- # small body, just use that
92
- @body = StringIO.new(http_body)
93
- else # huge body, put it in a tempfile
94
- @body = Tempfile.new(Const::UNICORN_TMP_BASE)
95
- @body.binmode
96
- @body.sync = true
97
- @body.syswrite(http_body)
98
- end
90
+ @body = remain < Const::MAX_BODY ? StringIO.new : Tempfile.new('')
91
+ @body.binmode
92
+ @body.sync = true
93
+ @body.syswrite(http_body)
99
94
 
100
95
  # Some clients (like FF1.0) report 0 for body and then send a body.
101
96
  # This will probably truncate them but at least the request goes through
@@ -50,6 +50,29 @@ class UploadTest < Test::Unit::TestCase
50
50
  assert_equal @sha1.hexdigest, resp[:sha1]
51
51
  end
52
52
 
53
+ def test_put_trickle_small
54
+ @count, @bs = 2, 128
55
+ start_server(@sha1_app)
56
+ assert_equal 256, length
57
+ sock = TCPSocket.new(@addr, @port)
58
+ hdr = "PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n"
59
+ @count.times do
60
+ buf = @random.sysread(@bs)
61
+ @sha1.update(buf)
62
+ hdr << buf
63
+ sock.syswrite(hdr)
64
+ hdr = ''
65
+ sleep 0.6
66
+ end
67
+ read = sock.read.split(/\r\n/)
68
+ assert_equal "HTTP/1.1 200 OK", read[0]
69
+ resp = eval(read.grep(/^X-Resp: /).first.sub!(/X-Resp: /, ''))
70
+ assert_equal length, resp[:size]
71
+ assert_equal 0, resp[:pos]
72
+ assert_equal @sha1.hexdigest, resp[:sha1]
73
+ assert_equal StringIO, resp[:class]
74
+ end
75
+
53
76
  def test_tempfile_unlinked
54
77
  spew_path = lambda do |env|
55
78
  if orig = env['HTTP_X_OLD_PATH']
data/unicorn.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{unicorn}
5
- s.version = "0.5.3"
5
+ s.version = "0.5.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Eric Wong"]
9
- s.date = %q{2009-04-16}
9
+ s.date = %q{2009-04-23}
10
10
  s.description = %q{A small fast HTTP library and server for Rack applications.}
11
11
  s.email = %q{normalperson@yhbt.net}
12
12
  s.executables = ["unicorn", "unicorn_rails"]
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.rubyforge_project = %q{unicorn}
21
21
  s.rubygems_version = %q{1.3.1}
22
22
  s.summary = %q{A small fast HTTP library and server for Rack applications.}
23
- s.test_files = ["test/unit/test_request.rb", "test/unit/test_http_parser.rb", "test/unit/test_server.rb", "test/unit/test_response.rb", "test/unit/test_configurator.rb", "test/unit/test_upload.rb", "test/unit/test_signals.rb", "test/unit/test_socket_helper.rb"]
23
+ s.test_files = ["test/unit/test_configurator.rb", "test/unit/test_response.rb", "test/unit/test_request.rb", "test/unit/test_signals.rb", "test/unit/test_upload.rb", "test/unit/test_http_parser.rb", "test/unit/test_socket_helper.rb", "test/unit/test_server.rb"]
24
24
 
25
25
  if s.respond_to? :specification_version then
26
26
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Wong
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-16 00:00:00 -07:00
12
+ date: 2009-04-23 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -211,11 +211,11 @@ signing_key:
211
211
  specification_version: 2
212
212
  summary: A small fast HTTP library and server for Rack applications.
213
213
  test_files:
214
- - test/unit/test_request.rb
215
- - test/unit/test_http_parser.rb
216
- - test/unit/test_server.rb
217
- - test/unit/test_response.rb
218
214
  - test/unit/test_configurator.rb
219
- - test/unit/test_upload.rb
215
+ - test/unit/test_response.rb
216
+ - test/unit/test_request.rb
220
217
  - test/unit/test_signals.rb
218
+ - test/unit/test_upload.rb
219
+ - test/unit/test_http_parser.rb
221
220
  - test/unit/test_socket_helper.rb
221
+ - test/unit/test_server.rb