webmock 3.0.1 → 3.20.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.
Files changed (138) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +558 -2
  3. data/README.md +200 -42
  4. data/lib/webmock/api.rb +14 -0
  5. data/lib/webmock/assertion_failure.rb +2 -0
  6. data/lib/webmock/callback_registry.rb +2 -0
  7. data/lib/webmock/config.rb +2 -0
  8. data/lib/webmock/cucumber.rb +2 -0
  9. data/lib/webmock/deprecation.rb +2 -0
  10. data/lib/webmock/errors.rb +2 -0
  11. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +223 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +21 -5
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +20 -9
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +7 -2
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +4 -1
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +19 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +29 -3
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +9 -3
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +30 -9
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
  25. data/lib/webmock/http_lib_adapters/net_http.rb +38 -89
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +6 -4
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
  29. data/lib/webmock/matchers/any_arg_matcher.rb +15 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +23 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +17 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +6 -23
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +3 -1
  35. data/lib/webmock/request_body_diff.rb +3 -1
  36. data/lib/webmock/request_execution_verifier.rb +4 -3
  37. data/lib/webmock/request_pattern.rb +132 -52
  38. data/lib/webmock/request_registry.rb +3 -1
  39. data/lib/webmock/request_signature.rb +5 -3
  40. data/lib/webmock/request_signature_snippet.rb +6 -4
  41. data/lib/webmock/request_stub.rb +34 -0
  42. data/lib/webmock/response.rb +22 -14
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +12 -3
  48. data/lib/webmock/stub_registry.rb +28 -11
  49. data/lib/webmock/stub_request_snippet.rb +12 -6
  50. data/lib/webmock/test_unit.rb +3 -3
  51. data/lib/webmock/util/hash_counter.rb +15 -9
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +39 -11
  55. data/lib/webmock/util/json.rb +3 -2
  56. data/lib/webmock/util/query_mapper.rb +11 -7
  57. data/lib/webmock/util/uri.rb +13 -11
  58. data/lib/webmock/util/values_stringifier.rb +22 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +22 -3
  62. data/lib/webmock.rb +55 -48
  63. metadata +106 -175
  64. data/.gemtest +0 -0
  65. data/.gitignore +0 -34
  66. data/.rspec-tm +0 -2
  67. data/.travis.yml +0 -20
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -30
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/curb/curb_spec.rb +0 -466
  74. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  75. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
  76. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  77. data/spec/acceptance/excon/excon_spec.rb +0 -75
  78. data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
  79. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -73
  80. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -51
  81. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -210
  82. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  83. data/spec/acceptance/manticore/manticore_spec.rb +0 -56
  84. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  85. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  86. data/spec/acceptance/net_http/net_http_spec.rb +0 -317
  87. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  88. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  89. data/spec/acceptance/patron/patron_spec.rb +0 -118
  90. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  91. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  92. data/spec/acceptance/shared/callbacks.rb +0 -147
  93. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  94. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  95. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  96. data/spec/acceptance/shared/request_expectations.rb +0 -916
  97. data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
  98. data/spec/acceptance/shared/stubbing_requests.rb +0 -583
  99. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  100. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  101. data/spec/acceptance/webmock_shared.rb +0 -41
  102. data/spec/fixtures/test.txt +0 -1
  103. data/spec/quality_spec.rb +0 -84
  104. data/spec/spec_helper.rb +0 -48
  105. data/spec/support/example_curl_output.txt +0 -22
  106. data/spec/support/failures.rb +0 -9
  107. data/spec/support/my_rack_app.rb +0 -53
  108. data/spec/support/network_connection.rb +0 -19
  109. data/spec/support/webmock_server.rb +0 -69
  110. data/spec/unit/api_spec.rb +0 -75
  111. data/spec/unit/errors_spec.rb +0 -129
  112. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  113. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  114. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  115. data/spec/unit/rack_response_spec.rb +0 -112
  116. data/spec/unit/request_body_diff_spec.rb +0 -90
  117. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  118. data/spec/unit/request_pattern_spec.rb +0 -590
  119. data/spec/unit/request_registry_spec.rb +0 -95
  120. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  121. data/spec/unit/request_signature_spec.rb +0 -155
  122. data/spec/unit/request_stub_spec.rb +0 -199
  123. data/spec/unit/response_spec.rb +0 -282
  124. data/spec/unit/stub_registry_spec.rb +0 -103
  125. data/spec/unit/stub_request_snippet_spec.rb +0 -95
  126. data/spec/unit/util/hash_counter_spec.rb +0 -39
  127. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  128. data/spec/unit/util/headers_spec.rb +0 -28
  129. data/spec/unit/util/json_spec.rb +0 -33
  130. data/spec/unit/util/query_mapper_spec.rb +0 -144
  131. data/spec/unit/util/uri_spec.rb +0 -299
  132. data/spec/unit/util/version_checker_spec.rb +0 -65
  133. data/spec/unit/webmock_spec.rb +0 -11
  134. data/test/http_request.rb +0 -24
  135. data/test/shared_test.rb +0 -95
  136. data/test/test_helper.rb +0 -23
  137. data/test/test_webmock.rb +0 -6
  138. data/webmock.gemspec +0 -46
