httpi 4.0.3 → 4.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/httpi/version.rb +1 -1
  4. metadata +2 -50
  5. data/.devcontainer/devcontainer.json +0 -22
  6. data/.github/workflows/development.yml +0 -49
  7. data/.gitignore +0 -11
  8. data/.rspec +0 -1
  9. data/Gemfile +0 -22
  10. data/Rakefile +0 -18
  11. data/httpi.gemspec +0 -40
  12. data/spec/fixtures/attachment.gif +0 -0
  13. data/spec/fixtures/client_cert.pem +0 -20
  14. data/spec/fixtures/client_key.pem +0 -27
  15. data/spec/fixtures/xml.gz +0 -0
  16. data/spec/fixtures/xml.xml +0 -10
  17. data/spec/fixtures/xml_dime.dime +0 -0
  18. data/spec/fixtures/xml_dime.xml +0 -1
  19. data/spec/httpi/adapter/base_spec.rb +0 -23
  20. data/spec/httpi/adapter/curb_spec.rb +0 -351
  21. data/spec/httpi/adapter/em_http_spec.rb +0 -180
  22. data/spec/httpi/adapter/excon_spec.rb +0 -34
  23. data/spec/httpi/adapter/http_spec.rb +0 -28
  24. data/spec/httpi/adapter/httpclient_spec.rb +0 -238
  25. data/spec/httpi/adapter/net_http_persistent_spec.rb +0 -46
  26. data/spec/httpi/adapter/net_http_spec.rb +0 -54
  27. data/spec/httpi/adapter/rack_spec.rb +0 -109
  28. data/spec/httpi/adapter_spec.rb +0 -68
  29. data/spec/httpi/auth/config_spec.rb +0 -163
  30. data/spec/httpi/auth/ssl_spec.rb +0 -216
  31. data/spec/httpi/cookie_spec.rb +0 -36
  32. data/spec/httpi/cookie_store_spec.rb +0 -26
  33. data/spec/httpi/error_spec.rb +0 -43
  34. data/spec/httpi/httpi_spec.rb +0 -382
  35. data/spec/httpi/request_spec.rb +0 -290
  36. data/spec/httpi/response_spec.rb +0 -146
  37. data/spec/integration/curb_spec.rb +0 -140
  38. data/spec/integration/em_http_spec.rb +0 -108
  39. data/spec/integration/excon_spec.rb +0 -174
  40. data/spec/integration/fixtures/ca_all.pem +0 -19
  41. data/spec/integration/fixtures/server.cert +0 -19
  42. data/spec/integration/fixtures/server.key +0 -27
  43. data/spec/integration/http_spec.rb +0 -156
  44. data/spec/integration/httpclient_spec.rb +0 -137
  45. data/spec/integration/net_http_persistent_spec.rb +0 -171
  46. data/spec/integration/net_http_spec.rb +0 -282
  47. data/spec/integration/support/application.rb +0 -88
  48. data/spec/integration/support/server.rb +0 -83
  49. data/spec/spec_helper.rb +0 -23
  50. data/spec/support/error_helper.rb +0 -26
  51. data/spec/support/fixture.rb +0 -27
  52. data/spec/support/matchers.rb +0 -19
