httpi 1.1.1 → 2.0.0.rc1
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/.gitignore +2 -0
- data/.rvmrc +1 -0
- data/CHANGELOG.md +51 -26
- data/Gemfile +6 -4
- data/README.md +19 -205
- data/httpi.gemspec +7 -10
- data/lib/httpi.rb +54 -56
- data/lib/httpi/adapter.rb +25 -18
- data/lib/httpi/adapter/base.rb +35 -0
- data/lib/httpi/adapter/curb.rb +59 -60
- data/lib/httpi/adapter/em_http.rb +126 -0
- data/lib/httpi/adapter/httpclient.rb +33 -63
- data/lib/httpi/adapter/net_http.rb +44 -62
- data/lib/httpi/auth/ssl.rb +26 -2
- data/lib/httpi/dime.rb +45 -29
- data/lib/httpi/request.rb +1 -1
- data/lib/httpi/response.rb +6 -4
- data/lib/httpi/version.rb +1 -1
- data/spec/httpi/adapter/base_spec.rb +23 -0
- data/spec/httpi/adapter/curb_spec.rb +107 -67
- data/spec/httpi/adapter/em_http_spec.rb +168 -0
- data/spec/httpi/adapter/httpclient_spec.rb +67 -56
- data/spec/httpi/adapter/net_http_spec.rb +62 -47
- data/spec/httpi/adapter_spec.rb +15 -2
- data/spec/httpi/auth/ssl_spec.rb +34 -1
- data/spec/httpi/httpi_spec.rb +80 -115
- data/spec/integration/fixtures/ca.pem +23 -0
- data/spec/integration/fixtures/ca_all.pem +44 -0
- data/spec/integration/fixtures/htdigest +1 -0
- data/spec/integration/fixtures/htpasswd +2 -0
- data/spec/integration/fixtures/server.cert +19 -0
- data/spec/integration/fixtures/server.key +15 -0
- data/spec/integration/fixtures/subca.pem +21 -0
- data/spec/integration/request_spec.rb +15 -2
- data/spec/integration/ssl_server.rb +70 -0
- data/spec/integration/ssl_spec.rb +102 -0
- data/spec/support/fixture.rb +1 -1
- metadata +60 -73
@@ -0,0 +1,168 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "httpi/adapter/em_http"
|
3
|
+
require "httpi/request"
|
4
|
+
|
5
|
+
begin
|
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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => nil).
|
25
|
+
returns(http_message)
|
26
|
+
|
27
|
+
adapter.request(:get).should 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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => Fixture.xml).
|
35
|
+
returns(http_message)
|
36
|
+
|
37
|
+
request.body = Fixture.xml
|
38
|
+
adapter.request(:post).should 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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => nil).
|
46
|
+
returns(http_message)
|
47
|
+
|
48
|
+
adapter.request(:head).should 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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => Fixture.xml).
|
56
|
+
returns(http_message)
|
57
|
+
|
58
|
+
request.body = Fixture.xml
|
59
|
+
adapter.request(:put).should 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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => nil).
|
67
|
+
returns(http_message(""))
|
68
|
+
|
69
|
+
adapter.request(:delete).should 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, :connect_timeout => nil, :inactivity_timeout => nil, :head => {}, :body => nil).
|
77
|
+
returns(http_message(""))
|
78
|
+
|
79
|
+
adapter.request(:custom).should 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
|
+
em_http.expects(:get).once.
|
93
|
+
with(has_entries(:proxy => { :host => "proxy-host.com", :port => 443, :authorization => %w( username password ) })).
|
94
|
+
returns(http_message)
|
95
|
+
|
96
|
+
adapter.request(:get)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "connect_timeout" do
|
101
|
+
it "is not set unless specified" do
|
102
|
+
em_http.expects(:get).once.with(has_entries(:connect_timeout => nil)).returns(http_message)
|
103
|
+
adapter.request(:get)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "is set if specified" do
|
107
|
+
request.open_timeout = 30
|
108
|
+
em_http.expects(:get).once.with(has_entries(:connect_timeout => 30)).returns(http_message)
|
109
|
+
adapter.request(:get)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "receive_timeout" do
|
114
|
+
it "is not set unless specified" do
|
115
|
+
em_http.expects(:get).once.with(has_entries(:inactivity_timeout => nil)).returns(http_message)
|
116
|
+
adapter.request(:get)
|
117
|
+
end
|
118
|
+
|
119
|
+
it "is set if specified" do
|
120
|
+
request.read_timeout = 30
|
121
|
+
em_http.expects(:get).once.with(has_entries(:inactivity_timeout => 30)).returns(http_message)
|
122
|
+
adapter.request(:get)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "set_auth" do
|
127
|
+
it "is set for HTTP basic auth" do
|
128
|
+
request.auth.basic "username", "password"
|
129
|
+
em_http.expects(:get).once.with(has_entries(:head => { :authorization => %w( username password) })).returns(http_message)
|
130
|
+
adapter.request(:get)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "raises an error for HTTP digest auth" do
|
134
|
+
request.auth.digest "username", "password"
|
135
|
+
expect { adapter.request(:get) }.to raise_error
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context "(for SSL client auth)" do
|
140
|
+
before do
|
141
|
+
request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem"
|
142
|
+
request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
|
143
|
+
end
|
144
|
+
|
145
|
+
it "is not supported" do
|
146
|
+
expect { adapter.request(:get) }.
|
147
|
+
to raise_error(HTTPI::NotSupportedError, "EM-HTTP-Request does not support SSL client auth")
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def http_message(body = Fixture.xml)
|
153
|
+
message = EventMachine::HttpClient.new("http://example.com", {})
|
154
|
+
message.instance_variable_set :@response, body
|
155
|
+
message.instance_variable_set :@response_header, EventMachine::HttpResponseHeader.new
|
156
|
+
message.response_header['Accept-encoding'] = 'utf-8'
|
157
|
+
message.response_header.http_status = '200'
|
158
|
+
message
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
rescue LoadError => e
|
163
|
+
if e.message =~ /fiber/
|
164
|
+
warn "LoadError: #{e.message} (EventMachine requires fibers)"
|
165
|
+
else
|
166
|
+
raise e
|
167
|
+
end
|
168
|
+
end
|
@@ -2,54 +2,62 @@ require "spec_helper"
|
|
2
2
|
require "httpi/adapter/httpclient"
|
3
3
|
require "httpi/request"
|
4
4
|
|
5
|
-
|
5
|
+
HTTPI::Adapter.load_adapter(:httpclient)
|
6
6
|
|
7
7
|
describe HTTPI::Adapter::HTTPClient do
|
8
|
-
let(:adapter)
|
8
|
+
let(:adapter) { HTTPI::Adapter::HTTPClient.new(request) }
|
9
9
|
let(:httpclient) { HTTPClient.any_instance }
|
10
10
|
let(:ssl_config) { HTTPClient::SSLConfig.any_instance }
|
11
|
+
let(:request) { HTTPI::Request.new("http://example.com") }
|
11
12
|
|
12
|
-
describe "#get" do
|
13
|
+
describe "#request(:get)" do
|
13
14
|
it "returns a valid HTTPI::Response" do
|
14
|
-
|
15
|
-
adapter.get
|
15
|
+
httpclient_expects(:get)
|
16
|
+
adapter.request(:get).should match_response(:body => Fixture.xml)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
describe "#post" do
|
20
|
+
describe "#request(:post)" do
|
20
21
|
it "returns a valid HTTPI::Response" do
|
21
|
-
request
|
22
|
-
|
22
|
+
request.body = Fixture.xml
|
23
|
+
httpclient_expects(:post)
|
23
24
|
|
24
|
-
adapter.post
|
25
|
+
adapter.request(:post).should match_response(:body => Fixture.xml)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
describe "#head" do
|
29
|
+
describe "#request(:head)" do
|
29
30
|
it "returns a valid HTTPI::Response" do
|
30
|
-
|
31
|
-
adapter.head
|
31
|
+
httpclient_expects(:head)
|
32
|
+
adapter.request(:head).should match_response(:body => Fixture.xml)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
|
-
describe "#put" do
|
36
|
+
describe "#request(:put)" do
|
36
37
|
it "returns a valid HTTPI::Response" do
|
37
|
-
request
|
38
|
-
|
38
|
+
request.body = Fixture.xml
|
39
|
+
httpclient_expects(:put)
|
39
40
|
|
40
|
-
adapter.put
|
41
|
+
adapter.request(:put).should match_response(:body => Fixture.xml)
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
|
-
describe "#delete" do
|
45
|
+
describe "#request(:delete)" do
|
45
46
|
it "returns a valid HTTPI::Response" do
|
46
|
-
|
47
|
-
adapter.delete
|
47
|
+
httpclient_expects(:delete)
|
48
|
+
adapter.request(:delete).should match_response(:body => Fixture.xml)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#request(:custom)" do
|
53
|
+
it "returns a valid HTTPI::Response" do
|
54
|
+
httpclient_expects(:custom)
|
55
|
+
adapter.request(:custom).should match_response(:body => Fixture.xml)
|
48
56
|
end
|
49
57
|
end
|
50
58
|
|
51
59
|
describe "settings:" do
|
52
|
-
before { httpclient.stubs(:
|
60
|
+
before { httpclient.stubs(:request).returns(http_message) }
|
53
61
|
|
54
62
|
describe "proxy" do
|
55
63
|
it "have should specs"
|
@@ -58,107 +66,110 @@ describe HTTPI::Adapter::HTTPClient do
|
|
58
66
|
describe "connect_timeout" do
|
59
67
|
it "is not set unless specified" do
|
60
68
|
httpclient.expects(:connect_timeout=).never
|
61
|
-
adapter.get
|
69
|
+
adapter.request(:get)
|
62
70
|
end
|
63
71
|
|
64
72
|
it "is set if specified" do
|
65
|
-
request
|
73
|
+
request.open_timeout = 30
|
66
74
|
|
67
75
|
httpclient.expects(:connect_timeout=).with(30)
|
68
|
-
adapter.get
|
76
|
+
adapter.request(:get)
|
69
77
|
end
|
70
78
|
end
|
71
79
|
|
72
80
|
describe "receive_timeout" do
|
73
81
|
it "is not set unless specified" do
|
74
82
|
httpclient.expects(:receive_timeout=).never
|
75
|
-
adapter.get
|
83
|
+
adapter.request(:get)
|
76
84
|
end
|
77
85
|
|
78
86
|
it "is set if specified" do
|
79
|
-
request
|
87
|
+
request.read_timeout = 30
|
80
88
|
|
81
89
|
httpclient.expects(:receive_timeout=).with(30)
|
82
|
-
adapter.get
|
90
|
+
adapter.request(:get)
|
83
91
|
end
|
84
92
|
end
|
85
93
|
|
86
94
|
describe "set_auth" do
|
87
95
|
it "is set for HTTP basic auth" do
|
88
|
-
request
|
96
|
+
request.auth.basic "username", "password"
|
89
97
|
|
90
98
|
httpclient.expects(:set_auth).with(request.url, *request.auth.credentials)
|
91
|
-
adapter.get
|
99
|
+
adapter.request(:get)
|
92
100
|
end
|
93
101
|
|
94
102
|
it "is set for HTTP digest auth" do
|
95
|
-
request
|
103
|
+
request.auth.digest "username", "password"
|
96
104
|
|
97
105
|
httpclient.expects(:set_auth).with(request.url, *request.auth.credentials)
|
98
|
-
adapter.get
|
106
|
+
adapter.request(:get)
|
99
107
|
end
|
100
108
|
end
|
101
109
|
|
102
110
|
context "(for SSL client auth)" do
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
|
107
|
-
end
|
111
|
+
before do
|
112
|
+
request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem"
|
113
|
+
request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
|
108
114
|
end
|
109
115
|
|
110
116
|
it "client_cert, client_key and verify_mode should be set" do
|
111
|
-
ssl_config.expects(:client_cert=).with(
|
112
|
-
ssl_config.expects(:client_key=).with(
|
113
|
-
ssl_config.expects(:verify_mode=).with(
|
117
|
+
ssl_config.expects(:client_cert=).with(request.auth.ssl.cert)
|
118
|
+
ssl_config.expects(:client_key=).with(request.auth.ssl.cert_key)
|
119
|
+
ssl_config.expects(:verify_mode=).with(request.auth.ssl.openssl_verify_mode)
|
114
120
|
|
115
|
-
adapter.get
|
121
|
+
adapter.request(:get)
|
116
122
|
end
|
117
123
|
|
118
124
|
it "sets the client_ca if specified" do
|
119
|
-
|
120
|
-
ssl_config.expects(:
|
125
|
+
request.auth.ssl.ca_cert_file = "spec/fixtures/client_cert.pem"
|
126
|
+
ssl_config.expects(:add_trust_ca).with(request.auth.ssl.ca_cert_file)
|
121
127
|
|
122
|
-
adapter.get
|
128
|
+
adapter.request(:get)
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'should set the ssl_version if specified' do
|
132
|
+
request.auth.ssl.ssl_version = :SSLv3
|
133
|
+
ssl_config.expects(:ssl_version=).with(request.auth.ssl.ssl_version)
|
134
|
+
|
135
|
+
adapter.request(:get)
|
123
136
|
end
|
124
137
|
end
|
125
138
|
|
126
139
|
context "(for SSL client auth with a verify mode of :none with no certs provided)" do
|
127
|
-
|
128
|
-
|
129
|
-
request.auth.ssl.verify_mode = :none
|
130
|
-
end
|
140
|
+
before do
|
141
|
+
request.auth.ssl.verify_mode = :none
|
131
142
|
end
|
132
143
|
|
133
144
|
it "verify_mode should be set" do
|
134
|
-
ssl_config.expects(:verify_mode=).with(
|
145
|
+
ssl_config.expects(:verify_mode=).with(request.auth.ssl.openssl_verify_mode)
|
135
146
|
|
136
|
-
adapter.get
|
147
|
+
adapter.request(:get)
|
137
148
|
end
|
138
149
|
|
139
150
|
it "does not set client_cert and client_key "do
|
140
151
|
ssl_config.expects(:client_cert=).never
|
141
152
|
ssl_config.expects(:client_key=).never
|
142
153
|
|
143
|
-
adapter.get
|
154
|
+
adapter.request(:get)
|
144
155
|
end
|
145
156
|
|
146
157
|
it "does not raise an exception" do
|
147
|
-
expect { adapter.get
|
158
|
+
expect { adapter.request(:get) }.to_not raise_error
|
148
159
|
end
|
149
160
|
end
|
150
161
|
end
|
151
162
|
|
163
|
+
def httpclient_expects(method)
|
164
|
+
httpclient.expects(:request).
|
165
|
+
with(method, request.url, nil, request.body, request.headers).
|
166
|
+
returns(http_message)
|
167
|
+
end
|
168
|
+
|
152
169
|
def http_message(body = Fixture.xml)
|
153
170
|
message = HTTP::Message.new_response body
|
154
171
|
message.header.set "Accept-encoding", "utf-8"
|
155
172
|
message
|
156
173
|
end
|
157
174
|
|
158
|
-
def basic_request
|
159
|
-
request = HTTPI::Request.new "http://example.com"
|
160
|
-
yield request if block_given?
|
161
|
-
request
|
162
|
-
end
|
163
|
-
|
164
175
|
end
|
@@ -2,133 +2,148 @@ require "spec_helper"
|
|
2
2
|
require "httpi/adapter/net_http"
|
3
3
|
require "httpi/request"
|
4
4
|
|
5
|
+
HTTPI::Adapter.load_adapter(:net_http)
|
6
|
+
|
5
7
|
describe HTTPI::Adapter::NetHTTP do
|
6
|
-
|
8
|
+
|
9
|
+
let(:net_http) { Net::HTTP.any_instance }
|
10
|
+
let(:request) { HTTPI::Request.new("http://example.com") }
|
7
11
|
let(:basic_response) { { :body => Fixture.xml, :headers => { "Accept-encoding" => "utf-8" } } }
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
let(:adapter) {
|
14
|
+
HTTPI::Adapter::NetHTTP.new(request)
|
15
|
+
}
|
12
16
|
|
13
|
-
describe "#get" do
|
17
|
+
describe "#request(:get)" do
|
14
18
|
it "should return a valid HTTPI::Response" do
|
15
|
-
stub_request(:get,
|
16
|
-
adapter(
|
19
|
+
stub_request(:get, request.url.to_s).to_return(basic_response)
|
20
|
+
adapter.request(:get).should match_response(:body => Fixture.xml)
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
20
|
-
describe "#post" do
|
24
|
+
describe "#request(:post)" do
|
21
25
|
it "should return a valid HTTPI::Response" do
|
22
|
-
request
|
26
|
+
request.body = Fixture.xml
|
23
27
|
stub_request(:post, request.url.to_s).with(:body => request.body).to_return(basic_response)
|
24
28
|
|
25
|
-
adapter(
|
29
|
+
adapter.request(:post).should match_response(:body => Fixture.xml)
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
|
-
describe "#head" do
|
33
|
+
describe "#request(:head)" do
|
30
34
|
it "should return a valid HTTPI::Response" do
|
31
|
-
stub_request(:head,
|
32
|
-
adapter(
|
35
|
+
stub_request(:head, request.url.to_s).to_return(basic_response)
|
36
|
+
adapter.request(:head).should match_response(:body => Fixture.xml)
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
36
|
-
describe "#put" do
|
40
|
+
describe "#request(:put)" do
|
37
41
|
it "should return a valid HTTPI::Response" do
|
38
|
-
request
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
)
|
42
|
+
request.url = "http://example.com"
|
43
|
+
request.headers = { "Accept-encoding" => "utf-8" }
|
44
|
+
request.body = Fixture.xml
|
45
|
+
|
43
46
|
stub_request(:put, request.url.to_s).with(:body => request.body).to_return(basic_response)
|
44
47
|
|
45
|
-
adapter(
|
48
|
+
adapter.request(:put).should match_response(:body => Fixture.xml)
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
49
|
-
describe "#delete" do
|
52
|
+
describe "#request(:delete)" do
|
50
53
|
it "should return a valid HTTPI::Response" do
|
51
|
-
stub_request(:delete,
|
52
|
-
adapter(
|
54
|
+
stub_request(:delete, request.url.to_s).to_return(basic_response)
|
55
|
+
adapter.request(:delete).should match_response(:body => Fixture.xml)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#request(:custom)" do
|
60
|
+
it "raises a NotSupportedError" do
|
61
|
+
expect { adapter.request(:custom) }.
|
62
|
+
to raise_error(HTTPI::NotSupportedError, "Net::HTTP does not support custom HTTP methods")
|
53
63
|
end
|
54
64
|
end
|
55
65
|
|
56
66
|
describe "settings:" do
|
57
|
-
before { stub_request(:get,
|
67
|
+
before { stub_request(:get, request.url.to_s) }
|
58
68
|
|
59
69
|
describe "use_ssl" do
|
60
70
|
it "should be set to false for non-SSL requests" do
|
61
71
|
net_http.expects(:use_ssl=).with(false)
|
62
|
-
adapter(
|
72
|
+
adapter.request(:get)
|
63
73
|
end
|
64
74
|
|
65
75
|
it "should be set to true for SSL requests" do
|
66
|
-
request
|
76
|
+
request.ssl = true
|
67
77
|
|
68
78
|
net_http.expects(:use_ssl=).with(true)
|
69
|
-
adapter(
|
79
|
+
adapter.request(:get)
|
70
80
|
end
|
71
81
|
end
|
72
82
|
|
73
83
|
describe "open_timeout" do
|
74
84
|
it "should not be set if not specified" do
|
75
85
|
net_http.expects(:open_timeout=).never
|
76
|
-
adapter(
|
86
|
+
adapter.request(:get)
|
77
87
|
end
|
78
88
|
|
79
89
|
it "should be set if specified" do
|
80
|
-
request
|
90
|
+
request.open_timeout = 30
|
81
91
|
|
82
92
|
net_http.expects(:open_timeout=).with(30)
|
83
|
-
adapter(
|
93
|
+
adapter.request(:get)
|
84
94
|
end
|
85
95
|
end
|
86
96
|
|
87
97
|
describe "read_timeout" do
|
88
98
|
it "should not be set if not specified" do
|
89
99
|
net_http.expects(:read_timeout=).never
|
90
|
-
adapter(
|
100
|
+
adapter.request(:get)
|
91
101
|
end
|
92
102
|
|
93
103
|
it "should be set if specified" do
|
94
|
-
request
|
104
|
+
request.read_timeout = 30
|
95
105
|
|
96
106
|
net_http.expects(:read_timeout=).with(30)
|
97
|
-
adapter(
|
107
|
+
adapter.request(:get)
|
98
108
|
end
|
99
109
|
end
|
100
110
|
|
101
111
|
describe "basic_auth" do
|
102
112
|
it "should be set for HTTP basic auth" do
|
103
|
-
request
|
113
|
+
request.auth.basic "username", "password"
|
104
114
|
|
105
115
|
stub_request(:get, "http://username:password@example.com")
|
106
116
|
Net::HTTP::Get.any_instance.expects(:basic_auth).with(*request.auth.credentials)
|
107
|
-
adapter(
|
117
|
+
adapter.request(:get)
|
108
118
|
end
|
109
119
|
end
|
110
120
|
|
111
121
|
context "(for SSL client auth)" do
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
|
116
|
-
end
|
122
|
+
before do
|
123
|
+
request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem"
|
124
|
+
request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem"
|
117
125
|
end
|
118
126
|
|
119
127
|
it "key, cert and verify_mode should be set" do
|
120
|
-
net_http.expects(:cert=).with(
|
121
|
-
net_http.expects(:key=).with(
|
122
|
-
net_http.expects(:verify_mode=).with(
|
128
|
+
net_http.expects(:cert=).with(request.auth.ssl.cert)
|
129
|
+
net_http.expects(:key=).with(request.auth.ssl.cert_key)
|
130
|
+
net_http.expects(:verify_mode=).with(request.auth.ssl.openssl_verify_mode)
|
123
131
|
|
124
|
-
adapter(
|
132
|
+
adapter.request(:get)
|
125
133
|
end
|
126
134
|
|
127
135
|
it "should set the client_ca if specified" do
|
128
|
-
|
129
|
-
net_http.expects(:ca_file=).with(
|
136
|
+
request.auth.ssl.ca_cert_file = "spec/fixtures/client_cert.pem"
|
137
|
+
net_http.expects(:ca_file=).with(request.auth.ssl.ca_cert_file)
|
138
|
+
|
139
|
+
adapter.request(:get)
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should set the ssl_version if specified' do
|
143
|
+
request.auth.ssl.ssl_version = :SSLv3
|
144
|
+
net_http.expects(:ssl_version=).with(request.auth.ssl.ssl_version)
|
130
145
|
|
131
|
-
adapter(
|
146
|
+
adapter.request(:get)
|
132
147
|
end
|
133
148
|
end
|
134
149
|
end
|