http_spew 0.2.0 → 0.3.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.
- data/ChangeLog +30 -0
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/LATEST +5 -4
- data/NEWS +8 -0
- data/lib/http_spew/content_md5.rb +13 -13
- data/lib/http_spew/version.rb +1 -1
- data/test/test_content_md5.rb +19 -0
- data/test/test_input_spray_with_md5.rb +1 -1
- metadata +4 -4
data/ChangeLog
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
ChangeLog from http://bogomips.org/http_spew.git
|
2
2
|
|
3
|
+
commit b53bbc7852d9788099e514b54a0b90d82a3338bb
|
4
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
5
|
+
Date: Wed May 11 23:25:49 2011 +0000
|
6
|
+
|
7
|
+
http_spew 0.3.0 - ContentMD5 improvements
|
8
|
+
|
9
|
+
There are minor changes to HTTP_Spew::ContentMD5:
|
10
|
+
* allow optional input param to initialize
|
11
|
+
* update bytes_digested for incomplete xfers
|
12
|
+
|
13
|
+
Still not API-stable, but maybe it's closer...
|
14
|
+
|
15
|
+
commit 9d42089445aa2b61a50bf9a57a6f839569f4a1d4
|
16
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
17
|
+
Date: Wed May 11 21:05:04 2011 +0000
|
18
|
+
|
19
|
+
content_md5: update bytes_digested for incomplete xfers
|
20
|
+
|
21
|
+
Being able to track progress is good.
|
22
|
+
|
23
|
+
commit 1a71f9204211061460e05e92c5523744b9b18afb
|
24
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
25
|
+
Date: Wed May 11 20:08:20 2011 +0000
|
26
|
+
|
27
|
+
content_md5: optional input param to initialize
|
28
|
+
|
29
|
+
This allows users to specify an alternate input without
|
30
|
+
modifying the Rack +env+. This is potentially useful for
|
31
|
+
chaining other filters.
|
32
|
+
|
3
33
|
commit 84eaf4df3da4ef55e21649b971f2f246ab556b52
|
4
34
|
Author: Eric Wong <normalperson@yhbt.net>
|
5
35
|
Date: Tue May 10 14:40:53 2011 -0700
|
data/GIT-VERSION-FILE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
GIT_VERSION = 0.
|
1
|
+
GIT_VERSION = 0.3.0
|
data/GIT-VERSION-GEN
CHANGED
data/LATEST
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
=== http_spew 0.
|
1
|
+
=== http_spew 0.3.0 - ContentMD5 improvements / 2011-05-11 23:29 UTC
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
There are minor changes to HTTP_Spew::ContentMD5:
|
4
|
+
* allow optional input param to initialize
|
5
|
+
* update bytes_digested for incomplete xfers
|
5
6
|
|
6
|
-
|
7
|
+
Still not API-stable, but maybe it's closer...
|
7
8
|
|
data/NEWS
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== http_spew 0.3.0 - ContentMD5 improvements / 2011-05-11 23:29 UTC
|
2
|
+
|
3
|
+
There are minor changes to HTTP_Spew::ContentMD5:
|
4
|
+
* allow optional input param to initialize
|
5
|
+
* update bytes_digested for incomplete xfers
|
6
|
+
|
7
|
+
Still not API-stable, but maybe it's closer...
|
8
|
+
|
1
9
|
=== http_spew 0.2.0 - bugfixes and improvements / 2011-05-10 22:19 UTC
|
2
10
|
|
3
11
|
InputSpray may now be layered on top of ContentMD5 successfully.
|
@@ -9,7 +9,7 @@ class HTTP_Spew::ContentMD5
|
|
9
9
|
|
10
10
|
CRLF = "\r\n" # :nodoc:
|
11
11
|
|
12
|
-
def initialize(env)
|
12
|
+
def initialize(env, input = env["rack.input"])
|
13
13
|
if trailer = env["HTTP_TRAILER"]
|
14
14
|
unless trailer.split(/\s*,\s*/).grep(/\AContent-MD5\z/i)[0]
|
15
15
|
trailer << (trailer.empty? ? "Content-MD5" : ",Content-MD5")
|
@@ -21,7 +21,7 @@ class HTTP_Spew::ContentMD5
|
|
21
21
|
@to_io, wr = HTTP_Spew::ChunkyPipe.new
|
22
22
|
expect_md5 = env.delete("HTTP_CONTENT_MD5")
|
23
23
|
expect_len = env.delete("CONTENT_LENGTH")
|
24
|
-
start_write_driver(
|
24
|
+
start_write_driver(input, wr, expect_md5, expect_len)
|
25
25
|
end
|
26
26
|
|
27
27
|
# compatible with IO#read and Rack::InputWrapper#read
|
@@ -34,18 +34,19 @@ class HTTP_Spew::ContentMD5
|
|
34
34
|
Thread.new do
|
35
35
|
begin
|
36
36
|
digest = Digest::MD5.new
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
37
|
+
@bytes_digested = 0
|
38
|
+
if buf = input.read(0x4000)
|
39
|
+
begin
|
40
|
+
n = buf.size
|
41
|
+
@bytes_digested += n
|
42
|
+
wr.write("#{n.to_s(16)}\r\n")
|
43
|
+
digest.update(buf)
|
44
|
+
wr.write(buf << CRLF)
|
45
|
+
end while input.read(0x4000, buf)
|
45
46
|
end
|
46
|
-
if expect_len && expect_len.to_i !=
|
47
|
+
if expect_len && expect_len.to_i != @bytes_digested
|
47
48
|
raise HTTP_Spew::LengthError,
|
48
|
-
"expect=#{expect_len} != got
|
49
|
+
"expect=#{expect_len} != got=#@bytes_digested", []
|
49
50
|
end
|
50
51
|
md5 = [ digest.digest ].pack("m0")
|
51
52
|
if expect_md5 && expect_md5.strip != md5
|
@@ -54,7 +55,6 @@ class HTTP_Spew::ContentMD5
|
|
54
55
|
end
|
55
56
|
wr.write "0\r\nContent-MD5: #{md5}\r\n\r\n"
|
56
57
|
@content_md5 = md5
|
57
|
-
@bytes_digested = bytes
|
58
58
|
rescue => e
|
59
59
|
@to_io.error = e
|
60
60
|
ensure
|
data/lib/http_spew/version.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
|
-
HTTP_Spew.const_set :VERSION, "0.
|
2
|
+
HTTP_Spew.const_set :VERSION, "0.3.0"
|
data/test/test_content_md5.rb
CHANGED
@@ -83,4 +83,23 @@ class TestContentMD5 < Test::Unit::TestCase
|
|
83
83
|
body = ""
|
84
84
|
req.each { |buf| body << buf }
|
85
85
|
end
|
86
|
+
|
87
|
+
def test_upload_with_md5_alt_input
|
88
|
+
str = rand_data(123) * (8 * 1021 * 13)
|
89
|
+
expect_md5 = [Digest::MD5.digest(str)].pack("m0")
|
90
|
+
expect = "expect=#{expect_md5}\nreaded=#{expect_md5}\n"
|
91
|
+
@env["CONTENT_LENGTH"] = str.size.to_s
|
92
|
+
@env["rack.input"] = File.open("/dev/null", "rb")
|
93
|
+
input = HTTP_Spew::ContentMD5.new(@env, StringIO.new(str))
|
94
|
+
assert_nil @env["CONTENT_LENGTH"]
|
95
|
+
assert_equal "chunked", @env["HTTP_TRANSFER_ENCODING"]
|
96
|
+
req = HTTP_Spew::Request.new(@env, input, @sockaddr)
|
97
|
+
rv = HTTP_Spew.wait 1, [req], 666
|
98
|
+
assert_equal 200, rv[0].response[0].to_i
|
99
|
+
body = ""
|
100
|
+
req.each { |buf| body << buf }
|
101
|
+
assert_equal body, expect
|
102
|
+
assert_equal expect_md5, input.content_md5
|
103
|
+
assert_equal 123 * 8 * 1021 * 13, input.bytes_digested
|
104
|
+
end
|
86
105
|
end
|
@@ -69,7 +69,7 @@ class TestInputSprayWithMD5 < Test::Unit::TestCase
|
|
69
69
|
assert_kind_of HTTP_Spew::ChecksumError, r.error
|
70
70
|
}
|
71
71
|
assert_nil input.content_md5
|
72
|
-
|
72
|
+
assert_equal str.size, input.bytes_digested
|
73
73
|
end
|
74
74
|
|
75
75
|
def test_upload_with_valid_md5_sprayed_one_failure
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_spew
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- HTTP Spew hackers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-11 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: kcar
|