esod-client 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/VERSION +1 -1
  2. data/command_line_options.rb +3 -6
  3. data/esod-client.gemspec +29 -27
  4. data/lib/esod_client/esod_client.rb +2 -2
  5. data/lib/rest-client-1.4.2/README.rdoc +243 -0
  6. data/lib/rest-client-1.4.2/Rakefile +60 -0
  7. data/lib/rest-client-1.4.2/VERSION +1 -0
  8. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/bin/restclient +0 -0
  9. data/lib/rest-client-1.4.2/history.md +54 -0
  10. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/rest_client.rb +0 -0
  11. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient.rb +77 -21
  12. data/lib/rest-client-1.4.2/lib/restclient/abstract_response.rb +87 -0
  13. data/lib/rest-client-1.4.2/lib/restclient/exceptions.rb +146 -0
  14. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient/net_http_ext.rb +0 -0
  15. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient/payload.rb +15 -12
  16. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient/raw_response.rb +7 -6
  17. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient/request.rb +61 -89
  18. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/lib/restclient/resource.rb +11 -10
  19. data/lib/rest-client-1.4.2/lib/restclient/response.rb +46 -0
  20. data/lib/{rest-client-1.2.0/spec/mixin/response_spec.rb → rest-client-1.4.2/spec/abstract_response_spec.rb} +3 -12
  21. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/base.rb +0 -0
  22. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/exceptions_spec.rb +23 -9
  23. data/lib/rest-client-1.4.2/spec/integration_spec.rb +38 -0
  24. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/master_shake.jpg +0 -0
  25. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/payload_spec.rb +20 -6
  26. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/raw_response_spec.rb +1 -1
  27. data/lib/rest-client-1.4.2/spec/request_spec.rb +518 -0
  28. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/resource_spec.rb +24 -0
  29. data/lib/rest-client-1.4.2/spec/response_spec.rb +130 -0
  30. data/lib/{rest-client-1.2.0 → rest-client-1.4.2}/spec/restclient_spec.rb +21 -11
  31. metadata +38 -29
  32. data/lib/rest-client-1.2.0/README.rdoc +0 -102
  33. data/lib/rest-client-1.2.0/Rakefile +0 -57
  34. data/lib/rest-client-1.2.0/VERSION +0 -1
  35. data/lib/rest-client-1.2.0/lib/restclient/exceptions.rb +0 -89
  36. data/lib/rest-client-1.2.0/lib/restclient/mixin/response.rb +0 -48
  37. data/lib/rest-client-1.2.0/lib/restclient/response.rb +0 -20
  38. data/lib/rest-client-1.2.0/spec/request_spec.rb +0 -521
  39. data/lib/rest-client-1.2.0/spec/response_spec.rb +0 -21