@@ -1,317 +0,0 @@
1
- require 'spec_helper'
2
- require 'ostruct'
3
- require 'acceptance/webmock_shared'
4
- require 'acceptance/net_http/net_http_spec_helper'
5
- require 'acceptance/net_http/net_http_shared'
6
-
7
- include NetHTTPSpecHelper
8
-
9
- describe "Net:HTTP" do
10
- include_examples "with WebMock", :no_url_auth
11
-
12
- let(:port) { WebMockServer.instance.port }
13
-
14
- describe "marshalling" do
15
- class TestMarshalingInWebMockNetHTTP
16
- attr_accessor :r
17
- end
18
- before(:each) do
19
- @b = TestMarshalingInWebMockNetHTTP.new
20
- end
21
- after(:each) do
22
- WebMock.enable!
23
- end
24
- it "should be possible to load object marshalled when webmock was disabled" do
25
- WebMock.disable!
26
- original_constants = [
27
- Net::HTTP::Get,
28
- Net::HTTP::Post,
29
- Net::HTTP::Put,
30
- Net::HTTP::Delete,
31
- Net::HTTP::Head,
32
- Net::HTTP::Options
33
- ]
34
- @b.r = original_constants
35
- original_serialized = Marshal.dump(@b)
36
- Marshal.load(original_serialized)
37
- WebMock.enable!
38
- Marshal.load(original_serialized)
39
- end
40
-
41
- it "should be possible to load object marshalled when webmock was enabled" do
42
- WebMock.enable!
43
- new_constants = [
44
- Net::HTTP::Get,
45
- Net::HTTP::Post,
46
- Net::HTTP::Put,
47
- Net::HTTP::Delete,
48
- Net::HTTP::Head,
49
- Net::HTTP::Options
50
- ]
51
- @b.r = new_constants
52
- new_serialized = Marshal.dump(@b)
53
- Marshal.load(new_serialized)
54
- WebMock.disable!
55
- Marshal.load(new_serialized)
56
- end
57
- end
58
-
59
- describe "constants" do
60
- it "should still have const Get defined on replaced Net::HTTP" do
61
- expect(Object.const_get("Net").const_get("HTTP").const_defined?("Get")).to be_truthy
62
- end
63
-
64
- it "should still have const Get within constants on replaced Net::HTTP" do
65
- expect(Object.const_get("Net").const_get("HTTP").constants.map(&:to_s)).to include("Get")
66
- end
67
-
68
- it "should still have const Get within constants on replaced Net::HTTP" do
69
- expect(Object.const_get("Net").const_get("HTTP").const_get("Get")).not_to be_nil
70
- end
71
-
72
- if Module.method(:const_defined?).arity != 1
73
- it "should still have const Get defined (and not inherited) on replaced Net::HTTP" do
74
- expect(Object.const_get("Net").const_get("HTTP").const_defined?("Get", false)).to be_truthy
75
- end
76
- end
77
-
78
- if Module.method(:const_get).arity != 1
79
- it "should still be able to get non inherited constant Get on replaced Net::HTTP" do
80
- expect(Object.const_get("Net").const_get("HTTP").const_get("Get", false)).not_to be_nil
81
- end
82
- end
83
-
84
- if Module.method(:constants).arity != 0
85
- it "should still Get within non inherited constants on replaced Net::HTTP" do
86
- expect(Object.const_get("Net").const_get("HTTP").constants(false).map(&:to_s)).to include("Get")
87
- end
88
- end
89
-
90
- describe "after WebMock is disabled" do
91
- after(:each) do
92
- WebMock.enable!
93
- end
94
- it "Net::HTTP should have the same constants" do
95
- orig_consts_number = WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP.constants.size
96
- Net::HTTP.send(:const_set, "TEST_CONST", 10)
97
- expect(Net::HTTP.constants.size).to eq(orig_consts_number + 1)
98
- WebMock.disable!
99
- expect(Net::HTTP.constants.size).to eq(orig_consts_number + 1)
100
- end
101
- end
102
- end
103
-
104
- it "should work with block provided" do
105
- stub_http_request(:get, "www.example.com").to_return(body: "abc"*100000)
106
- expect(Net::HTTP.start("www.example.com") { |query| query.get("/") }.body).to eq("abc"*100000)
107
- end
108
-
109
- it "should handle requests with raw binary data" do
110
- body = "\x14\x00\x00\x00\x70\x69\x6e\x67\x00\x00"
111
- stub_http_request(:post, "www.example.com").with(body: body).to_return(body: "abc")
112
- req = Net::HTTP::Post.new("/")
113
- req.body = body
114
- req.content_type = "application/octet-stream"
115
- expect(Net::HTTP.start("www.example.com") { |http| http.request(req)}.body).to eq("abc")
116
- end
117
-
118
- it "raises an ArgumentError if passed headers as symbols if RUBY_VERSION < 2.3.0" do
119
- uri = URI.parse("http://google.com/")
120
- http = Net::HTTP.new(uri.host, uri.port)
121
- request = Net::HTTP::Get.new(uri.request_uri)
122
-
123
- # Net::HTTP calls downcase on header keys assigned with []=
124
- # In Ruby 1.8.7 symbols do not respond to downcase
125
- #
126
- # Meaning you can not assign header keys as symbols in ruby 1.8.7 using []=
127
- if :symbol.respond_to?(:downcase)
128
- request[:InvalidHeaderSinceItsASymbol] = "this will not be valid"
129
- else
130
- request.instance_eval do
131
- @header = request.to_hash.merge({InvalidHeaderSinceItsASymbol: "this will not be valid"})
132
- end
133
- end
134
-
135
- if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.3.0')
136
- expect do
137
- http.request(request)
138
- end.to raise_error ArgumentError, "Net:HTTP does not accept headers as symbols"
139
- else
140
- stub_http_request(:get, "google.com").with(headers: { InvalidHeaderSinceItsASymbol: "this will not be valid" })
141
- expect do
142
- http.request(request)
143
- end.not_to raise_error
144
- end
145
- end
146
-
147
- it "should handle multiple values for the same response header" do
148
- stub_http_request(:get, "www.example.com").to_return(headers: { 'Set-Cookie' => ['foo=bar', 'bar=bazz'] })
149
- response = Net::HTTP.get_response(URI.parse("http://www.example.com/"))
150
- expect(response.get_fields('Set-Cookie')).to eq(['bar=bazz', 'foo=bar'])
151
- end
152
-
153
- it "should yield block on response" do
154
- stub_http_request(:get, "www.example.com").to_return(body: "abc")
155
- response_body = ""
156
- http_request(:get, "http://www.example.com/") do |response|
157
- response_body = response.body
158
- end
159
- expect(response_body).to eq("abc")
160
- end
161
-
162
- it "should handle Net::HTTP::Post#body" do
163
- stub_http_request(:post, "www.example.com").with(body: "my_params").to_return(body: "abc")
164
- req = Net::HTTP::Post.new("/")
165
- req.body = "my_params"
166
- expect(Net::HTTP.start("www.example.com") { |http| http.request(req)}.body).to eq("abc")
167
- end
168
-
169
- it "should handle Net::HTTP::Post#body_stream" do
170
- stub_http_request(:post, "www.example.com").with(body: "my_params").to_return(body: "abc")
171
- req = Net::HTTP::Post.new("/")
172
- req.body_stream = StringIO.new("my_params")
173
- expect(Net::HTTP.start("www.example.com") { |http| http.request(req)}.body).to eq("abc")
174
- end
175
-
176
- it "should behave like Net::HTTP and raise error if both request body and body argument are set" do
177
- stub_http_request(:post, "www.example.com").with(body: "my_params").to_return(body: "abc")
178
- req = Net::HTTP::Post.new("/")
179
- req.body = "my_params"
180
- expect {
181
- Net::HTTP.start("www.example.com") { |http| http.request(req, "my_params")}
182
- }.to raise_error("both of body argument and HTTPRequest#body set")
183
- end
184
-
185
- it "should return a Net::ReadAdapter from response.body when a stubbed request is made with a block and #read_body" do
186
- WebMock.stub_request(:get, 'http://example.com/').to_return(body: "the body")
187
- response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
188
- expect(response.body).to be_a(Net::ReadAdapter)
189
- end
190
-
191
- it "should have request 1 time executed in registry after 1 real request", net_connect: true do
192
- WebMock.allow_net_connect!
193
- http = Net::HTTP.new('localhost', port)
194
- http.get('/') {}
195
- expect(WebMock::RequestRegistry.instance.requested_signatures.hash.size).to eq(1)
196
- expect(WebMock::RequestRegistry.instance.requested_signatures.hash.values.first).to eq(1)
197
- end
198
-
199
- it "should work with Addressable::URI passed to Net::HTTP.get_response" do
200
- stub_request(:get, 'http://www.example.com/hello?a=1').to_return(body: "abc")
201
- expect(Net::HTTP.get_response(Addressable::URI.parse('http://www.example.com/hello?a=1')).body).to eq("abc")
202
- end
203
-
204
- describe "connecting on Net::HTTP.start" do
205
- before(:each) do
206
- @http = Net::HTTP.new('www.google.com', 443)
207
- @http.use_ssl = true
208
- @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
209
- end
210
-
211
- describe "when net http is allowed" do
212
- it "should not connect to the server until the request", net_connect: true do
213
- WebMock.allow_net_connect!
214
- @http.start {|conn|
215
- expect(conn.peer_cert).to be_nil
216
- }
217
- end
218
-
219
- it "should connect to the server on start", net_connect: true do
220
- WebMock.allow_net_connect!(net_http_connect_on_start: true)
221
- @http.start {|conn|
222
- cert = OpenSSL::X509::Certificate.new conn.peer_cert
223
- expect(cert).to be_a(OpenSSL::X509::Certificate)
224
- }
225
- end
226
-
227
- end
228
-
229
- describe "when net http is disabled and allowed only for some hosts" do
230
- it "should not connect to the server until the request", net_connect: true do
231
- WebMock.disable_net_connect!(allow: "www.google.com")
232
- @http.start {|conn|
233
- expect(conn.peer_cert).to be_nil
234
- }
235
- end
236
-
237
- it "should connect to the server on start", net_connect: true do
238
- WebMock.disable_net_connect!(allow: "www.google.com", net_http_connect_on_start: true)
239
- @http.start {|conn|
240
- cert = OpenSSL::X509::Certificate.new conn.peer_cert
241
- expect(cert).to be_a(OpenSSL::X509::Certificate)
242
- }
243
- end
244
-
245
- it "should connect to the server if the URI matches an regex", net_connect: true do
246
- WebMock.disable_net_connect!(allow: /google.com/)
247
- Net::HTTP.get('www.google.com','/')
248
- end
249
-
250
- it "should connect to the server if the URI matches any regex the array", net_connect: true do
251
- WebMock.disable_net_connect!(allow: [/google.com/, /yahoo.com/])
252
- Net::HTTP.get('www.google.com','/')
253
- end
254
-
255
- end
256
-
257
- end
258
-
259
- describe "when net_http_connect_on_start is true" do
260
- before(:each) do
261
- WebMock.allow_net_connect!(net_http_connect_on_start: true)
262
- end
263
- it_should_behave_like "Net::HTTP"
264
- end
265
-
266
- describe "when net_http_connect_on_start is false" do
267
- before(:each) do
268
- WebMock.allow_net_connect!(net_http_connect_on_start: false)
269
- end
270
- it_should_behave_like "Net::HTTP"
271
- end
272
-
273
- describe 'after_request callback support', net_connect: true do
274
- let(:expected_body_regex) { /hello world/ }
275
-
276
- before(:each) do
277
- WebMock.allow_net_connect!
278
- @callback_invocation_count = 0
279
- WebMock.after_request do |_, response|
280
- @callback_invocation_count += 1
281
- @callback_response = response
282
- end
283
- end
284
-
285
- after(:each) do
286
- WebMock.reset_callbacks
287
- end
288
-
289
- def perform_get_with_returning_block
290
- http_request(:get, "http://localhost:#{port}/") do |response|
291
- return response.body
292
- end
293
- end
294
-
295
- it "should support the after_request callback on an request with block and read_body" do
296
- response_body = ''
297
- http_request(:get, "http://localhost:#{port}/") do |response|
298
- response.read_body { |fragment| response_body << fragment }
299
- end
300
- expect(response_body).to match(expected_body_regex)
301
-
302
- expect(@callback_response.body).to eq(response_body)
303
- end
304
-
305
- it "should support the after_request callback on a request with a returning block" do
306
- response_body = perform_get_with_returning_block
307
- expect(response_body).to match(expected_body_regex)
308
- expect(@callback_response).to be_instance_of(WebMock::Response)
309
- expect(@callback_response.body).to eq(response_body)
310
- end
311
-
312
- it "should only invoke the after_request callback once, even for a recursive post request" do
313
- Net::HTTP.new('localhost', port).post('/', nil)
314
- expect(@callback_invocation_count).to eq(1)
315
- end
316
- end
317
- end
@@ -1,64 +0,0 @@
1
- module NetHTTPSpecHelper
2
- def http_request(method, uri, options = {}, &block)
3
- begin
4
- uri = URI.parse(uri)
5
- rescue
6
- uri = Addressable::URI.heuristic_parse(uri)
7
- end
8
- response = nil
9
- clazz = Net::HTTP.const_get("#{method.to_s.capitalize}")
10
- req = clazz.new("#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", nil)
11
- options[:headers].each do |k,v|
12
- if v.is_a?(Array)
13
- v.each_with_index do |e,i|
14
- i == 0 ? (req[k] = e) : req.add_field(k, e)
15
- end
16
- else
17
- req[k] = v
18
- end
19
- end if options[:headers]
20
-
21
- if options[:basic_auth]
22
- req.basic_auth(options[:basic_auth][0], options[:basic_auth][1])
23
- end
24
-
25
- http = Net::HTTP.new(uri.host, uri.port)
26
- if uri.scheme == "https"
27
- http.use_ssl = true
28
- #1.9.1 has a bug with ssl_timeout
29
- http.ssl_timeout = 20 unless RUBY_PLATFORM =~ /java/
30
- http.open_timeout = 60
31
- http.read_timeout = 60
32
- end
33
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
34
- response = http.start {|open_http|
35
- open_http.request(req, options[:body], &block)
36
- }
37
- headers = {}
38
- response.each_header {|name, value| headers[name] = value}
39
- OpenStruct.new({
40
- body: response.body,
41
- headers: WebMock::Util::Headers.normalize_headers(headers),
42
- status: response.code,
43
- message: response.message
44
- })
45
- end
46
-
47
- def client_timeout_exception_class
48
- if defined?(Net::OpenTimeout)
49
- Net::OpenTimeout
50
- elsif defined?(Net::HTTP::OpenTimeout)
51
- Net::HTTP::OpenTimeout
52
- else
53
- Timeout::Error
54
- end
55
- end
56
-
57
- def connection_refused_exception_class
58
- Errno::ECONNREFUSED
59
- end
60
-
61
- def http_library
62
- :net_http
63
- end
64
- end
@@ -1,20 +0,0 @@
1
- require 'rubygems'
2
- require 'rspec'
3
- require 'net/http'
4
- require 'net/https'
5
- require 'stringio'
6
- require 'acceptance/net_http/net_http_shared'
7
- require 'support/webmock_server'
8
-
9
- describe "Real Net:HTTP without webmock", without_webmock: true do
10
- before(:all) do
11
- raise "WebMock has no access here!!!" if defined?(WebMock::NetHTTPUtility)
12
- WebMockServer.instance.start
13
- end
14
-
15
- after(:all) do
16
- WebMockServer.instance.stop
17
- end
18
-
19
- it_should_behave_like "Net::HTTP"
20
- end
@@ -1,118 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require 'acceptance/webmock_shared'
5
-
6
- unless RUBY_PLATFORM =~ /java/
7
- require 'acceptance/patron/patron_spec_helper'
8
- require 'tmpdir'
9
- require 'fileutils'
10
-
11
- describe "Patron" do
12
- include PatronSpecHelper
13
-
14
- include_examples "with WebMock"
15
-
16
- describe "when custom functionality is used" do
17
- before(:each) do
18
- @sess = Patron::Session.new
19
- @sess.base_url = "http://www.example.com"
20
- end
21
-
22
- describe "file requests" do
23
-
24
- before(:each) do
25
- @dir_path = Dir.mktmpdir('webmock-')
26
- @file_path = File.join(@dir_path, "webmock_temp_test_file")
27
- FileUtils.rm_rf(@file_path) if File.exist?(@file_path)
28
- end
29
-
30
- after(:each) do
31
- FileUtils.rm_rf(@dir_path) if File.exist?(@dir_path)
32
- end
33
-
34
- it "should work with get_file" do
35
- stub_request(:get, "www.example.com").to_return(body: "abc")
36
- @sess.get_file("/", @file_path)
37
- expect(File.read(@file_path)).to eq("abc")
38
- end
39
-
40
- it "should raise same error as Patron if file is not readable for get request" do
41
- stub_request(:get, "www.example.com")
42
- File.open("/tmp/read_only_file", "w") do |tmpfile|
43
- tmpfile.chmod(0400)
44
- end
45
- begin
46
- expect {
47
- @sess.get_file("/", "/tmp/read_only_file")
48
- }.to raise_error(ArgumentError, "Unable to open specified file.")
49
- ensure
50
- File.unlink("/tmp/read_only_file")
51
- end
52
- end
53
-
54
- it "should work with put_file" do
55
- File.open(@file_path, "w") {|f| f.write "abc"}
56
- stub_request(:put, "www.example.com").with(body: "abc")
57
- @sess.put_file("/", @file_path)
58
- end
59
-
60
- it "should work with post_file" do
61
- File.open(@file_path, "w") {|f| f.write "abc"}
62
- stub_request(:post, "www.example.com").with(body: "abc")
63
- @sess.post_file("/", @file_path)
64
- end
65
-
66
- it "should raise same error as Patron if file is not readable for post request" do
67
- stub_request(:post, "www.example.com").with(body: "abc")
68
- expect {
69
- @sess.post_file("/", "/path/to/non/existing/file")
70
- }.to raise_error(ArgumentError, "Unable to open specified file.")
71
- end
72
-
73
- end
74
-
75
- describe "handling errors same way as patron" do
76
- it "should raise error if put request has neither upload_data nor file_name" do
77
- stub_request(:post, "www.example.com")
78
- expect {
79
- @sess.post("/", nil)
80
- }.to raise_error(ArgumentError, "Must provide either data or a filename when doing a PUT or POST")
81
- end
82
- end
83
-
84
- it "should work with WebDAV copy request" do
85
- stub_request(:copy, "www.example.com/abc").with(headers: {'Destination' => "/def"})
86
- @sess.copy("/abc", "/def")
87
- end
88
-
89
- if /^1\.9/ === RUBY_VERSION
90
- describe "handling encoding same way as patron" do
91
- around(:each) do |example|
92
- @encoding = Encoding.default_internal
93
- Encoding.default_internal = "UTF-8"
94
- example.run
95
- Encoding.default_internal = @encoding
96
- end
97
-
98
- it "should not encode body with default encoding" do
99
- stub_request(:get, "www.example.com").
100
- to_return(body: "Øl")
101
-
102
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
103
- expect(@sess.get("").inspectable_body.encoding).to eq(Encoding::UTF_8)
104
- end
105
-
106
- it "should not encode body to default internal" do
107
- stub_request(:get, "www.example.com").
108
- to_return(headers: {'Content-Type' => 'text/html; charset=iso-8859-1'},
109
- body: "Øl".encode("iso-8859-1"))
110
-
111
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
112
- expect(@sess.get("").decoded_body.encoding).to eq(Encoding.default_internal)
113
- end
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,54 +0,0 @@
1
- require 'ostruct'
2
-
3
- module PatronSpecHelper
4
- def http_request(method, uri, options = {}, &block)
5
- method = method.to_sym
6
- uri = Addressable::URI.heuristic_parse(uri)
7
- sess = Patron::Session.new
8
- sess.base_url = "#{uri.omit(:path, :query).normalize.to_s}".gsub(/\/$/,"")
9
-
10
- if options[:basic_auth]
11
- sess.username = options[:basic_auth][0]
12
- sess.password = options[:basic_auth][1]
13
- end
14
-
15
- sess.connect_timeout = 30
16
- sess.timeout = 30
17
- sess.max_redirects = 0
18
- uri = "#{uri.path}#{uri.query ? '?' : ''}#{uri.query}"
19
- uri.gsub!(' ','%20')
20
- response = sess.request(method, uri, options[:headers] || {}, {
21
- data: options[:body]
22
- })
23
- headers = {}
24
- if response.headers
25
- response.headers.each do |k,v|
26
- v = v.join(", ") if v.is_a?(Array)
27
- headers[k] = v
28
- end
29
- end
30
-
31
- status_line_pattern = %r(\AHTTP/(\d+\.\d+)\s+(\d\d\d)\s*([^\r\n]+)?)
32
- message = response.status_line.match(status_line_pattern)[3] || ""
33
-
34
- OpenStruct.new({
35
- body: response.body,
36
- headers: WebMock::Util::Headers.normalize_headers(headers),
37
- status: response.status.to_s,
38
- message: message
39
- })
40
- end
41
-
42
- def client_timeout_exception_class
43
- Patron::TimeoutError
44
- end
45
-
46
- def connection_refused_exception_class
47
- Patron::ConnectionFailed
48
- end
49
-
50
- def http_library
51
- :patron
52
- end
53
-
54
- end