webmock 3.5.0 → 3.25.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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +476 -2
  3. data/README.md +166 -42
  4. data/lib/webmock/api.rb +2 -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 +228 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +14 -3
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +22 -9
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +5 -0
  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 +17 -5
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +49 -5
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +25 -7
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
  25. data/lib/webmock/http_lib_adapters/net_http.rb +59 -112
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -2
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +5 -1
  35. data/lib/webmock/request_body_diff.rb +3 -1
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +118 -61
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +4 -2
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  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 +4 -1
  48. data/lib/webmock/stub_registry.rb +28 -11
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +3 -3
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  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 +23 -10
  55. data/lib/webmock/util/parsers/json.rb +72 -0
  56. data/lib/webmock/util/parsers/parse_error.rb +7 -0
  57. data/lib/webmock/util/parsers/xml.rb +16 -0
  58. data/lib/webmock/util/query_mapper.rb +6 -2
  59. data/lib/webmock/util/uri.rb +11 -9
  60. data/lib/webmock/util/values_stringifier.rb +2 -0
  61. data/lib/webmock/util/version_checker.rb +7 -5
  62. data/lib/webmock/version.rb +3 -1
  63. data/lib/webmock/webmock.rb +22 -3
  64. data/lib/webmock.rb +5 -2
  65. metadata +99 -175
  66. data/.gemtest +0 -0
  67. data/.gitignore +0 -34
  68. data/.rspec-tm +0 -2
  69. data/.travis.yml +0 -21
  70. data/Gemfile +0 -9
  71. data/Rakefile +0 -30
  72. data/lib/webmock/util/json.rb +0 -67
  73. data/minitest/test_helper.rb +0 -34
  74. data/minitest/test_webmock.rb +0 -9
  75. data/minitest/webmock_spec.rb +0 -60
  76. data/spec/acceptance/curb/curb_spec.rb +0 -481
  77. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  78. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
  79. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec.rb +0 -77
  81. data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
  82. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -82
  83. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  84. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  85. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  86. data/spec/acceptance/manticore/manticore_spec.rb +0 -56
  87. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  88. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  89. data/spec/acceptance/net_http/net_http_spec.rb +0 -331
  90. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  91. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  92. data/spec/acceptance/patron/patron_spec.rb +0 -125
  93. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  94. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  95. data/spec/acceptance/shared/callbacks.rb +0 -147
  96. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  97. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  98. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  99. data/spec/acceptance/shared/request_expectations.rb +0 -923
  100. data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
  101. data/spec/acceptance/shared/stubbing_requests.rb +0 -638
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  103. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  104. data/spec/acceptance/webmock_shared.rb +0 -41
  105. data/spec/fixtures/test.txt +0 -1
  106. data/spec/quality_spec.rb +0 -84
  107. data/spec/spec_helper.rb +0 -48
  108. data/spec/support/example_curl_output.txt +0 -22
  109. data/spec/support/failures.rb +0 -9
  110. data/spec/support/my_rack_app.rb +0 -53
  111. data/spec/support/network_connection.rb +0 -19
  112. data/spec/support/webmock_server.rb +0 -69
  113. data/spec/unit/api_spec.rb +0 -175
  114. data/spec/unit/errors_spec.rb +0 -129
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  116. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  117. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  118. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  119. data/spec/unit/rack_response_spec.rb +0 -112
  120. data/spec/unit/request_body_diff_spec.rb +0 -90
  121. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  122. data/spec/unit/request_pattern_spec.rb +0 -596
  123. data/spec/unit/request_registry_spec.rb +0 -95
  124. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  125. data/spec/unit/request_signature_spec.rb +0 -155
  126. data/spec/unit/request_stub_spec.rb +0 -199
  127. data/spec/unit/response_spec.rb +0 -282
  128. data/spec/unit/stub_registry_spec.rb +0 -103
  129. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  130. data/spec/unit/util/hash_counter_spec.rb +0 -39
  131. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  132. data/spec/unit/util/headers_spec.rb +0 -28
  133. data/spec/unit/util/json_spec.rb +0 -33
  134. data/spec/unit/util/query_mapper_spec.rb +0 -150
  135. data/spec/unit/util/uri_spec.rb +0 -299
  136. data/spec/unit/util/version_checker_spec.rb +0 -65
  137. data/spec/unit/webmock_spec.rb +0 -11
  138. data/test/http_request.rb +0 -24
  139. data/test/shared_test.rb +0 -108
  140. data/test/test_helper.rb +0 -23
  141. data/test/test_webmock.rb +0 -6
  142. data/webmock.gemspec +0 -46
