em-http-request 0.2.7 → 0.2.9
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.
Potentially problematic release.
This version of em-http-request might be problematic. Click here for more details.
- data/README.rdoc +29 -11
- data/Rakefile +5 -4
- data/VERSION +1 -1
- data/em-http-request.gemspec +97 -0
- data/examples/fetch.rb +1 -1
- data/examples/websocket-handler.rb +28 -0
- data/examples/websocket-server.rb +8 -0
- data/ext/buffer/em_buffer.c +74 -65
- data/lib/em-http-request.rb +1 -0
- data/lib/em-http.rb +6 -3
- data/lib/em-http/client.rb +114 -90
- data/lib/em-http/core_ext/bytesize.rb +6 -0
- data/lib/em-http/http_options.rb +32 -0
- data/lib/em-http/mock.rb +38 -15
- data/lib/em-http/request.rb +78 -102
- data/spec/mock_spec.rb +49 -4
- data/spec/multi_spec.rb +2 -2
- data/spec/request_spec.rb +67 -10
- data/spec/stallion.rb +10 -6
- metadata +39 -14
data/lib/em-http/mock.rb
CHANGED
@@ -7,8 +7,12 @@ module EventMachine
|
|
7
7
|
|
8
8
|
def setup(response, uri)
|
9
9
|
@uri = uri
|
10
|
-
|
11
|
-
|
10
|
+
if response == :fail
|
11
|
+
fail(self)
|
12
|
+
else
|
13
|
+
receive_data(response)
|
14
|
+
succeed(self)
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
def unbind
|
@@ -20,11 +24,15 @@ module EventMachine
|
|
20
24
|
@@registry_count = nil
|
21
25
|
|
22
26
|
def self.reset_counts!
|
23
|
-
@@registry_count = Hash.new
|
27
|
+
@@registry_count = Hash.new do |registry,query|
|
28
|
+
registry[query] = Hash.new{|h,k| h[k] = Hash.new(0)}
|
29
|
+
end
|
24
30
|
end
|
25
31
|
|
26
32
|
def self.reset_registry!
|
27
|
-
@@registry = Hash.new
|
33
|
+
@@registry = Hash.new do |registry,query|
|
34
|
+
registry[query] = Hash.new{|h,k| h[k] = {}}
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
38
|
reset_counts!
|
@@ -40,34 +48,49 @@ module EventMachine
|
|
40
48
|
@@pass_through_requests
|
41
49
|
end
|
42
50
|
|
43
|
-
def self.register(uri, method, data)
|
51
|
+
def self.register(uri, method, headers, data)
|
44
52
|
method = method.to_s.upcase
|
45
|
-
|
53
|
+
headers = headers.to_s
|
54
|
+
@@registry[uri][method][headers] = data
|
46
55
|
end
|
47
56
|
|
48
|
-
def self.register_file(uri, method, file)
|
49
|
-
register(uri, method, File.read(file))
|
57
|
+
def self.register_file(uri, method, headers, file)
|
58
|
+
register(uri, method, headers, File.read(file))
|
50
59
|
end
|
51
60
|
|
52
|
-
def self.count(uri, method)
|
61
|
+
def self.count(uri, method, headers)
|
53
62
|
method = method.to_s.upcase
|
54
|
-
|
63
|
+
headers = headers.to_s
|
64
|
+
@@registry_count[uri][method][headers] rescue 0
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.registered?(query, method, headers)
|
68
|
+
@@registry[query] and @@registry[query][method] and @@registry[query][method][headers]
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.registered_content(query, method, headers)
|
72
|
+
@@registry[query][method][headers]
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.increment_access(query, method, headers)
|
76
|
+
@@registry_count[query][method][headers] += 1
|
55
77
|
end
|
56
78
|
|
57
79
|
alias_method :real_send_request, :send_request
|
58
80
|
|
59
81
|
protected
|
60
82
|
def send_request(&blk)
|
61
|
-
query = "#{@uri.scheme}://#{@uri.host}:#{@uri.port}#{encode_query(@uri.path, @options[:query], @uri.query)}"
|
62
|
-
|
63
|
-
|
83
|
+
query = "#{@req.uri.scheme}://#{@req.uri.host}:#{@req.uri.port}#{encode_query(@req.uri.path, @req.options[:query], @req.uri.query)}"
|
84
|
+
headers = @req.options[:head].to_s
|
85
|
+
if self.class.registered?(query, @req.method, headers)
|
86
|
+
self.class.increment_access(query, @req.method, headers)
|
64
87
|
client = FakeHttpClient.new(nil)
|
65
|
-
client.setup(
|
88
|
+
client.setup(self.class.registered_content(query, @req.method, headers), @req.uri)
|
66
89
|
client
|
67
90
|
elsif @@pass_through_requests
|
68
91
|
real_send_request
|
69
92
|
else
|
70
|
-
raise "this request #{query} for method #{@method} isn't registered, and pass_through_requests is current set to false"
|
93
|
+
raise "this request #{query} for method #{@req.method} with the headers #{@req.options[:head].inspect} isn't registered, and pass_through_requests is current set to false"
|
71
94
|
end
|
72
95
|
end
|
73
96
|
end
|
data/lib/em-http/request.rb
CHANGED
@@ -1,103 +1,79 @@
|
|
1
|
-
require 'base64'
|
2
|
-
require 'addressable/uri'
|
3
|
-
|
4
|
-
module EventMachine
|
5
|
-
|
6
|
-
# EventMachine based HTTP request class with support for streaming consumption
|
7
|
-
# of the response. Response is parsed with a Ragel-generated whitelist parser
|
8
|
-
# which supports chunked HTTP encoding.
|
9
|
-
#
|
10
|
-
# == Example
|
11
|
-
#
|
12
|
-
# EventMachine.run {
|
13
|
-
# http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
14
|
-
#
|
15
|
-
# http.callback {
|
16
|
-
# p http.response_header.status
|
17
|
-
# p http.response_header
|
18
|
-
# p http.response
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# }
|
22
|
-
# }
|
23
|
-
#
|
24
|
-
|
25
|
-
class HttpRequest
|
26
|
-
|
27
|
-
attr_reader :options, :method
|
28
|
-
|
29
|
-
def initialize(host)
|
30
|
-
@uri = host.kind_of?(Addressable::URI) ? host : Addressable::URI::parse(host)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Send an HTTP request and consume the response. Supported options:
|
34
|
-
#
|
35
|
-
# head: {Key: Value}
|
36
|
-
# Specify an HTTP header, e.g. {'Connection': 'close'}
|
37
|
-
#
|
38
|
-
# query: {Key: Value}
|
39
|
-
# Specify query string parameters (auto-escaped)
|
40
|
-
#
|
41
|
-
# body: String
|
42
|
-
# Specify the request body (you must encode it for now)
|
43
|
-
#
|
44
|
-
# on_response: Proc
|
45
|
-
# Called for each response body chunk (you may assume HTTP 200
|
46
|
-
# OK then)
|
47
|
-
#
|
48
|
-
|
49
|
-
def get options = {}, &blk; setup_request(:get,
|
50
|
-
def head options = {}, &blk; setup_request(:head,
|
51
|
-
def delete options = {}, &blk; setup_request(:delete,
|
52
|
-
def put options = {}, &blk; setup_request(:put,
|
53
|
-
def post options = {}, &blk; setup_request(:post,
|
54
|
-
|
55
|
-
protected
|
56
|
-
|
57
|
-
def setup_request(method, options, &blk)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
@port_to_connect ||= 80
|
80
|
-
end
|
81
|
-
|
82
|
-
@method = method.to_s.upcase
|
83
|
-
send_request(&blk)
|
84
|
-
end
|
85
|
-
|
86
|
-
def send_request(&blk)
|
87
|
-
begin
|
88
|
-
EventMachine.connect(@host_to_connect, @port_to_connect, EventMachine::HttpClient) { |c|
|
89
|
-
c.uri = @uri
|
90
|
-
c.method = @method
|
91
|
-
c.options = @options
|
92
|
-
c.comm_inactivity_timeout = @options[:timeout]
|
93
|
-
c.pending_connect_timeout = @options[:timeout]
|
94
|
-
blk.call(c) unless blk.nil?
|
95
|
-
}
|
96
|
-
rescue EventMachine::ConnectionError => e
|
97
|
-
conn = EventMachine::HttpClient.new("")
|
98
|
-
conn.on_error(e.message, true)
|
99
|
-
conn
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
1
|
+
require 'base64'
|
2
|
+
require 'addressable/uri'
|
3
|
+
|
4
|
+
module EventMachine
|
5
|
+
|
6
|
+
# EventMachine based HTTP request class with support for streaming consumption
|
7
|
+
# of the response. Response is parsed with a Ragel-generated whitelist parser
|
8
|
+
# which supports chunked HTTP encoding.
|
9
|
+
#
|
10
|
+
# == Example
|
11
|
+
#
|
12
|
+
# EventMachine.run {
|
13
|
+
# http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
14
|
+
#
|
15
|
+
# http.callback {
|
16
|
+
# p http.response_header.status
|
17
|
+
# p http.response_header
|
18
|
+
# p http.response
|
19
|
+
#
|
20
|
+
# EventMachine.stop
|
21
|
+
# }
|
22
|
+
# }
|
23
|
+
#
|
24
|
+
|
25
|
+
class HttpRequest
|
26
|
+
|
27
|
+
attr_reader :options, :method
|
28
|
+
|
29
|
+
def initialize(host)
|
30
|
+
@uri = host.kind_of?(Addressable::URI) ? host : Addressable::URI::parse(host)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Send an HTTP request and consume the response. Supported options:
|
34
|
+
#
|
35
|
+
# head: {Key: Value}
|
36
|
+
# Specify an HTTP header, e.g. {'Connection': 'close'}
|
37
|
+
#
|
38
|
+
# query: {Key: Value}
|
39
|
+
# Specify query string parameters (auto-escaped)
|
40
|
+
#
|
41
|
+
# body: String
|
42
|
+
# Specify the request body (you must encode it for now)
|
43
|
+
#
|
44
|
+
# on_response: Proc
|
45
|
+
# Called for each response body chunk (you may assume HTTP 200
|
46
|
+
# OK then)
|
47
|
+
#
|
48
|
+
|
49
|
+
def get options = {}, &blk; setup_request(:get, options, &blk); end
|
50
|
+
def head options = {}, &blk; setup_request(:head, options, &blk); end
|
51
|
+
def delete options = {}, &blk; setup_request(:delete,options, &blk); end
|
52
|
+
def put options = {}, &blk; setup_request(:put, options, &blk); end
|
53
|
+
def post options = {}, &blk; setup_request(:post, options, &blk); end
|
54
|
+
|
55
|
+
protected
|
56
|
+
|
57
|
+
def setup_request(method, options, &blk)
|
58
|
+
@req = HttpOptions.new(method, @uri, options)
|
59
|
+
send_request(&blk)
|
60
|
+
end
|
61
|
+
|
62
|
+
def send_request(&blk)
|
63
|
+
begin
|
64
|
+
EventMachine.connect(@req.host, @req.port, EventMachine::HttpClient) { |c|
|
65
|
+
c.uri = @req.uri
|
66
|
+
c.method = @req.method
|
67
|
+
c.options = @req.options
|
68
|
+
c.comm_inactivity_timeout = @req.options[:timeout]
|
69
|
+
c.pending_connect_timeout = @req.options[:timeout]
|
70
|
+
blk.call(c) unless blk.nil?
|
71
|
+
}
|
72
|
+
rescue EventMachine::ConnectionError => e
|
73
|
+
conn = EventMachine::HttpClient.new("")
|
74
|
+
conn.on_error(e.message, true)
|
75
|
+
conn
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
103
79
|
end
|
data/spec/mock_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe 'em-http mock' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should serve a fake http request from a file" do
|
11
|
-
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
11
|
+
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, {}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
12
12
|
EM.run {
|
13
13
|
|
14
14
|
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get
|
@@ -19,7 +19,7 @@ describe 'em-http mock' do
|
|
19
19
|
}
|
20
20
|
}
|
21
21
|
|
22
|
-
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get).should == 1
|
22
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {}).should == 1
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should serve a fake http request from a string" do
|
@@ -46,7 +46,7 @@ window._gjp && _gjp()</script><style>td{line-height:.8em;}.gac_m td{line-height:
|
|
46
46
|
function a(){google.timers.load.t.ol=(new Date).getTime();google.report&&google.timers.load.t.xjs&&google.report(google.timers.load,google.kCSI)}if(window.addEventListener)window.addEventListener("load",a,false);else if(window.attachEvent)window.attachEvent("onload",a);google.timers.load.t.prt=(new Date).getTime();
|
47
47
|
})();
|
48
48
|
HEREDOC
|
49
|
-
EventMachine::MockHttpRequest.register('http://www.google.ca:80/', :get, data)
|
49
|
+
EventMachine::MockHttpRequest.register('http://www.google.ca:80/', :get, {}, data)
|
50
50
|
EventMachine.run {
|
51
51
|
|
52
52
|
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get
|
@@ -57,7 +57,52 @@ function a(){google.timers.load.t.ol=(new Date).getTime();google.report&&google.
|
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
60
|
-
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get).should == 1
|
60
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {}).should == 1
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should serve a fake failing http request" do
|
64
|
+
EventMachine::MockHttpRequest.register('http://www.google.ca:80/', :get, {}, :fail)
|
65
|
+
error = false
|
66
|
+
|
67
|
+
EventMachine.run {
|
68
|
+
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get
|
69
|
+
http.errback {
|
70
|
+
error = true
|
71
|
+
EventMachine.stop
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
error.should be_true
|
76
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {}).should == 1
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should distinguish the cache by the given headers" do
|
80
|
+
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, {:user_agent => 'BERT'}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
81
|
+
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, {}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
82
|
+
EM.run {
|
83
|
+
|
84
|
+
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get
|
85
|
+
http.errback { fail }
|
86
|
+
http.callback {
|
87
|
+
http.response.should == File.read(File.join(File.dirname(__FILE__), 'fixtures', 'google.ca')).split("\n\n", 2).last
|
88
|
+
EventMachine.stop
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {}).should == 1
|
93
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {:user_agent => 'BERT'}).should == 0
|
94
|
+
|
95
|
+
EM.run {
|
96
|
+
|
97
|
+
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get({:head => {:user_agent => 'BERT'}})
|
98
|
+
http.errback { fail }
|
99
|
+
http.callback {
|
100
|
+
http.response.should == File.read(File.join(File.dirname(__FILE__), 'fixtures', 'google.ca')).split("\n\n", 2).last
|
101
|
+
EventMachine.stop
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {:user_agent => 'BERT'}).should == 1
|
61
106
|
end
|
62
107
|
|
63
108
|
it "should raise an exception if pass-thru is disabled" do
|
data/spec/multi_spec.rb
CHANGED
@@ -28,8 +28,8 @@ describe EventMachine::MultiRequest do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should handle multiple mock requests" do
|
31
|
-
EventMachine::MockHttpRequest.register_file('http://127.0.0.1:8080/', :get, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
32
|
-
EventMachine::MockHttpRequest.register_file('http://0.0.0.0:8083/', :get, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
31
|
+
EventMachine::MockHttpRequest.register_file('http://127.0.0.1:8080/', :get, {}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
32
|
+
EventMachine::MockHttpRequest.register_file('http://0.0.0.0:8083/', :get, {}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
33
33
|
|
34
34
|
EventMachine.run {
|
35
35
|
|
data/spec/request_spec.rb
CHANGED
@@ -11,6 +11,7 @@ describe EventMachine::HttpRequest do
|
|
11
11
|
|
12
12
|
it "should fail GET on DNS timeout" do
|
13
13
|
EventMachine.run {
|
14
|
+
EventMachine.heartbeat_interval = 0.1
|
14
15
|
http = EventMachine::HttpRequest.new('http://127.1.1.1/').get :timeout => 1
|
15
16
|
http.callback { failed }
|
16
17
|
http.errback {
|
@@ -22,11 +23,12 @@ describe EventMachine::HttpRequest do
|
|
22
23
|
|
23
24
|
it "should fail GET on invalid host" do
|
24
25
|
EventMachine.run {
|
26
|
+
EventMachine.heartbeat_interval = 0.1
|
25
27
|
http = EventMachine::HttpRequest.new('http://somethinglocal/').get :timeout => 1
|
26
28
|
http.callback { failed }
|
27
29
|
http.errback {
|
28
30
|
http.response_header.status.should == 0
|
29
|
-
http.
|
31
|
+
http.error.should match(/unable to resolve server address/)
|
30
32
|
EventMachine.stop
|
31
33
|
}
|
32
34
|
}
|
@@ -74,7 +76,7 @@ describe EventMachine::HttpRequest do
|
|
74
76
|
uri = URI.parse('http://127.0.0.1:8080/')
|
75
77
|
http = EventMachine::HttpRequest.new(uri).head
|
76
78
|
|
77
|
-
http.errback { failed }
|
79
|
+
http.errback { p http; failed }
|
78
80
|
http.callback {
|
79
81
|
http.response_header.status.should == 200
|
80
82
|
http.response.should == ""
|
@@ -302,19 +304,63 @@ describe EventMachine::HttpRequest do
|
|
302
304
|
}
|
303
305
|
end
|
304
306
|
|
305
|
-
it "should timeout after
|
307
|
+
it "should timeout after 1 second" do
|
306
308
|
EventMachine.run {
|
307
309
|
t = Time.now.to_i
|
310
|
+
EventMachine.heartbeat_interval = 0.1
|
308
311
|
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/timeout').get :timeout => 1
|
309
312
|
|
310
313
|
http.errback {
|
311
|
-
(Time.now.to_i - t).should
|
314
|
+
(Time.now.to_i - t).should <= 5
|
312
315
|
EventMachine.stop
|
313
316
|
}
|
314
317
|
http.callback { failed }
|
315
318
|
}
|
316
319
|
end
|
317
320
|
|
321
|
+
it "should report last_effective_url" do
|
322
|
+
EventMachine.run {
|
323
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get
|
324
|
+
http.errback { failed }
|
325
|
+
http.callback {
|
326
|
+
http.response_header.status.should == 200
|
327
|
+
http.last_effective_url.to_s.should == 'http://127.0.0.1:8080/'
|
328
|
+
|
329
|
+
EM.stop
|
330
|
+
}
|
331
|
+
}
|
332
|
+
end
|
333
|
+
|
334
|
+
it "should follow location redirects" do
|
335
|
+
EventMachine.run {
|
336
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/redirect').get :redirects => 1
|
337
|
+
http.errback { failed }
|
338
|
+
http.callback {
|
339
|
+
http.response_header.status.should == 200
|
340
|
+
http.response_header["CONTENT_ENCODING"].should == "gzip"
|
341
|
+
http.response.should == "compressed"
|
342
|
+
http.last_effective_url.to_s.should == 'http://127.0.0.1:8080/gzip'
|
343
|
+
http.redirects.should == 1
|
344
|
+
|
345
|
+
EM.stop
|
346
|
+
}
|
347
|
+
}
|
348
|
+
end
|
349
|
+
|
350
|
+
it "should default to 0 redirects" do
|
351
|
+
EventMachine.run {
|
352
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/redirect').get
|
353
|
+
http.errback { failed }
|
354
|
+
http.callback {
|
355
|
+
http.response_header.status.should == 301
|
356
|
+
http.last_effective_url.to_s.should == 'http://127.0.0.1:8080/gzip'
|
357
|
+
http.redirects.should == 0
|
358
|
+
|
359
|
+
EM.stop
|
360
|
+
}
|
361
|
+
}
|
362
|
+
end
|
363
|
+
|
318
364
|
it "should optionally pass the response body progressively" do
|
319
365
|
EventMachine.run {
|
320
366
|
body = ''
|
@@ -486,8 +532,20 @@ describe EventMachine::HttpRequest do
|
|
486
532
|
EventMachine.stop
|
487
533
|
}
|
488
534
|
}
|
489
|
-
end
|
490
|
-
|
535
|
+
end
|
536
|
+
|
537
|
+
it "should stream a file off disk" do
|
538
|
+
EventMachine.run {
|
539
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').post :file => 'spec/fixtures/google.ca'
|
540
|
+
|
541
|
+
http.errback { failed }
|
542
|
+
http.callback {
|
543
|
+
http.response.should match('google')
|
544
|
+
EventMachine.stop
|
545
|
+
}
|
546
|
+
}
|
547
|
+
end
|
548
|
+
|
491
549
|
it 'should let you pass a block to be called once the client is created' do
|
492
550
|
client = nil
|
493
551
|
EventMachine.run {
|
@@ -501,14 +559,13 @@ describe EventMachine::HttpRequest do
|
|
501
559
|
client.should be_kind_of(EventMachine::HttpClient)
|
502
560
|
http.response_header.status.should == 200
|
503
561
|
http.response.should match(/callback_run=yes/)
|
504
|
-
client.normalize_uri.should == Addressable::URI.parse('http://127.0.0.1:8080/')
|
505
562
|
EventMachine.stop
|
506
563
|
}
|
507
564
|
}
|
508
565
|
end
|
509
566
|
|
510
567
|
it "should retrieve multiple cookies" do
|
511
|
-
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
568
|
+
EventMachine::MockHttpRequest.register_file('http://www.google.ca:80/', :get, {}, File.join(File.dirname(__FILE__), 'fixtures', 'google.ca'))
|
512
569
|
EventMachine.run {
|
513
570
|
|
514
571
|
http = EventMachine::MockHttpRequest.new('http://www.google.ca/').get
|
@@ -522,7 +579,7 @@ describe EventMachine::HttpRequest do
|
|
522
579
|
}
|
523
580
|
}
|
524
581
|
|
525
|
-
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get).should == 1
|
582
|
+
EventMachine::MockHttpRequest.count('http://www.google.ca:80/', :get, {}).should == 1
|
526
583
|
end
|
527
584
|
|
528
585
|
context "connections via proxy" do
|
@@ -595,7 +652,7 @@ describe EventMachine::HttpRequest do
|
|
595
652
|
# push should only be invoked after handshake is complete
|
596
653
|
http.send(MSG)
|
597
654
|
}
|
598
|
-
|
655
|
+
|
599
656
|
http.stream { |chunk|
|
600
657
|
chunk.should == MSG
|
601
658
|
EventMachine.stop
|