typhoeus 1.3.1 → 1.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +72 -1
- data/CONTRIBUTING.md +4 -0
- data/README.md +13 -6
- data/lib/typhoeus/adapters/faraday.rb +2 -2
- data/lib/typhoeus/cache/dalli.rb +3 -1
- data/lib/typhoeus/cache/rails.rb +4 -2
- data/lib/typhoeus/cache/redis.rb +3 -1
- data/lib/typhoeus/config.rb +17 -1
- data/lib/typhoeus/easy_factory.rb +27 -1
- data/lib/typhoeus/expectation.rb +4 -2
- data/lib/typhoeus/hydra/cacheable.rb +1 -1
- data/lib/typhoeus/request/cacheable.rb +5 -1
- data/lib/typhoeus/request/responseable.rb +1 -1
- data/lib/typhoeus/request.rb +2 -0
- data/lib/typhoeus/response/informations.rb +57 -0
- data/lib/typhoeus/version.rb +1 -1
- data/lib/typhoeus.rb +4 -3
- data/typhoeus.gemspec +14 -4
- metadata +14 -99
- data/.gitignore +0 -8
- data/.rspec +0 -4
- data/.travis.yml +0 -22
- data/Gemfile +0 -32
- data/Guardfile +0 -9
- data/Rakefile +0 -38
- data/perf/profile.rb +0 -14
- data/perf/vs_nethttp.rb +0 -64
- data/spec/rack/typhoeus/middleware/params_decoder/helper_spec.rb +0 -156
- data/spec/rack/typhoeus/middleware/params_decoder_spec.rb +0 -31
- data/spec/spec_helper.rb +0 -29
- data/spec/support/localhost_server.rb +0 -94
- data/spec/support/memory_cache.rb +0 -15
- data/spec/support/server.rb +0 -116
- data/spec/typhoeus/adapters/faraday_spec.rb +0 -339
- data/spec/typhoeus/cache/dalli_spec.rb +0 -41
- data/spec/typhoeus/cache/redis_spec.rb +0 -41
- data/spec/typhoeus/config_spec.rb +0 -15
- data/spec/typhoeus/easy_factory_spec.rb +0 -143
- data/spec/typhoeus/errors/no_stub_spec.rb +0 -13
- data/spec/typhoeus/expectation_spec.rb +0 -280
- data/spec/typhoeus/hydra/addable_spec.rb +0 -22
- data/spec/typhoeus/hydra/before_spec.rb +0 -98
- data/spec/typhoeus/hydra/block_connection_spec.rb +0 -18
- data/spec/typhoeus/hydra/cacheable_spec.rb +0 -58
- data/spec/typhoeus/hydra/memoizable_spec.rb +0 -53
- data/spec/typhoeus/hydra/queueable_spec.rb +0 -98
- data/spec/typhoeus/hydra/runnable_spec.rb +0 -137
- data/spec/typhoeus/hydra/stubbable_spec.rb +0 -48
- data/spec/typhoeus/hydra_spec.rb +0 -22
- data/spec/typhoeus/pool_spec.rb +0 -135
- data/spec/typhoeus/request/actions_spec.rb +0 -19
- data/spec/typhoeus/request/before_spec.rb +0 -93
- data/spec/typhoeus/request/block_connection_spec.rb +0 -75
- data/spec/typhoeus/request/cacheable_spec.rb +0 -94
- data/spec/typhoeus/request/callbacks_spec.rb +0 -91
- data/spec/typhoeus/request/marshal_spec.rb +0 -60
- data/spec/typhoeus/request/memoizable_spec.rb +0 -34
- data/spec/typhoeus/request/operations_spec.rb +0 -101
- data/spec/typhoeus/request/responseable_spec.rb +0 -13
- data/spec/typhoeus/request/stubbable_spec.rb +0 -45
- data/spec/typhoeus/request_spec.rb +0 -232
- data/spec/typhoeus/response/header_spec.rb +0 -147
- data/spec/typhoeus/response/informations_spec.rb +0 -283
- data/spec/typhoeus/response/status_spec.rb +0 -256
- data/spec/typhoeus/response_spec.rb +0 -100
- data/spec/typhoeus_spec.rb +0 -105
data/spec/support/server.rb
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
require 'json'
|
|
3
|
-
require 'zlib'
|
|
4
|
-
require 'sinatra/base'
|
|
5
|
-
require 'rack/typhoeus'
|
|
6
|
-
|
|
7
|
-
TESTSERVER = Sinatra.new do
|
|
8
|
-
set :logging, false
|
|
9
|
-
use Rack::Typhoeus::Middleware::ParamsDecoder
|
|
10
|
-
|
|
11
|
-
fail_count = 0
|
|
12
|
-
|
|
13
|
-
post '/file' do
|
|
14
|
-
{
|
|
15
|
-
'content-type' => params[:file][:type],
|
|
16
|
-
'filename' => params[:file][:filename],
|
|
17
|
-
'content' => params[:file][:tempfile].read,
|
|
18
|
-
'request-content-type' => request.env['CONTENT_TYPE']
|
|
19
|
-
}.to_json
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
get '/multiple-headers' do
|
|
23
|
-
[200, { 'Set-Cookie' => %w[ foo bar ], 'Content-Type' => 'text/plain' }, ['']]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
get '/cookies-test' do
|
|
27
|
-
[200, { 'Set-Cookie' => %w(foo=bar bar=foo), 'Content-Type' => 'text/plain' }, ['']]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
get '/cookies-test2' do
|
|
31
|
-
[200, { 'Set-Cookie' => %w(foo2=bar bar2=foo), 'Content-Type' => 'text/plain' }, ['']]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
get '/fail/:number' do
|
|
35
|
-
if fail_count >= params[:number].to_i
|
|
36
|
-
"ok"
|
|
37
|
-
else
|
|
38
|
-
fail_count += 1
|
|
39
|
-
error 500, "oh noes!"
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
get '/fail_forever' do
|
|
44
|
-
error 500, "oh noes!"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
get '/redirect' do
|
|
48
|
-
redirect '/'
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
get '/bad_redirect' do
|
|
52
|
-
redirect '/bad_redirect'
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
get '/auth_basic/:username/:password' do
|
|
56
|
-
@auth ||= Rack::Auth::Basic::Request.new(request.env)
|
|
57
|
-
# Check that we've got a basic auth, and that it's credentials match the ones
|
|
58
|
-
# provided in the request
|
|
59
|
-
if @auth.provided? && @auth.basic? && @auth.credentials == [ params[:username], params[:password] ]
|
|
60
|
-
# auth is valid - confirm it
|
|
61
|
-
true
|
|
62
|
-
else
|
|
63
|
-
# invalid auth - request the authentication
|
|
64
|
-
response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth")
|
|
65
|
-
throw(:halt, [401, "Not authorized\n"])
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
get '/auth_ntlm' do
|
|
70
|
-
# we're just checking for the existence if NTLM auth header here. It's validation
|
|
71
|
-
# is too troublesome and really doesn't bother is much, it's up to libcurl to make
|
|
72
|
-
# it valid
|
|
73
|
-
response['WWW-Authenticate'] = 'NTLM'
|
|
74
|
-
is_ntlm_auth = /^NTLM/ =~ request.env['HTTP_AUTHORIZATION']
|
|
75
|
-
true if is_ntlm_auth
|
|
76
|
-
throw(:halt, [401, "Not authorized\n"]) if !is_ntlm_auth
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
get '/gzipped' do
|
|
80
|
-
req_env = request.env.to_json
|
|
81
|
-
z = Zlib::Deflate.new
|
|
82
|
-
gzipped_env = z.deflate(req_env, Zlib::FINISH)
|
|
83
|
-
z.close
|
|
84
|
-
response['Content-Encoding'] = 'gzip'
|
|
85
|
-
gzipped_env
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
get '/**' do
|
|
89
|
-
sleep params["delay"].to_i if params.has_key?("delay")
|
|
90
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
head '/**' do
|
|
94
|
-
sleep params["delay"].to_i if params.has_key?("delay")
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
put '/**' do
|
|
98
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
post '/**' do
|
|
102
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
delete '/**' do
|
|
106
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
patch '/**' do
|
|
110
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
options '/**' do
|
|
114
|
-
request.env.merge!(:body => request.body.read).to_json
|
|
115
|
-
end
|
|
116
|
-
end
|
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("1.9.0")
|
|
2
|
-
require 'spec_helper'
|
|
3
|
-
require 'typhoeus/adapters/faraday'
|
|
4
|
-
|
|
5
|
-
describe Faraday::Adapter::Typhoeus do
|
|
6
|
-
let(:base_url) { "http://localhost:3001" }
|
|
7
|
-
let(:adapter) { described_class.new(nil) }
|
|
8
|
-
let(:request) { Typhoeus::Request.new(base_url) }
|
|
9
|
-
let(:conn) do
|
|
10
|
-
Faraday.new(:url => base_url) do |faraday|
|
|
11
|
-
faraday.adapter :typhoeus
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
let(:response) { conn.get("/") }
|
|
15
|
-
|
|
16
|
-
context "when parallel" do
|
|
17
|
-
it "returns a faraday response" do
|
|
18
|
-
response = nil
|
|
19
|
-
conn.in_parallel { response = conn.get("/") }
|
|
20
|
-
expect(response).to be_a(Faraday::Response)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "succeeds" do
|
|
24
|
-
response = nil
|
|
25
|
-
conn.in_parallel { response = conn.get("/") }
|
|
26
|
-
expect(response.status).to be(200)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context "when not parallel" do
|
|
31
|
-
it "returns a faraday response" do
|
|
32
|
-
expect(response).to be_a(Faraday::Response)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "succeeds" do
|
|
36
|
-
expect(response.status).to be(200)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
context "when a response is stubbed" do
|
|
41
|
-
before do
|
|
42
|
-
stub = Typhoeus::Response.new \
|
|
43
|
-
:code => 200,
|
|
44
|
-
:headers => { "Foo" => "2", "Bar" => "3" },
|
|
45
|
-
:body => "Hello",
|
|
46
|
-
:mock => true
|
|
47
|
-
|
|
48
|
-
Typhoeus.stub(base_url + '/').and_return(stub)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it 'stubs the status code' do
|
|
52
|
-
expect(response.status).to eq(200)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it 'stubs the response body' do
|
|
56
|
-
expect(response.body).to eq("Hello")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it 'stubs the headers' do
|
|
60
|
-
expect(response.headers).to eq("Foo" => "2", "Bar" => "3")
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
describe "#initialize" do
|
|
65
|
-
let(:request) { adapter.method(:typhoeus_request).call({}) }
|
|
66
|
-
|
|
67
|
-
context "when typhoeus request options specified" do
|
|
68
|
-
let(:adapter) { described_class.new(nil, { :forbid_reuse => true, :maxredirs => 1 }) }
|
|
69
|
-
|
|
70
|
-
it "should set option for request" do
|
|
71
|
-
expect(request.options[:forbid_reuse]).to be_truthy
|
|
72
|
-
expect(request.options[:maxredirs]).to eq(1)
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
describe "#perform_request" do
|
|
78
|
-
let(:env) { {} }
|
|
79
|
-
|
|
80
|
-
context "when body" do
|
|
81
|
-
let(:env) { { :body => double(:read => "body") } }
|
|
82
|
-
|
|
83
|
-
it "reads body" do
|
|
84
|
-
expect(adapter.method(:read_body).call(env)).to eq("body")
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
context "parallel_manager" do
|
|
89
|
-
context "when given" do
|
|
90
|
-
let(:env) { { :parallel_manager => double(:queue => true), :ssl => {}, :request => {} } }
|
|
91
|
-
|
|
92
|
-
it "uses" do
|
|
93
|
-
adapter.method(:perform_request).call(env)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
context "when not given" do
|
|
98
|
-
let(:env) { { :method => :get, :ssl => {}, :request => {} } }
|
|
99
|
-
|
|
100
|
-
it "falls back to single" do
|
|
101
|
-
expect(Typhoeus::Request).to receive(:new).and_return(double(:options => {}, :on_complete => [], :run => true))
|
|
102
|
-
adapter.method(:perform_request).call(env)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
describe "#request" do
|
|
109
|
-
let(:env) do
|
|
110
|
-
{ :url => "url", :method => :get, :body => "body", :request_headers => {}, :ssl => {}, :request => {} }
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
let(:request) { adapter.method(:request).call(env) }
|
|
114
|
-
|
|
115
|
-
it "returns request" do
|
|
116
|
-
expect(request).to be_a(Typhoeus::Request)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it "sets url" do
|
|
120
|
-
expect(request.base_url).to eq("url")
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it "sets http method" do
|
|
124
|
-
expect(request.original_options[:method]).to eq(:get)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it "sets body" do
|
|
128
|
-
expect(request.original_options[:body]).to eq("body")
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it "sets headers" do
|
|
132
|
-
expect(request.original_options[:headers]).to eq({})
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "sets on_complete callback" do
|
|
136
|
-
expect(request.on_complete.size).to eq(1)
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
context "when the connection failed" do
|
|
141
|
-
before do
|
|
142
|
-
stub = Typhoeus::Response.new \
|
|
143
|
-
:response_code => 0,
|
|
144
|
-
:return_code => 0,
|
|
145
|
-
:mock => true
|
|
146
|
-
|
|
147
|
-
Typhoeus.stub(base_url + '/').and_return(stub)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
context "when parallel" do
|
|
151
|
-
it "isn't successful" do
|
|
152
|
-
response = nil
|
|
153
|
-
conn.in_parallel { response = conn.get("/") }
|
|
154
|
-
expect(response.success?).to be_falsey
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "translates the response code into an error message" do
|
|
158
|
-
response = nil
|
|
159
|
-
conn.in_parallel { response = conn.get("/") }
|
|
160
|
-
expect(response.env[:typhoeus_return_message]).to eq("No error")
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
context "when not parallel" do
|
|
165
|
-
it "raises an error" do
|
|
166
|
-
expect { conn.get("/") }.to raise_error(Faraday::Error::ConnectionFailed, "No error")
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
describe "#configure_socket" do
|
|
172
|
-
let(:env) { { :request => { :bind => { :host => "interface" } } } }
|
|
173
|
-
|
|
174
|
-
before { adapter.method(:configure_socket).call(request, env) }
|
|
175
|
-
|
|
176
|
-
context "when host" do
|
|
177
|
-
it "sets interface" do
|
|
178
|
-
expect(request.options[:interface]).to eq("interface")
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
describe "#configure_timeout" do
|
|
184
|
-
before { adapter.method(:configure_timeout).call(request, env) }
|
|
185
|
-
|
|
186
|
-
context "when timeout" do
|
|
187
|
-
let(:env) { { :request => { :timeout => 1 } } }
|
|
188
|
-
|
|
189
|
-
it "sets timeout_ms" do
|
|
190
|
-
expect(request.options[:timeout_ms]).to eq(1000)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
context "when open_timeout" do
|
|
195
|
-
let(:env) { { :request => { :open_timeout => 1 } } }
|
|
196
|
-
|
|
197
|
-
it "sets connecttimeout_ms" do
|
|
198
|
-
expect(request.options[:connecttimeout_ms]).to eq(1000)
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
describe "#configure_proxy" do
|
|
204
|
-
before { adapter.method(:configure_proxy).call(request, env) }
|
|
205
|
-
|
|
206
|
-
context "when proxy" do
|
|
207
|
-
let(:env) { { :request => { :proxy => { :uri => double(:scheme => 'http', :host => "localhost", :port => "3001") } } } }
|
|
208
|
-
|
|
209
|
-
it "sets proxy" do
|
|
210
|
-
expect(request.options[:proxy]).to eq("http://localhost:3001")
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
context "when username and password" do
|
|
214
|
-
let(:env) do
|
|
215
|
-
{ :request => { :proxy => {
|
|
216
|
-
:uri => double(:scheme => 'http', :host => :a, :port => :b),
|
|
217
|
-
:user => "a",
|
|
218
|
-
:password => "b"
|
|
219
|
-
} } }
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
it "sets proxyuserpwd" do
|
|
223
|
-
expect(request.options[:proxyuserpwd]).to eq("a:b")
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
describe "#configure_ssl" do
|
|
230
|
-
before { adapter.method(:configure_ssl).call(request, env) }
|
|
231
|
-
|
|
232
|
-
context "when version" do
|
|
233
|
-
let(:env) { { :ssl => { :version => "a" } } }
|
|
234
|
-
|
|
235
|
-
it "sets sslversion" do
|
|
236
|
-
expect(request.options[:sslversion]).to eq("a")
|
|
237
|
-
end
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
context "when client_cert" do
|
|
241
|
-
let(:env) { { :ssl => { :client_cert => "a" } } }
|
|
242
|
-
|
|
243
|
-
it "sets sslcert" do
|
|
244
|
-
expect(request.options[:sslcert]).to eq("a")
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
context "when client_key" do
|
|
249
|
-
let(:env) { { :ssl => { :client_key => "a" } } }
|
|
250
|
-
|
|
251
|
-
it "sets sslkey" do
|
|
252
|
-
expect(request.options[:sslkey]).to eq("a")
|
|
253
|
-
end
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
context "when ca_file" do
|
|
257
|
-
let(:env) { { :ssl => { :ca_file => "a" } } }
|
|
258
|
-
|
|
259
|
-
it "sets cainfo" do
|
|
260
|
-
expect(request.options[:cainfo]).to eq("a")
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
context "when ca_path" do
|
|
265
|
-
let(:env) { { :ssl => { :ca_path => "a" } } }
|
|
266
|
-
|
|
267
|
-
it "sets capath" do
|
|
268
|
-
expect(request.options[:capath]).to eq("a")
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
context "when client_cert_passwd" do
|
|
273
|
-
let(:env) { { :ssl => { :client_cert_passwd => "a" } } }
|
|
274
|
-
|
|
275
|
-
it "sets keypasswd to the value of client_cert_passwd" do
|
|
276
|
-
expect(request.options[:keypasswd]).to eq("a")
|
|
277
|
-
end
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
context "when client_certificate_password" do
|
|
281
|
-
let(:env) { { :ssl => { :client_certificate_password => "a" } } }
|
|
282
|
-
|
|
283
|
-
it "sets keypasswd to the value of client_cert_passwd" do
|
|
284
|
-
expect(request.options[:keypasswd]).to eq("a")
|
|
285
|
-
end
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
context "when no client_cert_passwd" do
|
|
289
|
-
let(:env) { { :ssl => { } } }
|
|
290
|
-
|
|
291
|
-
it "does not set keypasswd on options" do
|
|
292
|
-
expect(request.options).not_to have_key :keypasswd
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
context "when verify is false" do
|
|
297
|
-
let(:env) { { :ssl => { :verify => false } } }
|
|
298
|
-
|
|
299
|
-
it "sets ssl_verifyhost to 0" do
|
|
300
|
-
expect(request.options[:ssl_verifyhost]).to eq(0)
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
it "sets ssl_verifypeer to false" do
|
|
304
|
-
expect(request.options[:ssl_verifypeer]).to be_falsey
|
|
305
|
-
end
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
context "when verify is true" do
|
|
309
|
-
let(:env) { { :ssl => { :verify => true } } }
|
|
310
|
-
|
|
311
|
-
it "sets ssl_verifyhost to 2" do
|
|
312
|
-
expect(request.options[:ssl_verifyhost]).to eq(2)
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "sets ssl_verifypeer to true" do
|
|
316
|
-
expect(request.options[:ssl_verifypeer]).to be_truthy
|
|
317
|
-
end
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
describe "#parallel?" do
|
|
322
|
-
context "when parallel_manager" do
|
|
323
|
-
let(:env) { { :parallel_manager => true } }
|
|
324
|
-
|
|
325
|
-
it "returns true" do
|
|
326
|
-
expect(adapter.method(:parallel?).call(env)).to be_truthy
|
|
327
|
-
end
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
context "when no parallel_manager" do
|
|
331
|
-
let(:env) { { :parallel_manager => nil } }
|
|
332
|
-
|
|
333
|
-
it "returns false" do
|
|
334
|
-
expect(adapter.method(:parallel?).call(env)).to be_falsey
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("1.9.0")
|
|
2
|
-
require 'dalli'
|
|
3
|
-
require 'typhoeus/cache/dalli'
|
|
4
|
-
require 'spec_helper'
|
|
5
|
-
|
|
6
|
-
describe Typhoeus::Cache::Dalli do
|
|
7
|
-
let(:dalli) { instance_double(Dalli::Client) }
|
|
8
|
-
let(:cache) { Typhoeus::Cache::Dalli.new(dalli) }
|
|
9
|
-
|
|
10
|
-
let(:base_url) { "localhost:3001" }
|
|
11
|
-
let(:request) { Typhoeus::Request.new(base_url, {:method => :get}) }
|
|
12
|
-
let(:response) { Typhoeus::Response.new(:response_code => 0, :return_code => 0, :mock => true) }
|
|
13
|
-
|
|
14
|
-
describe "#set" do
|
|
15
|
-
it "sends the request to Dalli" do
|
|
16
|
-
expect(dalli).to receive(:set).with(request.cache_key, response, nil)
|
|
17
|
-
|
|
18
|
-
cache.set(request, response)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe "#get" do
|
|
23
|
-
it "returns nil when the key is not in the cache" do
|
|
24
|
-
expect(dalli).to receive(:get).with(request.cache_key).and_return(nil)
|
|
25
|
-
|
|
26
|
-
expect(cache.get(request)).to be_nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "returns the cached response when the key is in cache" do
|
|
30
|
-
expect(dalli).to receive(:get).with(request.cache_key).and_return(response)
|
|
31
|
-
|
|
32
|
-
result = cache.get(request)
|
|
33
|
-
expect(result).to_not be_nil
|
|
34
|
-
expect(result.response_code).to eq(response.response_code)
|
|
35
|
-
expect(result.return_code).to eq(response.return_code)
|
|
36
|
-
expect(result.headers).to eq(response.headers)
|
|
37
|
-
expect(result.body).to eq(response.body)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
require 'redis'
|
|
2
|
-
require 'typhoeus/cache/redis'
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe Typhoeus::Cache::Redis do
|
|
6
|
-
let(:redis) { instance_double(Redis) }
|
|
7
|
-
let(:cache) { Typhoeus::Cache::Redis.new(redis) }
|
|
8
|
-
|
|
9
|
-
let(:base_url) { "localhost:3001" }
|
|
10
|
-
let(:request) { Typhoeus::Request.new(base_url, {:method => :get}) }
|
|
11
|
-
let(:response) { Typhoeus::Response.new(:response_code => 0, :return_code => 0, :mock => true) }
|
|
12
|
-
let(:serialized_response) { Marshal.dump(response) }
|
|
13
|
-
|
|
14
|
-
describe "#set" do
|
|
15
|
-
it "sends the serialized request to Redis" do
|
|
16
|
-
expect(redis).to receive(:set).with(request.cache_key, serialized_response)
|
|
17
|
-
expect(redis).to_not receive(:expire).with(request.cache_key, request.cache_ttl)
|
|
18
|
-
|
|
19
|
-
cache.set(request, response)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe "#get" do
|
|
24
|
-
it "returns nil when the key is not in Redis" do
|
|
25
|
-
expect(redis).to receive(:get).with(request.cache_key).and_return(nil)
|
|
26
|
-
|
|
27
|
-
expect(cache.get(request)).to be_nil
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "returns the cached response when the key is in Redis" do
|
|
31
|
-
expect(redis).to receive(:get).with(request.cache_key).and_return(serialized_response)
|
|
32
|
-
|
|
33
|
-
result = cache.get(request)
|
|
34
|
-
expect(result).to_not be_nil
|
|
35
|
-
expect(result.response_code).to eq(response.response_code)
|
|
36
|
-
expect(result.return_code).to eq(response.return_code)
|
|
37
|
-
expect(result.headers).to eq(response.headers)
|
|
38
|
-
expect(result.body).to eq(response.body)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Typhoeus::Config do
|
|
4
|
-
let(:config) { Typhoeus::Config }
|
|
5
|
-
|
|
6
|
-
[:block_connection, :memoize, :verbose, :cache, :user_agent, :proxy].each do |name|
|
|
7
|
-
it "responds to #{name}" do
|
|
8
|
-
expect(config).to respond_to(name)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "responds to #{name}=" do
|
|
12
|
-
expect(config).to respond_to("#{name}=")
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Typhoeus::EasyFactory do
|
|
4
|
-
let(:base_url) { "http://localhost:3001" }
|
|
5
|
-
let(:hydra) { Typhoeus::Hydra.new(:max_concurrency => 1) }
|
|
6
|
-
let(:options) { {} }
|
|
7
|
-
let(:request) { Typhoeus::Request.new(base_url, options) }
|
|
8
|
-
let(:easy_factory) { described_class.new(request, hydra) }
|
|
9
|
-
|
|
10
|
-
describe "#get" do
|
|
11
|
-
context "when option[:cache_ttl]" do
|
|
12
|
-
let(:options) { {:cache_ttl => 1} }
|
|
13
|
-
|
|
14
|
-
it "creates Ethon::Easy" do
|
|
15
|
-
expect(easy_factory.get).to be_a(Ethon::Easy)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
context "timeouts" do
|
|
20
|
-
it "sets nosignal to true by default" do
|
|
21
|
-
expect(easy_factory.easy).to receive(:http_request).with(anything(), anything(), hash_including(:nosignal => true))
|
|
22
|
-
easy_factory.get
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
context "when timeout is not a whole number and timeout_ms is not set" do
|
|
26
|
-
let(:options) { {:timeout => 0.1} }
|
|
27
|
-
it "ceils timeout and sets timeout_ms" do
|
|
28
|
-
expect(easy_factory.easy).to receive(:http_request).with(anything(), anything(), hash_including(:timeout_ms => 100, :timeout => 1))
|
|
29
|
-
easy_factory.get
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
context "when timeout is not a whole number and timeout_ms is set" do
|
|
34
|
-
let(:options) { {:timeout => 0.1, :timeout_ms => 123} }
|
|
35
|
-
it "ceils timeout and does not change timeout_ms" do
|
|
36
|
-
expect(easy_factory.easy).to receive(:http_request).with(anything(), anything(), hash_including(:timeout_ms => 123, :timeout => 1))
|
|
37
|
-
easy_factory.get
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
context "when connecttimeout is not a whole number and connecttimeout_ms is not set" do
|
|
42
|
-
let(:options) { {:connecttimeout => 0.1} }
|
|
43
|
-
it "ceils connecttimeout and sets connecttimeout_ms" do
|
|
44
|
-
expect(easy_factory.easy).to receive(:http_request).with(anything(), anything(), hash_including(:connecttimeout_ms => 100, :connecttimeout => 1))
|
|
45
|
-
easy_factory.get
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
context "when connecttimeout is not a whole number and connecttimeout_ms is set" do
|
|
50
|
-
let(:options) { {:connecttimeout => 0.1, :connecttimeout_ms => 123} }
|
|
51
|
-
it "ceils connecttimeout and does not change connecttimeout_ms" do
|
|
52
|
-
expect(easy_factory.easy).to receive(:http_request).with(anything(), anything(), hash_including(:connecttimeout_ms => 123, :connecttimeout => 1))
|
|
53
|
-
easy_factory.get
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
context "when invalid option" do
|
|
61
|
-
let(:options) { {:invalid => 1} }
|
|
62
|
-
|
|
63
|
-
it "reraises" do
|
|
64
|
-
expect{ easy_factory.get }.to raise_error(Ethon::Errors::InvalidOption)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
context "when removed option" do
|
|
69
|
-
let(:options) { {:cache_timeout => 1} }
|
|
70
|
-
|
|
71
|
-
it "reraises with help" do
|
|
72
|
-
expect{ easy_factory.get }.to raise_error(
|
|
73
|
-
Ethon::Errors::InvalidOption, /The option cache_timeout was removed/
|
|
74
|
-
)
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
context "when changed option" do
|
|
79
|
-
let(:options) { {:proxy_auth_method => 1} }
|
|
80
|
-
|
|
81
|
-
it "reraises with help" do
|
|
82
|
-
expect{ easy_factory.get }.to raise_error(
|
|
83
|
-
Ethon::Errors::InvalidOption, /Please try proxyauth instead of proxy_auth_method/
|
|
84
|
-
)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
context "when renamed option" do
|
|
89
|
-
let(:options) { {:connect_timeout => 1} }
|
|
90
|
-
|
|
91
|
-
it "warns" do
|
|
92
|
-
expect(easy_factory).to receive(:warn).with(
|
|
93
|
-
"Deprecated option connect_timeout. Please use connecttimeout instead."
|
|
94
|
-
)
|
|
95
|
-
easy_factory.get
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "passes correct option" do
|
|
99
|
-
expect(easy_factory).to receive(:warn)
|
|
100
|
-
expect(easy_factory.easy).to receive(:connecttimeout=).with(1)
|
|
101
|
-
easy_factory.get
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
describe "#set_callback" do
|
|
107
|
-
it "sets easy.on_progress callback when an on_progress callback is provided" do
|
|
108
|
-
request.on_progress { 1 }
|
|
109
|
-
expect(easy_factory.easy).to receive(:on_progress)
|
|
110
|
-
easy_factory.send(:set_callback)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "sets easy.on_complete callback" do
|
|
114
|
-
expect(easy_factory.easy).to receive(:on_complete)
|
|
115
|
-
easy_factory.send(:set_callback)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "finishes request" do
|
|
119
|
-
easy_factory.send(:set_callback)
|
|
120
|
-
expect(request).to receive(:finish)
|
|
121
|
-
easy_factory.easy.complete
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it "resets easy" do
|
|
125
|
-
easy_factory.send(:set_callback)
|
|
126
|
-
expect(easy_factory.easy).to receive(:reset)
|
|
127
|
-
easy_factory.easy.complete
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "pushes easy back into the pool" do
|
|
131
|
-
easy_factory.send(:set_callback)
|
|
132
|
-
easy_factory.easy.complete
|
|
133
|
-
expect(Typhoeus::Pool.send(:easies)).to include(easy_factory.easy)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it "adds next request" do
|
|
137
|
-
easy_factory.hydra.instance_variable_set(:@queued_requests, [request])
|
|
138
|
-
expect(easy_factory.hydra).to receive(:add).with(request)
|
|
139
|
-
easy_factory.send(:set_callback)
|
|
140
|
-
easy_factory.easy.complete
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
end
|