@@ -1,331 +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 = ''.dup
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
-
318
- it "should match http headers, even if their values have been set in a request as numbers" do
319
- WebMock.disable_net_connect!
320
-
321
- stub_request(:post, "www.example.com").with(headers: {"My-Header" => 99})
322
-
323
- uri = URI.parse('http://www.example.com/')
324
- req = Net::HTTP::Post.new(uri.path)
325
- req['My-Header'] = 99
326
-
327
- res = Net::HTTP.start(uri.host, uri.port) do |http|
328
- http.request(req, '')
329
- end
330
- end
331
- 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,125 +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
- it "should allow stubbing PATCH request with body" do
23
- stub_request(:patch, "http://www.example.com/")
24
- .with(body: "abc")
25
-
26
- @sess.patch('/', "abc")
27
- end
28
-
29
- describe "file requests" do
30
-
31
- before(:each) do
32
- @dir_path = Dir.mktmpdir('webmock-')
33
- @file_path = File.join(@dir_path, "webmock_temp_test_file")
34
- FileUtils.rm_rf(@file_path) if File.exist?(@file_path)
35
- end
36
-
37
- after(:each) do
38
- FileUtils.rm_rf(@dir_path) if File.exist?(@dir_path)
39
- end
40
-
41
- it "should work with get_file" do
42
- stub_request(:get, "www.example.com").to_return(body: "abc")
43
- @sess.get_file("/", @file_path)
44
- expect(File.read(@file_path)).to eq("abc")
45
- end
46
-
47
- it "should raise same error as Patron if file is not readable for get request" do
48
- stub_request(:get, "www.example.com")
49
- File.open("/tmp/read_only_file", "w") do |tmpfile|
50
- tmpfile.chmod(0400)
51
- end
52
- begin
53
- expect {
54
- @sess.get_file("/", "/tmp/read_only_file")
55
- }.to raise_error(ArgumentError, "Unable to open specified file.")
56
- ensure
57
- File.unlink("/tmp/read_only_file")
58
- end
59
- end
60
-
61
- it "should work with put_file" do
62
- File.open(@file_path, "w") {|f| f.write "abc"}
63
- stub_request(:put, "www.example.com").with(body: "abc")
64
- @sess.put_file("/", @file_path)
65
- end
66
-
67
- it "should work with post_file" do
68
- File.open(@file_path, "w") {|f| f.write "abc"}
69
- stub_request(:post, "www.example.com").with(body: "abc")
70
- @sess.post_file("/", @file_path)
71
- end
72
-
73
- it "should raise same error as Patron if file is not readable for post request" do
74
- stub_request(:post, "www.example.com").with(body: "abc")
75
- expect {
76
- @sess.post_file("/", "/path/to/non/existing/file")
77
- }.to raise_error(ArgumentError, "Unable to open specified file.")
78
- end
79
-
80
- end
81
-
82
- describe "handling errors same way as patron" do
83
- it "should raise error if put request has neither upload_data nor file_name" do
84
- stub_request(:post, "www.example.com")
85
- expect {
86
- @sess.post("/", nil)
87
- }.to raise_error(ArgumentError, "Must provide either data or a filename when doing a PUT or POST")
88
- end
89
- end
90
-
91
- it "should work with WebDAV copy request" do
92
- stub_request(:copy, "www.example.com/abc").with(headers: {'Destination' => "/def"})
93
- @sess.copy("/abc", "/def")
94
- end
95
-
96
- if /^1\.9/ === RUBY_VERSION
97
- describe "handling encoding same way as patron" do
98
- around(:each) do |example|
99
- @encoding = Encoding.default_internal
100
- Encoding.default_internal = "UTF-8"
101
- example.run
102
- Encoding.default_internal = @encoding
103
- end
104
-
105
- it "should not encode body with default encoding" do
106
- stub_request(:get, "www.example.com").
107
- to_return(body: "Øl")
108
-
109
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
110
- expect(@sess.get("").inspectable_body.encoding).to eq(Encoding::UTF_8)
111
- end
112
-
113
- it "should not encode body to default internal" do
114
- stub_request(:get, "www.example.com").
115
- to_return(headers: {'Content-Type' => 'text/html; charset=iso-8859-1'},
116
- body: "Øl".encode("iso-8859-1"))
117
-
118
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
119
- expect(@sess.get("").decoded_body.encoding).to eq(Encoding.default_internal)
120
- end
121
- end
122
- end
123
- end
124
- end
125
- 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 = 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