@@ -1 +0,0 @@
1
- 1.2.0
@@ -1,89 +0,0 @@
1
- module RestClient
2
- # This is the base RestClient exception class. Rescue it if you want to
3
- # catch any exception that your request might raise
4
- class Exception < RuntimeError
5
- def message(default=nil)
6
- self.class::ErrorMessage
7
- end
8
- end
9
-
10
- # Base RestClient exception when there's a response available
11
- class ExceptionWithResponse < Exception
12
- attr_accessor :response
13
-
14
- def initialize(response=nil)
15
- @response = response
16
- end
17
-
18
- def http_code
19
- @response.code.to_i if @response
20
- end
21
-
22
- def http_body
23
- RestClient::Request.decode(@response['content-encoding'], @response.body) if @response
24
- end
25
- end
26
-
27
- # A redirect was encountered; caught by execute to retry with the new url.
28
- class Redirect < Exception
29
- ErrorMessage = "Redirect"
30
-
31
- attr_accessor :url
32
-
33
- def initialize(url)
34
- @url = url
35
- end
36
- end
37
-
38
- class NotModified < ExceptionWithResponse
39
- ErrorMessage = 'NotModified'
40
- end
41
-
42
- # Authorization is required to access the resource specified.
43
- class Unauthorized < ExceptionWithResponse
44
- ErrorMessage = 'Unauthorized'
45
- end
46
-
47
- # No resource was found at the given URL.
48
- class ResourceNotFound < ExceptionWithResponse
49
- ErrorMessage = 'Resource not found'
50
- end
51
-
52
- # The server broke the connection prior to the request completing. Usually
53
- # this means it crashed, or sometimes that your network connection was
54
- # severed before it could complete.
55
- class ServerBrokeConnection < Exception
56
- ErrorMessage = 'Server broke connection'
57
- end
58
-
59
- # The server took too long to respond.
60
- class RequestTimeout < Exception
61
- ErrorMessage = 'Request timed out'
62
- end
63
-
64
- # The request failed, meaning the remote HTTP server returned a code other
65
- # than success, unauthorized, or redirect.
66
- #
67
- # The exception message attempts to extract the error from the XML, using
68
- # format returned by Rails: <errors><error>some message</error></errors>
69
- #
70
- # You can get the status code by e.http_code, or see anything about the
71
- # response via e.response. For example, the entire result body (which is
72
- # probably an HTML error page) is e.response.body.
73
- class RequestFailed < ExceptionWithResponse
74
- def message
75
- "HTTP status code #{http_code}"
76
- end
77
-
78
- def to_s
79
- message
80
- end
81
- end
82
- end
83
-
84
- # backwards compatibility
85
- class RestClient::Request
86
- Redirect = RestClient::Redirect
87
- Unauthorized = RestClient::Unauthorized
88
- RequestFailed = RestClient::RequestFailed
89
- end
@@ -1,48 +0,0 @@
1
- module RestClient
2
- module Mixin
3
- module Response
4
- attr_reader :net_http_res
5
-
6
- # HTTP status code, always 200 since RestClient throws exceptions for
7
- # other codes.
8
- def code
9
- @code ||= @net_http_res.code.to_i
10
- end
11
-
12
- # A hash of the headers, beautified with symbols and underscores.
13
- # e.g. "Content-type" will become :content_type.
14
- def headers
15
- @headers ||= self.class.beautify_headers(@net_http_res.to_hash)
16
- end
17
-
18
- # The raw headers.
19
- def raw_headers
20
- @raw_headers ||= @net_http_res.to_hash
21
- end
22
-
23
- # Hash of cookies extracted from response headers
24
- def cookies
25
- @cookies ||= (self.headers[:set_cookie] || "").split('; ').inject({}) do |out, raw_c|
26
- key, val = raw_c.split('=')
27
- unless %w(expires domain path secure).member?(key)
28
- out[key] = val
29
- end
30
- out
31
- end
32
- end
33
-
34
- def self.included(receiver)
35
- receiver.extend(RestClient::Mixin::Response::ClassMethods)
36
- end
37
-
38
- module ClassMethods
39
- def beautify_headers(headers)
40
- headers.inject({}) do |out, (key, value)|
41
- out[key.gsub(/-/, '_').downcase.to_sym] = value.first
42
- out
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,20 +0,0 @@
1
- require File.dirname(__FILE__) + '/mixin/response'
2
-
3
- module RestClient
4
- # The response from RestClient looks like a string, but is actually one of
5
- # these. 99% of the time you're making a rest call all you care about is
6
- # the body, but on the occassion you want to fetch the headers you can:
7
- #
8
- # RestClient.get('http://example.com').headers[:content_type]
9
- #
10
- class Response < String
11
-
12
- include RestClient::Mixin::Response
13
-
14
- def initialize(string, net_http_res)
15
- @net_http_res = net_http_res
16
- super(string || "")
17
- end
18
-
19
- end
20
- end
@@ -1,521 +0,0 @@
1
- require File.dirname(__FILE__) + '/base'
2
-
3
- describe RestClient::Request do
4
- before do
5
- @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload')
6
-
7
- @uri = mock("uri")
8
- @uri.stub!(:request_uri).and_return('/resource')
9
- @uri.stub!(:host).and_return('some')
10
- @uri.stub!(:port).and_return(80)
11
-
12
- @net = mock("net::http base")
13
- @http = mock("net::http connection")
14
- Net::HTTP.stub!(:new).and_return(@net)
15
- @net.stub!(:start).and_yield(@http)
16
- @net.stub!(:use_ssl=)
17
- @net.stub!(:verify_mode=)
18
- RestClient.log = 'test.log'
19
- end
20
-
21
- it "accept */* mimetype, preferring xml" do
22
- @request.default_headers[:accept].should == '*/*; q=0.5, application/xml'
23
- end
24
-
25
- it "decodes an uncompressed result body by passing it straight through" do
26
- RestClient::Request.decode(nil, 'xyz').should == 'xyz'
27
- end
28
-
29
- it "decodes a gzip body" do
30
- RestClient::Request.decode('gzip', "\037\213\b\b\006'\252H\000\003t\000\313T\317UH\257\312,HM\341\002\000G\242(\r\v\000\000\000").should == "i'm gziped\n"
31
- end
32
-
33
- it "ingores gzip for empty bodies" do
34
- RestClient::Request.decode('gzip', '').should be_empty
35
- end
36
-
37
- it "decodes a deflated body" do
38
- RestClient::Request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363").should == "some deflated text"
39
- end
40
-
41
- it "processes a successful result" do
42
- res = mock("result")
43
- res.stub!(:code).and_return("200")
44
- res.stub!(:body).and_return('body')
45
- res.stub!(:[]).with('content-encoding').and_return(nil)
46
- @request.process_result(res).should == 'body'
47
- end
48
-
49
- it "doesn't classify successful requests as failed" do
50
- 203.upto(206) do |code|
51
- res = mock("result")
52
- res.stub!(:code).and_return(code.to_s)
53
- res.stub!(:body).and_return("")
54
- res.stub!(:[]).with('content-encoding').and_return(nil)
55
- @request.process_result(res).should be_empty
56
- end
57
- end
58
-
59
- it "parses a url into a URI object" do
60
- URI.should_receive(:parse).with('http://example.com/resource')
61
- @request.parse_url('http://example.com/resource')
62
- end
63
-
64
- it "adds http:// to the front of resources specified in the syntax example.com/resource" do
65
- URI.should_receive(:parse).with('http://example.com/resource')
66
- @request.parse_url('example.com/resource')
67
- end
68
-
69
- it "extracts the username and password when parsing http://user:password@example.com/" do
70
- URI.stub!(:parse).and_return(mock('uri', :user => 'joe', :password => 'pass1'))
71
- @request.parse_url_with_auth('http://joe:pass1@example.com/resource')
72
- @request.user.should == 'joe'
73
- @request.password.should == 'pass1'
74
- end
75
-
76
- it "doesn't overwrite user and password (which may have already been set by the Resource constructor) if there is no user/password in the url" do
77
- URI.stub!(:parse).and_return(mock('uri', :user => nil, :password => nil))
78
- @request = RestClient::Request.new(:method => 'get', :url => 'example.com', :user => 'beth', :password => 'pass2')
79
- @request.parse_url_with_auth('http://example.com/resource')
80
- @request.user.should == 'beth'
81
- @request.password.should == 'pass2'
82
- end
83
-
84
- it "correctly formats cookies provided to the constructor" do
85
- URI.stub!(:parse).and_return(mock('uri', :user => nil, :password => nil))
86
- @request = RestClient::Request.new(:method => 'get', :url => 'example.com', :cookies => {:session_id => '1' })
87
- @request.should_receive(:default_headers).and_return({'foo' => 'bar'})
88
- headers = @request.make_headers({}).should == { 'Foo' => 'bar', 'Cookie' => 'session_id=1'}
89
- end
90
-
91
- it "determines the Net::HTTP class to instantiate by the method name" do
92
- @request.net_http_request_class(:put).should == Net::HTTP::Put
93
- end
94
-
95
- it "merges user headers with the default headers" do
96
- @request.should_receive(:default_headers).and_return({ '1' => '2' })
97
- headers = @request.make_headers('3' => '4')
98
- headers.should have_key('1')
99
- headers['1'].should == '2'
100
- headers.should have_key('3')
101
- headers['3'].should == '4'
102
- end
103
-
104
- it "prefers the user header when the same header exists in the defaults" do
105
- @request.should_receive(:default_headers).and_return({ '1' => '2' })
106
- headers = @request.make_headers('1' => '3')
107
- headers.should have_key('1')
108
- headers['1'].should == '3'
109
- end
110
-
111
- it "converts header symbols from :content_type to 'Content-type'" do
112
- @request.should_receive(:default_headers).and_return({})
113
- headers = @request.make_headers(:content_type => 'abc')
114
- headers.should have_key('Content-type')
115
- headers['Content-type'].should == 'abc'
116
- end
117
-
118
- it "converts content-type from extension to real content-type" do
119
- @request.should_receive(:default_headers).and_return({})
120
- headers = @request.make_headers(:content_type => 'json')
121
- headers.should have_key('Content-type')
122
- headers['Content-type'].should == 'application/json'
123
- end
124
-
125
- it "converts accept from extension(s) to real content-type(s)" do
126
- @request.should_receive(:default_headers).and_return({})
127
- headers = @request.make_headers(:accept => 'json, mp3')
128
- headers.should have_key('Accept')
129
- headers['Accept'].should == 'application/json, audio/mpeg'
130
-
131
- @request.should_receive(:default_headers).and_return({})
132
- headers = @request.make_headers(:accept => :json)
133
- headers.should have_key('Accept')
134
- headers['Accept'].should == 'application/json'
135
- end
136
-
137
- it "converts header values to strings" do
138
- @request.make_headers('A' => 1)['A'].should == '1'
139
- end
140
-
141
- it "executes by constructing the Net::HTTP object, headers, and payload and calling transmit" do
142
- @request.should_receive(:parse_url_with_auth).with('http://some/resource').and_return(@uri)
143
- klass = mock("net:http class")
144
- @request.should_receive(:net_http_request_class).with(:put).and_return(klass)
145
- klass.should_receive(:new).and_return('result')
146
- @request.should_receive(:transmit).with(@uri, 'result', kind_of(RestClient::Payload::Base))
147
- @request.execute_inner
148
- end
149
-
150
- it "transmits the request with Net::HTTP" do
151
- @http.should_receive(:request).with('req', 'payload')
152
- @request.should_receive(:process_result)
153
- @request.should_receive(:response_log)
154
- @request.transmit(@uri, 'req', 'payload')
155
- end
156
-
157
- it "uses SSL when the URI refers to a https address" do
158
- @uri.stub!(:is_a?).with(URI::HTTPS).and_return(true)
159
- @net.should_receive(:use_ssl=).with(true)
160
- @http.stub!(:request)
161
- @request.stub!(:process_result)
162
- @request.stub!(:response_log)
163
- @request.transmit(@uri, 'req', 'payload')
164
- end
165
-
166
- it "sends nil payloads" do
167
- @http.should_receive(:request).with('req', nil)
168
- @request.should_receive(:process_result)
169
- @request.stub!(:response_log)
170
- @request.transmit(@uri, 'req', nil)
171
- end
172
-
173
- it "passes non-hash payloads straight through" do
174
- @request.process_payload("x").should == "x"
175
- end
176
-
177
- it "converts a hash payload to urlencoded data" do
178
- @request.process_payload(:a => 'b c+d').should == "a=b%20c%2Bd"
179
- end
180
-
181
- it "accepts nested hashes in payload" do
182
- payload = @request.process_payload(:user => { :name => 'joe', :location => { :country => 'USA', :state => 'CA' }})
183
- payload.should include('user[name]=joe')
184
- payload.should include('user[location][country]=USA')
185
- payload.should include('user[location][state]=CA')
186
- end
187
-
188
- it "set urlencoded content_type header on hash payloads" do
189
- @request.process_payload(:a => 1)
190
- @request.headers[:content_type].should == 'application/x-www-form-urlencoded'
191
- end
192
-
193
- it "sets up the credentials prior to the request" do
194
- @http.stub!(:request)
195
- @request.stub!(:process_result)
196
- @request.stub!(:response_log)
197
-
198
- @request.stub!(:user).and_return('joe')
199
- @request.stub!(:password).and_return('mypass')
200
- @request.should_receive(:setup_credentials).with('req')
201
-
202
- @request.transmit(@uri, 'req', nil)
203
- end
204
-
205
- it "does not attempt to send any credentials if user is nil" do
206
- @request.stub!(:user).and_return(nil)
207
- req = mock("request")
208
- req.should_not_receive(:basic_auth)
209
- @request.setup_credentials(req)
210
- end
211
-
212
- it "setup credentials when there's a user" do
213
- @request.stub!(:user).and_return('joe')
214
- @request.stub!(:password).and_return('mypass')
215
- req = mock("request")
216
- req.should_receive(:basic_auth).with('joe', 'mypass')
217
- @request.setup_credentials(req)
218
- end
219
-
220
- it "catches EOFError and shows the more informative ServerBrokeConnection" do
221
- @http.stub!(:request).and_raise(EOFError)
222
- lambda { @request.transmit(@uri, 'req', nil) }.should raise_error(RestClient::ServerBrokeConnection)
223
- end
224
-
225
- it "execute calls execute_inner" do
226
- @request.should_receive(:execute_inner)
227
- @request.execute
228
- end
229
-
230
- it "class method execute wraps constructor" do
231
- req = mock("rest request")
232
- RestClient::Request.should_receive(:new).with(1 => 2).and_return(req)
233
- req.should_receive(:execute)
234
- RestClient::Request.execute(1 => 2)
235
- end
236
-
237
- it "raises a Redirect with the new location when the response is in the 30x range" do
238
- res = mock('response', :code => '301', :header => { 'Location' => 'http://new/resource' })
239
- lambda { @request.process_result(res) }.should raise_error(RestClient::Redirect) { |e| e.url.should == 'http://new/resource'}
240
- end
241
-
242
- it "handles redirects with relative paths" do
243
- res = mock('response', :code => '301', :header => { 'Location' => 'index' })
244
- lambda { @request.process_result(res) }.should raise_error(RestClient::Redirect) { |e| e.url.should == 'http://some/index' }
245
- end
246
-
247
- it "handles redirects with absolute paths" do
248
- @request.instance_variable_set('@url', 'http://some/place/else')
249
- res = mock('response', :code => '301', :header => { 'Location' => '/index' })
250
- lambda { @request.process_result(res) }.should raise_error(RestClient::Redirect) { |e| e.url.should == 'http://some/index' }
251
- end
252
-
253
- it "uses GET and clears payload when following 30x redirects" do
254
- url = "http://example.com/redirected"
255
-
256
- @request.should_receive(:execute_inner).once.ordered.and_raise(RestClient::Redirect.new(url))
257
-
258
- @request.should_receive(:execute_inner).once.ordered do
259
- @request.url.should == url
260
- @request.method.should == :get
261
- @request.payload.should be_nil
262
- end
263
-
264
- @request.execute
265
- end
266
-
267
- it "raises Unauthorized when the response is 401" do
268
- res = mock('response', :code => '401')
269
- lambda { @request.process_result(res) }.should raise_error(RestClient::Unauthorized)
270
- end
271
-
272
- it "raises ResourceNotFound when the response is 404" do
273
- res = mock('response', :code => '404')
274
- lambda { @request.process_result(res) }.should raise_error(RestClient::ResourceNotFound)
275
- end
276
-
277
- it "raises RequestFailed otherwise" do
278
- res = mock('response', :code => '500')
279
- lambda { @request.process_result(res) }.should raise_error(RestClient::RequestFailed)
280
- end
281
-
282
- it "creates a proxy class if a proxy url is given" do
283
- RestClient.stub!(:proxy).and_return("http://example.com/")
284
- @request.net_http_class.should include(Net::HTTP::ProxyDelta)
285
- end
286
-
287
- it "creates a non-proxy class if a proxy url is not given" do
288
- @request.net_http_class.should_not include(Net::HTTP::ProxyDelta)
289
- end
290
-
291
- it "logs a get request" do
292
- ['RestClient.get "http://url", headers: {"Accept-encoding"=>"gzip, deflate", "Accept"=>"*/*; q=0.5, application/xml"}',
293
- 'RestClient.get "http://url", headers: {"Accept"=>"*/*; q=0.5, application/xml", "Accept-encoding"=>"gzip, deflate}'].should include
294
- RestClient::Request.new(:method => :get, :url => 'http://url').request_log
295
- end
296
-
297
- it "logs a post request with a small payload" do
298
- ['RestClient.post "http://url", headers: {"Accept-encoding"=>"gzip, deflate", "Content-Length"=>"3", "Accept"=>"*/*; q=0.5, application/xml"}, paylod: "foo"',
299
- 'RestClient.post "http://url", headers: {"Accept"=>"*/*; q=0.5, application/xml", "Accept-encoding"=>"gzip, deflate", "Content-Length"=>"3"}, paylod: "foo"'].should include
300
- RestClient::Request.new(:method => :post, :url => 'http://url', :payload => 'foo').request_log
301
- end
302
-
303
- it "logs a post request with a large payload" do
304
- ['RestClient.post "http://url", headers: {"Accept-encoding"=>"gzip, deflate", "Content-Length"=>"1000", "Accept"=>"*/*; q=0.5, application/xml"}, paylod: 1000 byte length',
305
- 'RestClient.post "http://url", headers: {"Accept"=>"*/*; q=0.5, application/xml", "Accept-encoding"=>"gzip, deflate", "Content-Length"=>"1000"}, paylod: 1000 byte length'].should include
306
- RestClient::Request.new(:method => :post, :url => 'http://url', :payload => ('x' * 1000)).request_log
307
- end
308
-
309
- it "logs input headers as a hash" do
310
- ['RestClient.get "http://url", headers: {"Accept-encoding"=>"gzip, deflate", "Accept"=>"text/plain"}',
311
- 'RestClient.get "http://url", headers: {"Accept"=>"text/plain", "Accept-encoding"=>"gzip, deflate"}'].should include
312
- RestClient::Request.new(:method => :get, :url => 'http://url', :headers => { :accept => 'text/plain' })
313
- end
314
-
315
- it "logs a response including the status code, content type, and result body size in bytes" do
316
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
317
- res.stub!(:[]).with('Content-type').and_return('text/html')
318
- @request.response_log(res).should == "# => 200 OK | text/html 4 bytes"
319
- end
320
-
321
- it "logs a response with a nil Content-type" do
322
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
323
- res.stub!(:[]).with('Content-type').and_return(nil)
324
- @request.response_log(res).should == "# => 200 OK | 4 bytes"
325
- end
326
-
327
- it "logs a response with a nil body" do
328
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => nil)
329
- res.stub!(:[]).with('Content-type').and_return('text/html; charset=utf-8')
330
- @request.response_log(res).should == "# => 200 OK | text/html 0 bytes"
331
- end
332
-
333
- it "strips the charset from the response content type" do
334
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
335
- res.stub!(:[]).with('Content-type').and_return('text/html; charset=utf-8')
336
- @request.response_log(res).should == "# => 200 OK | text/html 4 bytes"
337
- end
338
-
339
- it "displays the log to stdout" do
340
- RestClient.stub!(:log).and_return('stdout')
341
- STDOUT.should_receive(:puts).with('xyz')
342
- @request.display_log('xyz')
343
- end
344
-
345
- it "displays the log to stderr" do
346
- RestClient.stub!(:log).and_return('stderr')
347
- STDERR.should_receive(:puts).with('xyz')
348
- @request.display_log('xyz')
349
- end
350
-
351
- it "append the log to the requested filename" do
352
- RestClient.stub!(:log).and_return('/tmp/restclient.log')
353
- f = mock('file handle')
354
- File.should_receive(:open).with('/tmp/restclient.log', 'a').and_yield(f)
355
- f.should_receive(:puts).with('xyz')
356
- @request.display_log('xyz')
357
- end
358
-
359
- it "set read_timeout" do
360
- @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload', :timeout => 123)
361
- @http.stub!(:request)
362
- @request.stub!(:process_result)
363
- @request.stub!(:response_log)
364
-
365
- @net.should_receive(:read_timeout=).with(123)
366
-
367
- @request.transmit(@uri, 'req', nil)
368
- end
369
-
370
- it "set open_timeout" do
371
- @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload', :open_timeout => 123)
372
- @http.stub!(:request)
373
- @request.stub!(:process_result)
374
- @request.stub!(:response_log)
375
-
376
- @net.should_receive(:open_timeout=).with(123)
377
-
378
- @request.transmit(@uri, 'req', nil)
379
- end
380
-
381
- it "should default to not verifying ssl certificates" do
382
- @request.verify_ssl.should == false
383
- end
384
-
385
- it "should set net.verify_mode to OpenSSL::SSL::VERIFY_NONE if verify_ssl is false" do
386
- @net.should_receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
387
- @http.stub!(:request)
388
- @request.stub!(:process_result)
389
- @request.stub!(:response_log)
390
- @request.transmit(@uri, 'req', 'payload')
391
- end
392
-
393
- it "should not set net.verify_mode to OpenSSL::SSL::VERIFY_NONE if verify_ssl is true" do
394
- @request = RestClient::Request.new(:method => :put, :url => 'https://some/resource', :payload => 'payload', :verify_ssl => true)
395
- @net.should_not_receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
396
- @http.stub!(:request)
397
- @request.stub!(:process_result)
398
- @request.stub!(:response_log)
399
- @request.transmit(@uri, 'req', 'payload')
400
- end
401
-
402
- it "should set net.verify_mode to the passed value if verify_ssl is an OpenSSL constant" do
403
- mode = OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
404
- @request = RestClient::Request.new( :method => :put,
405
- :url => 'https://some/resource',
406
- :payload => 'payload',
407
- :verify_ssl => mode )
408
- @net.should_receive(:verify_mode=).with(mode)
409
- @http.stub!(:request)
410
- @request.stub!(:process_result)
411
- @request.stub!(:response_log)
412
- @request.transmit(@uri, 'req', 'payload')
413
- end
414
-
415
- it "should default to not having an ssl_client_cert" do
416
- @request.ssl_client_cert.should be(nil)
417
- end
418
-
419
- it "should set the ssl_client_cert if provided" do
420
- @request = RestClient::Request.new(
421
- :method => :put,
422
- :url => 'https://some/resource',
423
- :payload => 'payload',
424
- :ssl_client_cert => "whatsupdoc!"
425
- )
426
- @net.should_receive(:cert=).with("whatsupdoc!")
427
- @http.stub!(:request)
428
- @request.stub!(:process_result)
429
- @request.stub!(:response_log)
430
- @request.transmit(@uri, 'req', 'payload')
431
- end
432
-
433
- it "should not set the ssl_client_cert if it is not provided" do
434
- @request = RestClient::Request.new(
435
- :method => :put,
436
- :url => 'https://some/resource',
437
- :payload => 'payload'
438
- )
439
- @net.should_not_receive(:cert=).with("whatsupdoc!")
440
- @http.stub!(:request)
441
- @request.stub!(:process_result)
442
- @request.stub!(:response_log)
443
- @request.transmit(@uri, 'req', 'payload')
444
- end
445
-
446
- it "should default to not having an ssl_client_key" do
447
- @request.ssl_client_key.should be(nil)
448
- end
449
-
450
- it "should set the ssl_client_key if provided" do
451
- @request = RestClient::Request.new(
452
- :method => :put,
453
- :url => 'https://some/resource',
454
- :payload => 'payload',
455
- :ssl_client_key => "whatsupdoc!"
456
- )
457
- @net.should_receive(:key=).with("whatsupdoc!")
458
- @http.stub!(:request)
459
- @request.stub!(:process_result)
460
- @request.stub!(:response_log)
461
- @request.transmit(@uri, 'req', 'payload')
462
- end
463
-
464
- it "should not set the ssl_client_key if it is not provided" do
465
- @request = RestClient::Request.new(
466
- :method => :put,
467
- :url => 'https://some/resource',
468
- :payload => 'payload'
469
- )
470
- @net.should_not_receive(:key=).with("whatsupdoc!")
471
- @http.stub!(:request)
472
- @request.stub!(:process_result)
473
- @request.stub!(:response_log)
474
- @request.transmit(@uri, 'req', 'payload')
475
- end
476
-
477
- it "should default to not having an ssl_ca_file" do
478
- @request.ssl_ca_file.should be(nil)
479
- end
480
-
481
- it "should set the ssl_ca_file if provided" do
482
- @request = RestClient::Request.new(
483
- :method => :put,
484
- :url => 'https://some/resource',
485
- :payload => 'payload',
486
- :ssl_ca_file => "Certificate Authority File"
487
- )
488
- @net.should_receive(:ca_file=).with("Certificate Authority File")
489
- @http.stub!(:request)
490
- @request.stub!(:process_result)
491
- @request.stub!(:response_log)
492
- @request.transmit(@uri, 'req', 'payload')
493
- end
494
-
495
- it "should not set the ssl_ca_file if it is not provided" do
496
- @request = RestClient::Request.new(
497
- :method => :put,
498
- :url => 'https://some/resource',
499
- :payload => 'payload'
500
- )
501
- @net.should_not_receive(:ca_file=).with("Certificate Authority File")
502
- @http.stub!(:request)
503
- @request.stub!(:process_result)
504
- @request.stub!(:response_log)
505
- @request.transmit(@uri, 'req', 'payload')
506
- end
507
-
508
- it "should still return a response object for 204 No Content responses" do
509
- @request = RestClient::Request.new(
510
- :method => :put,
511
- :url => 'https://some/resource',
512
- :payload => 'payload'
513
- )
514
- net_http_res = Net::HTTPNoContent.new("", "204", "No Content")
515
- net_http_res.stub(:read_body).and_return(nil)
516
- @http.should_receive(:request).and_return(@request.fetch_body(net_http_res))
517
- response = @request.transmit(@uri, 'req', 'payload')
518
- response.should_not be_nil
519
- response.code.should equal(204)
520
- end
521
- end