@@ -1,351 +0,0 @@
1
- require "spec_helper"
2
- require "httpi/adapter/curb"
3
- require "httpi/request"
4
-
5
- require "integration/support/server"
6
-
7
- # curb does not run on jruby
8
- unless RUBY_PLATFORM =~ /java/
9
- HTTPI::Adapter.load_adapter(:curb)
10
-
11
- describe "NTLM authentication" do
12
- before :all do
13
- @server = IntegrationServer.run
14
- end
15
-
16
- after :all do
17
- @server.stop
18
- end
19
-
20
- it "supports ntlm authentication" do
21
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
22
- adapter = HTTPI::Adapter::Curb.new(request)
23
-
24
- request.auth.ntlm("tester", "vReqSoafRe5O")
25
- expect(adapter.request(:get).body).to eq("ntlm-auth")
26
- end
27
- end
28
-
29
- describe HTTPI::Adapter::Curb do
30
-
31
- let(:adapter) { HTTPI::Adapter::Curb.new(request) }
32
- let(:curb) { Curl::Easy.any_instance }
33
- let(:request) { HTTPI::Request.new("http://example.com") }
34
-
35
- describe "#request(:get)" do
36
- before do
37
- curb.expects(:http_get)
38
- curb.expects(:response_code).returns(200)
39
- curb.expects(:header_str).returns("Accept-encoding: utf-8")
40
- curb.expects(:body_str).returns(Fixture.xml)
41
- end
42
-
43
- it "returns a valid HTTPI::Response" do
44
- expect(adapter.request(:get)).to match_response(:body => Fixture.xml)
45
- end
46
- end
47
-
48
- describe "#request(:post)" do
49
- before do
50
- curb.expects(:http_post)
51
- curb.expects(:response_code).returns(200)
52
- curb.expects(:header_str).returns("Accept-encoding: utf-8")
53
- curb.expects(:body_str).returns(Fixture.xml)
54
- end
55
-
56
- it "returns a valid HTTPI::Response" do
57
- expect(adapter.request(:post)).to match_response(:body => Fixture.xml)
58
- end
59
- end
60
-
61
- describe "#request(:post)" do
62
- it "sends the body in the request" do
63
- curb.expects(:http_post).with("xml=hi&name=123")
64
-
65
- request.body = "xml=hi&name=123"
66
- adapter.request(:post)
67
- end
68
- end
69
-
70
- describe "#request(:head)" do
71
- before do
72
- curb.expects(:http_head)
73
- curb.expects(:response_code).returns(200)
74
- curb.expects(:header_str).returns("Accept-encoding: utf-8")
75
- curb.expects(:body_str).returns(Fixture.xml)
76
- end
77
-
78
- it "returns a valid HTTPI::Response" do
79
- expect(adapter.request(:head)).to match_response(:body => Fixture.xml)
80
- end
81
- end
82
-
83
- describe "#request(:put)" do
84
- before do
85
- curb.expects(:http_put)
86
- curb.expects(:response_code).returns(200)
87
- curb.expects(:header_str).returns("Accept-encoding: utf-8")
88
- curb.expects(:body_str).returns(Fixture.xml)
89
- end
90
-
91
- it "returns a valid HTTPI::Response" do
92
- expect(adapter.request(:put)).to match_response(:body => Fixture.xml)
93
- end
94
- end
95
-
96
- describe "#request(:put)" do
97
- it "sends the body in the request" do
98
- curb.expects(:http_put).with('xml=hi&name=123')
99
-
100
- request.body = 'xml=hi&name=123'
101
- adapter.request(:put)
102
- end
103
- end
104
-
105
- describe "#request(:delete)" do
106
- before do
107
- curb.expects(:http_delete)
108
- curb.expects(:response_code).returns(200)
109
- curb.expects(:header_str).returns("Accept-encoding: utf-8")
110
- curb.expects(:body_str).returns("")
111
- end
112
-
113
- it "returns a valid HTTPI::Response" do
114
- expect(adapter.request(:delete)).to match_response(:body => "")
115
- end
116
- end
117
-
118
- describe "#request(:custom)" do
119
- it "raises a NotSupportedError" do
120
- expect { adapter.request(:custom) }.
121
- to raise_error(HTTPI::NotSupportedError, "Curb does not support custom HTTP methods")
122
- end
123
- end
124
-
125
- describe "settings:" do
126
- before { curb.stubs(:http_get) }
127
-
128
- describe "url" do
129
- it "always sets the request url" do
130
- curb.expects(:url=).with(request.url.to_s)
131
- adapter.request(:get)
132
- end
133
- end
134
-
135
- describe "proxy_url" do
136
- it "is not set unless it's specified" do
137
- curb.expects(:proxy_url=).never
138
- adapter.request(:get)
139
- end
140
-
141
- it "is set if specified" do
142
- request.proxy = "http://proxy.example.com"
143
- curb.expects(:proxy_url=).with(request.proxy.to_s)
144
-
145
- adapter.request(:get)
146
- end
147
- end
148
-
149
- describe "timeout_ms" do
150
- it "is not set unless it's specified" do
151
- curb.expects(:timeout_ms=).never
152
- adapter.request(:get)
153
- end
154
-
155
- it "is set if specified read_timeout" do
156
- request.read_timeout = 30
157
- curb.expects(:timeout_ms=).with(30_000)
158
-
159
- adapter.request(:get)
160
- end
161
-
162
- it "is set if specified write_timeout" do
163
- request.write_timeout = 30
164
- curb.expects(:timeout_ms=).with(30_000)
165
-
166
- adapter.request(:get)
167
- end
168
- end
169
-
170
- describe "connect_timeout_ms" do
171
- it "is not set unless it's specified" do
172
- curb.expects(:connect_timeout_ms=).never
173
- adapter.request(:get)
174
- end
175
-
176
- it "is set if specified" do
177
- request.open_timeout = 30
178
- curb.expects(:connect_timeout_ms=).with(30_000)
179
-
180
- adapter.request(:get)
181
- end
182
- end
183
-
184
- describe "headers" do
185
- it "is always set" do
186
- curb.expects(:headers=).with({})
187
- adapter.request(:get)
188
- end
189
- end
190
-
191
- describe "verbose" do
192
- it "is always set to false" do
193
- curb.expects(:verbose=).with(false)
194
- adapter.request(:get)
195
- end
196
- end
197
-
198
- describe "http_auth_types" do
199
- it "is set to :basic for HTTP basic auth" do
200
- request.auth.basic "username", "password"
201
- curb.expects(:http_auth_types=).with(:basic)
202
-
203
- adapter.request(:get)
204
- end
205
-
206
- it "is set to :digest for HTTP digest auth" do
207
- request.auth.digest "username", "password"
208
- curb.expects(:http_auth_types=).with(:digest)
209
-
210
- adapter.request(:get)
211
- end
212
-
213
- it "is set to :gssnegotiate for HTTP Negotiate auth" do
214
- request.auth.gssnegotiate
215
- curb.expects(:http_auth_types=).with(:gssnegotiate)
216
-
217
- adapter.request(:get)
218
- end
219
-
220
- it "is set to :ntlm for HTTP NTLM auth" do
221
- request.auth.ntlm("tester", "vReqSoafRe5O")
222
- curb.expects(:http_auth_types=).with(:ntlm)
223
-
224
- adapter.request(:get)
225
- end
226
- end
227
-
228
- describe "username and password" do
229
- it "is set for HTTP basic auth" do
230
- request.auth.basic "username", "password"
231
-
232
- curb.expects(:username=).with("username")
233
- curb.expects(:password=).with("password")
234
- adapter.request(:get)
235
- end
236
-
237
- it "is set for HTTP digest auth" do
238
- request.auth.digest "username", "password"
239
-
240
- curb.expects(:username=).with("username")
241
- curb.expects(:password=).with("password")
242
- adapter.request(:get)
243
- end
244
- end
245
-
246
- context "(for SSL without auth)" do
247
- let(:request) do
248
- request = HTTPI::Request.new("http://example.com")
249
- request.ssl = true
250
- request
251
- end
252
-
253
- it 'sets ssl_cipher_list' do
254
- request.auth.ssl.ciphers = ["AES128"]
255
- curb.expects(:set).with(any_parameters).at_least(1)
256
- curb.expects(:set).with(:ssl_cipher_list, anything)
257
- adapter.request(:get)
258
- end
259
-
260
- context 'sets ssl_version' do
261
- it 'defaults to nil when no ssl_version is specified' do
262
- curb.expects(:ssl_version=).with(nil)
263
- adapter.request(:get)
264
- end
265
-
266
- it 'to 1 when ssl_version is specified as TLSv1' do
267
- request.auth.ssl.ssl_version = :TLSv1
268
- curb.expects(:ssl_version=).with(1)
269
-
270
- adapter.request(:get)
271
- end
272
-
273
- it 'to 2 when ssl_version is specified as SSLv2/SSLv23' do
274
- version = HTTPI::Auth::SSL::SSL_VERSIONS.select { |method| method.to_s.match(/SSLv2|SSLv23/) }.first
275
- request.auth.ssl.ssl_version = version
276
- curb.expects(:ssl_version=).with(2)
277
-
278
- adapter.request(:get)
279
- end
280
-
281
- it 'to 3 when ssl_version is specified as SSLv3' do
282
- request.auth.ssl.ssl_version = :SSLv3
283
- curb.expects(:ssl_version=).with(3)
284
-
285
- adapter.request(:get)
286
- end
287
- end
288
- it 'raises error when min_version not nil' do
289
- request.auth.ssl.min_version = :TLS1_2
290
- expect{ adapter.request(:get) }.
291
- to raise_error(HTTPI::NotSupportedError, 'Curb adapter does not support #min_version or #max_version. Please, use #ssl_version instead.')
292
- end
293
- it 'raises error when max_version not nil' do
294
- request.auth.ssl.max_version = :TLS1_2
295
- expect{ adapter.request(:get) }.
296
- to raise_error(HTTPI::NotSupportedError, 'Curb adapter does not support #min_version or #max_version. Please, use #ssl_version instead.')
297
- end
298
- end
299
-
300
- context "(for SSL client auth)" do
301
- let(:request) do
302
- request = HTTPI::Request.new("http://example.com")
303
- request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem"
304
- request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
305
- request.auth.ssl.cert_key_password = 'example'
306
- request
307
- end
308
-
309
- it "send certificate regardless of state of SSL verify mode" do
310
- request.auth.ssl.verify_mode = :none
311
- curb.expects(:ssl_verify_host=).with(0) # avoid "SSL peer certificate" error
312
- curb.expects(:cert_key=).with(request.auth.ssl.cert_key_file)
313
- curb.expects(:cert=).with(request.auth.ssl.cert_file)
314
- curb.expects(:certpassword=).with(request.auth.ssl.cert_key_password)
315
-
316
- adapter.request(:get)
317
- end
318
-
319
- it "cert_key, cert and ssl_verify_peer should be set" do
320
- curb.expects(:cert_key=).with(request.auth.ssl.cert_key_file)
321
- curb.expects(:cert=).with(request.auth.ssl.cert_file)
322
- curb.expects(:certpassword=).with(request.auth.ssl.cert_key_password)
323
- curb.expects(:ssl_verify_peer=).with(true)
324
- curb.expects(:certtype=).with(request.auth.ssl.cert_type.to_s.upcase)
325
-
326
- adapter.request(:get)
327
- end
328
-
329
- it "sets the cert_type to DER if specified" do
330
- request.auth.ssl.cert_type = :der
331
- curb.expects(:certtype=).with(:der.to_s.upcase)
332
-
333
- adapter.request(:get)
334
- end
335
-
336
- it "raise if an invalid cert type was set" do
337
- expect { request.auth.ssl.cert_type = :invalid }.
338
- to raise_error(ArgumentError, "Invalid SSL cert type :invalid\nPlease specify one of [:pem, :der]")
339
- end
340
-
341
- it "sets the cacert if specified" do
342
- request.auth.ssl.ca_cert_file = "spec/fixtures/client_cert.pem"
343
- curb.expects(:cacert=).with(request.auth.ssl.ca_cert_file)
344
-
345
- adapter.request(:get)
346
- end
347
- end
348
- end
349
-
350
- end
351
- end
@@ -1,180 +0,0 @@
1
- require "spec_helper"
2
- require "httpi/adapter/em_http"
3
- require "httpi/request"
4
-
5
- unless RUBY_PLATFORM =~ /java/
6
- HTTPI::Adapter.load_adapter(:em_http)
7
-
8
- describe HTTPI::Adapter::EmHttpRequest do
9
-
10
- around(:each) do |example|
11
- EM.synchrony do
12
- example.run
13
- EM.stop
14
- end
15
- end
16
-
17
- let(:adapter) { HTTPI::Adapter::EmHttpRequest.new(request) }
18
- let(:em_http) { EventMachine::HttpConnection.any_instance }
19
- let(:request) { HTTPI::Request.new("http://example.com") }
20
-
21
- describe "#request(:get)" do
22
- it "returns a valid HTTPI::Response" do
23
- em_http.expects(:get).
24
- with(:query => nil, :head => {}, :body => nil).
25
- returns(http_message)
26
-
27
- expect(adapter.request(:get)).to match_response(:body => Fixture.xml)
28
- end
29
- end
30
-
31
- describe "#request(:post)" do
32
- it "returns a valid HTTPI::Response" do
33
- em_http.expects(:post).
34
- with(:query => nil, :head => {}, :body => Fixture.xml).
35
- returns(http_message)
36
-
37
- request.body = Fixture.xml
38
- expect(adapter.request(:post)).to match_response(:body => Fixture.xml)
39
- end
40
- end
41
-
42
- describe "#request(:head)" do
43
- it "returns a valid HTTPI::Response" do
44
- em_http.expects(:head).
45
- with(:query => nil, :head => {}, :body => nil).
46
- returns(http_message)
47
-
48
- expect(adapter.request(:head)).to match_response(:body => Fixture.xml)
49
- end
50
- end
51
-
52
- describe "#request(:put)" do
53
- it "returns a valid HTTPI::Response" do
54
- em_http.expects(:put).
55
- with(:query => nil, :head => {}, :body => Fixture.xml).
56
- returns(http_message)
57
-
58
- request.body = Fixture.xml
59
- expect(adapter.request(:put)).to match_response(:body => Fixture.xml)
60
- end
61
- end
62
-
63
- describe "#request(:delete)" do
64
- it "returns a valid HTTPI::Response" do
65
- em_http.expects(:delete).
66
- with(:query => nil, :head => {}, :body => nil).
67
- returns(http_message(""))
68
-
69
- expect(adapter.request(:delete)).to match_response(:body => "")
70
- end
71
- end
72
-
73
- describe "#request(:custom)" do
74
- it "returns a valid HTTPI::Response" do
75
- em_http.expects(:custom).
76
- with(:query => nil, :head => {}, :body => nil).
77
- returns(http_message(""))
78
-
79
- expect(adapter.request(:custom)).to match_response(:body => "")
80
- end
81
- end
82
-
83
- describe "settings:" do
84
- describe "proxy" do
85
- before do
86
- request.proxy = "http://proxy-host.com:443"
87
- request.proxy.user = "username"
88
- request.proxy.password = "password"
89
- end
90
-
91
- it "sets host, port and authorization" do
92
- url = "http://example.com:80"
93
- connection_options = {
94
- :proxy => {
95
- :host => "proxy-host.com",
96
- :port => 443,
97
- :authorization => ["username", "password"]
98
- }
99
- }
100
-
101
- EventMachine::HttpRequest.expects(:new).with(url, connection_options)
102
-
103
- adapter
104
- end
105
- end
106
-
107
- describe "connect_timeout" do
108
- it "is passed as a connection option" do
109
- request.open_timeout = 30
110
-
111
- url = "http://example.com:80"
112
- connection_options = { connect_timeout: 30 }
113
-
114
- EventMachine::HttpRequest.expects(:new).with(url, connection_options)
115
-
116
- adapter
117
- end
118
- end
119
-
120
- describe "receive_timeout" do
121
- it "is passed as a connection option (when read_timeout specified)" do
122
- request.read_timeout = 60
123
-
124
- url = "http://example.com:80"
125
- connection_options = { inactivity_timeout: 60 }
126
-
127
- EventMachine::HttpRequest.expects(:new).with(url, connection_options)
128
-
129
- adapter
130
- end
131
-
132
- it "is passed as a connection option (when write_timeout specified)" do
133
- request.write_timeout = 60
134
-
135
- url = "http://example.com:80"
136
- connection_options = { inactivity_timeout: 60 }
137
-
138
- EventMachine::HttpRequest.expects(:new).with(url, connection_options)
139
-
140
- adapter
141
- end
142
- end
143
-
144
- describe "set_auth" do
145
- it "is set for HTTP basic auth" do
146
- request.auth.basic "username", "password"
147
- em_http.expects(:get).once.with(has_entries(:head => { :authorization => %w( username password) })).returns(http_message)
148
- adapter.request(:get)
149
- end
150
-
151
- it "raises an error for HTTP digest auth" do
152
- request.auth.digest "username", "password"
153
- expect { adapter.request(:get) }.to raise_error HTTPI::NotSupportedError
154
- end
155
- end
156
-
157
- context "(for SSL client auth)" do
158
- before do
159
- request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem"
160
- request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
161
- end
162
-
163
- it "is not supported" do
164
- expect { adapter.request(:get) }.
165
- to raise_error(HTTPI::NotSupportedError, "EM-HTTP-Request does not support SSL client auth")
166
- end
167
- end
168
- end
169
-
170
- def http_message(body = Fixture.xml)
171
- message = EventMachine::HttpClient.new("http://example.com", {})
172
- message.instance_variable_set :@response, body
173
- message.instance_variable_set :@response_header, EventMachine::HttpResponseHeader.new
174
- message.response_header['Accept-encoding'] = 'utf-8'
175
- message.response_header.http_status = '200'
176
- message
177
- end
178
-
179
- end
180
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
- require "httpi/adapter/excon"
3
- require "httpi/request"
4
-
5
- begin
6
- HTTPI::Adapter.load_adapter(:excon)
7
-
8
- describe HTTPI::Adapter::Excon do
9
- let(:adapter) { HTTPI::Adapter::Excon.new(request) }
10
- let(:request) { HTTPI::Request.new("http://example.com") }
11
-
12
- describe "settings" do
13
- describe "connect_timeout, read_timeout, write_timeout" do
14
- it "are passed as connection options" do
15
- request.open_timeout = 30
16
- request.read_timeout = 40
17
- request.write_timeout = 50
18
-
19
- expect(adapter.client.data).to include(
20
- connect_timeout: 30,
21
- read_timeout: 40,
22
- write_timeout: 50
23
- )
24
- end
25
- end
26
- describe "host, hostname" do
27
- it "both are set" do
28
- Excon.expects(:display_warning).never
29
- expect(adapter.client.data).to include(host: 'example.com', hostname: 'example.com')
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
- require "httpi/adapter/http"
3
- require "httpi/request"
4
-
5
- begin
6
- HTTPI::Adapter.load_adapter(:http)
7
-
8
- describe HTTPI::Adapter::HTTP do
9
- let(:adapter) { HTTPI::Adapter::HTTP.new(request) }
10
- let(:request) { HTTPI::Request.new("http://example.com") }
11
-
12
- describe "settings" do
13
- describe "connect_timeout, read_timeout, write_timeout" do
14
- it "are being set on the client" do
15
- request.open_timeout = 30
16
- request.read_timeout = 40
17
- request.write_timeout = 50
18
-
19
- expect(adapter.client.default_options.timeout_options).to eq(
20
- connect_timeout: 30,
21
- read_timeout: 40,
22
- write_timeout: 50
23
- )
24
- end
25
- end
26
- end
27
- end
28
- end