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,54 +0,0 @@
1
- require "ostruct"
2
-
3
- module HttpRbSpecHelper
4
- def http_request(method, uri, options = {})
5
- chain = HTTP
6
-
7
- if basic_auth = options.delete(:basic_auth)
8
- chain = chain.basic_auth(user: basic_auth[0], pass: basic_auth[1])
9
- end
10
-
11
- ssl_ctx = OpenSSL::SSL::SSLContext.new
12
- ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
13
-
14
- response = chain.request(method, normalize_uri(uri), options.merge(ssl_context: ssl_ctx))
15
-
16
- OpenStruct.new({
17
- body: response.body.to_s,
18
- headers: normalize_headers(response.headers.to_h),
19
- status: response.code.to_s,
20
- message: response.reason
21
- })
22
- end
23
-
24
- def client_timeout_exception_class
25
- return Errno::ETIMEDOUT if HTTP::VERSION < "1.0.0"
26
- HTTP::TimeoutError
27
- end
28
-
29
- def connection_refused_exception_class
30
- return Errno::ECONNREFUSED if HTTP::VERSION < "1.0.0"
31
- HTTP::ConnectionError
32
- end
33
-
34
- def http_library
35
- :http_rb
36
- end
37
-
38
- def normalize_uri(uri)
39
- Addressable::URI.heuristic_parse(uri).normalize.to_s
40
- end
41
-
42
- def normalize_headers(headers)
43
- headers = Hash[headers.map { |k, v| [k, Array(v).join(", ")] }]
44
- WebMock::Util::Headers.normalize_headers headers
45
- end
46
-
47
- def stub_simple_request(host, status = 200, headers = {}, body = nil)
48
- stub_request(:any, host).to_return({
49
- status: status,
50
- headers: headers.merge({ "Host" => host }),
51
- body: body
52
- })
53
- end
54
- end
@@ -1,217 +0,0 @@
1
- require 'spec_helper'
2
- require 'acceptance/webmock_shared'
3
- require 'ostruct'
4
-
5
- require 'acceptance/httpclient/httpclient_spec_helper'
6
-
7
- describe "HTTPClient" do
8
- include HTTPClientSpecHelper
9
-
10
- before(:each) do
11
- WebMock.reset_callbacks
12
- HTTPClientSpecHelper.async_mode = false
13
- end
14
-
15
- include_examples "with WebMock"
16
-
17
- it "should raise a clearly readable error if request with multipart body is sent" do
18
- stub_request(:post, 'www.example.com').with(body: {type: 'image'})
19
-
20
- expect {
21
- HTTPClient.new.post_content('www.example.com', type: 'image', file: File.new('spec/fixtures/test.txt'))
22
- }.to raise_error(ArgumentError, "WebMock does not support matching body for multipart/form-data requests yet :(")
23
- end
24
-
25
- it "should yield block on response if block provided" do
26
- stub_request(:get, "www.example.com").to_return(body: "abc")
27
- response_body = ""
28
- http_request(:get, "http://www.example.com/") do |body|
29
- response_body = body
30
- end
31
- expect(response_body).to eq("abc")
32
- end
33
-
34
- it "should not yield block on empty response if block provided" do
35
- stub_request(:get, "www.example.com").to_return(body: "")
36
- response_body = ""
37
- http_request(:get, "http://www.example.com/"){ raise }
38
- expect(response_body).to eq("")
39
- end
40
-
41
- it "should match requests if headers are the same but in different order" do
42
- stub_request(:get, "www.example.com").with(headers: {"a" => ["b", "c"]} )
43
- expect(http_request(
44
- :get, "http://www.example.com/",
45
- headers: {"a" => ["c", "b"]}).status).to eq("200")
46
- end
47
-
48
- describe "when using async requests" do
49
- before(:each) do
50
- HTTPClientSpecHelper.async_mode = true
51
- end
52
-
53
- include_examples "with WebMock"
54
- end
55
-
56
- it "should work with get_content" do
57
- stub_request(:get, 'www.example.com').to_return(status: 200, body: 'test', headers: {})
58
- str = ''.dup
59
- HTTPClient.get_content('www.example.com') do |content|
60
- str << content
61
- end
62
- expect(str).to eq('test')
63
- end
64
-
65
- it "should work via JSONClient subclass" do
66
- stub_request(:get, 'www.example.com').to_return(
67
- status: 200,
68
- body: '{"test": "foo"}',
69
- headers: {'Content-Type' => 'application/json'}
70
- )
71
- content = JSONClient.get('www.example.com').content
72
- expect(content).to eq("test" => "foo")
73
- end
74
-
75
- context "multipart bodies" do
76
- let(:header) {{
77
- 'Accept' => 'application/json',
78
- 'Content-Type' => 'multipart/form-data'
79
- }}
80
-
81
- let(:body) {[
82
- {
83
- 'Content-Type' => 'application/json',
84
- 'Content-Disposition' => 'form-data',
85
- :content => '{"foo": "bar", "baz": 2}'
86
- }
87
- ]}
88
-
89
- let(:make_request) {HTTPClient.new.post("http://www.example.com", body: body, header: header)}
90
-
91
- before do
92
- stub_request(:post, "www.example.com")
93
- end
94
-
95
- it "should work with multipart bodies" do
96
- make_request
97
- end
98
- end
99
-
100
-
101
- context "Filters" do
102
- class Filter
103
- def filter_request(request)
104
- request.header["Authorization"] = "Bearer 0123456789"
105
- end
106
-
107
- def filter_response(request, response)
108
- response.header.set('X-Powered-By', 'webmock')
109
- end
110
- end
111
-
112
- before do
113
- @client = HTTPClient.new
114
- @client.request_filter << Filter.new
115
- stub_request(:get, 'www.example.com').with(headers: {'Authorization' => 'Bearer 0123456789'})
116
- end
117
-
118
- it "supports request filters" do
119
- expect(@client.request(:get, 'http://www.example.com/').status).to eq(200)
120
- end
121
-
122
- it "supports response filters" do
123
- res = @client.request(:get, 'http://www.example.com/')
124
- expect(res.header['X-Powered-By'].first).to eq('webmock')
125
- end
126
- end
127
-
128
- context 'when a client instance is re-used for another identical request' do
129
- let(:client) { HTTPClient.new }
130
- let(:webmock_server_url) {"http://#{WebMockServer.instance.host_with_port}/"}
131
-
132
- before { WebMock.allow_net_connect! }
133
-
134
- it 'invokes the global_stub_request hook for each request' do
135
- # Mock time to ensure that date headers match
136
- now = Time.now
137
- allow(Time).to receive(:now).and_return(now)
138
-
139
- request_signatures = []
140
- WebMock.globally_stub_request do |request_sig|
141
- request_signatures << request_sig
142
- nil # to let the request be made for real
143
- end
144
-
145
- http_request(:get, webmock_server_url, client: client, headers: { "Cookie" => "bar=; foo=" })
146
-
147
- if defined? HTTP::CookieJar
148
- http_request(:get, webmock_server_url, client: client, headers: { "Cookie" => "bar=; foo=" })
149
- else
150
- # If http-cookie is not present, then the cookie headers will saved between requests
151
- http_request(:get, webmock_server_url, client: client)
152
- end
153
-
154
- expect(request_signatures.size).to eq(2)
155
- # Verify the request signatures were identical as needed by this example
156
- expect(request_signatures.first).to eq(request_signatures.last)
157
- end
158
- end
159
-
160
- context 'session headers' do
161
- it "client sends a User-Agent header when given an agent_name explicitly to the client" do
162
- user_agent = "Client/0.1"
163
- stub_request(:get, "www.example.com").with(headers: { 'User-agent' => "#{user_agent} #{HTTPClient::LIB_NAME}" })
164
- HTTPClient.new(agent_name: user_agent).get("www.example.com")
165
- end
166
-
167
- it "client sends the Accept, User-Agent, and Date by default" do
168
- WebMock.disable_net_connect!
169
- stub_request(:get, "www.example.com").with do |req|
170
- req.headers["Accept"] == "*/*" &&
171
- req.headers["User-Agent"] == "#{HTTPClient::DEFAULT_AGENT_NAME} #{HTTPClient::LIB_NAME}" &&
172
- req.headers["Date"]
173
- end
174
- http_request(:get, "www.example.com")
175
- end
176
-
177
- it "explicitly defined headers take precedence over session defaults" do
178
- headers = { 'Accept' => 'foo/bar', 'User-Agent' => 'custom', 'Date' => 'today' }
179
- stub_request(:get, "www.example.com").with(headers: headers)
180
- HTTPClient.new.get("www.example.com", nil, headers)
181
- end
182
- end
183
-
184
- context 'httpclient response header' do
185
- it 'receives request_method, request_uri, and request_query from the request header' do
186
- stub_request :get, 'www.example.com'
187
- message = HTTPClient.new.get 'www.example.com'
188
- expect(message.header.request_uri.to_s).to eq('www.example.com')
189
- end
190
- end
191
-
192
- context 'httpclient streams response', net_connect: true do
193
- before do
194
- WebMock.allow_net_connect!
195
- WebMock.after_request(except: [:other_lib]) do |_, response|
196
- @response = response
197
- end
198
- end
199
-
200
- it 'sets the full body on the webmock response' do
201
- body = ''
202
- HTTPClient.new.request(:get, 'http://www.example.com/') do |http_res, chunk|
203
- body += chunk
204
- end
205
- expect(@response.body).to eq body
206
- end
207
- end
208
-
209
- context 'credentials' do
210
- it 'are detected when manually specifying Authorization header' do
211
- stub_request(:get, "http://www.example.com/").with(basic_auth: ['username', 'password']).to_return(status: 200)
212
-
213
- headers = {'Authorization' => 'Basic dXNlcm5hbWU6cGFzc3dvcmQ='}
214
- expect(http_request(:get, 'http://www.example.com/', {headers: headers}).status).to eql('200')
215
- end
216
- end
217
- end
@@ -1,57 +0,0 @@
1
- module HTTPClientSpecHelper
2
- class << self
3
- attr_accessor :async_mode
4
- end
5
-
6
- def http_request(method, uri, options = {}, &block)
7
- uri = Addressable::URI.heuristic_parse(uri)
8
- c = options.fetch(:client) { HTTPClient.new }
9
- c.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
10
- c.reset_all
11
- if options[:basic_auth]
12
- c.force_basic_auth = true
13
- c.set_basic_auth(nil, options[:basic_auth][0], options[:basic_auth][1])
14
- end
15
- params = [method, uri.normalize.to_s,
16
- WebMock::Util::QueryMapper.query_to_values(uri.query, notation: WebMock::Config.instance.query_values_notation), options[:body], options[:headers] || {}]
17
- if HTTPClientSpecHelper.async_mode
18
- connection = c.request_async(*params)
19
- connection.join
20
- response = connection.pop
21
- else
22
- response = c.request(*params, &block)
23
- end
24
- headers = merge_headers(response)
25
- OpenStruct.new({
26
- body: HTTPClientSpecHelper.async_mode ? response.content.read : response.content,
27
- headers: headers,
28
- status: response.code.to_s,
29
- message: response.reason
30
- })
31
- end
32
-
33
- def client_timeout_exception_class
34
- HTTPClient::TimeoutError
35
- end
36
-
37
- def connection_refused_exception_class
38
- Errno::ECONNREFUSED
39
- end
40
-
41
- def http_library
42
- :httpclient
43
- end
44
-
45
- private
46
-
47
- def merge_headers(response)
48
- response.header.all.inject({}) do |headers, header|
49
- if !headers.has_key?(header[0])
50
- headers[header[0]] = header[1]
51
- else
52
- headers[header[0]] = [headers[header[0]], header[1]].join(', ')
53
- end
54
- headers
55
- end
56
- end
57
- end
@@ -1,56 +0,0 @@
1
- require 'spec_helper'
2
- require 'acceptance/webmock_shared'
3
-
4
- if RUBY_PLATFORM =~ /java/
5
- require 'acceptance/manticore/manticore_spec_helper'
6
-
7
- describe "Manticore" do
8
- include ManticoreSpecHelper
9
-
10
- include_context "with WebMock", :no_status_message
11
-
12
- context "calling http methods on Manticore directly using Manticore's facade" do
13
- it "handles GET" do
14
- stub_request(:get, "http://example-foo.com").to_return(status: 301)
15
- response = Manticore.get("http://example-foo.com")
16
- expect(response.code).to eq(301)
17
- end
18
-
19
- it "handles POST" do
20
- stub_request(:post, "http://example-foo.com").to_return(status: 201)
21
- response = Manticore.post("http://example-foo.com", {hello: "world"})
22
- expect(response.code).to eq(201)
23
- end
24
-
25
- it "handles PUT" do
26
- stub_request(:put, "http://example-foo.com").to_return(status: 409)
27
- response = Manticore.put("http://example-foo.com", {hello: "world"})
28
- expect(response.code).to eq(409)
29
- end
30
-
31
- it "handles PATCH" do
32
- stub_request(:patch, "http://example-foo.com").to_return(status: 409)
33
- response = Manticore.patch("http://example-foo.com", {hello: "world"})
34
- expect(response.code).to eq(409)
35
- end
36
-
37
- it "handles DELETE" do
38
- stub_request(:delete, "http://example-foo.com").to_return(status: 204)
39
- response = Manticore.delete("http://example-foo.com", {id: 1})
40
- expect(response.code).to eq(204)
41
- end
42
-
43
- it "handles OPTIONS" do
44
- stub_request(:options, "http://example-foo.com").to_return(status: 200)
45
- response = Manticore.options("http://example-foo.com")
46
- expect(response.code).to eq(200)
47
- end
48
-
49
- it "handles HEAD" do
50
- stub_request(:head, "http://example-foo.com").to_return(status: 204)
51
- response = Manticore.head("http://example-foo.com")
52
- expect(response.code).to eq(204)
53
- end
54
- end
55
- end
56
- end
@@ -1,35 +0,0 @@
1
- module ManticoreSpecHelper
2
- def http_request(method, uri, options = {})
3
- client = Manticore::Client.new
4
-
5
- if basic_auth = options[:basic_auth]
6
- options = options.merge(auth: {user: basic_auth[0], pass: basic_auth[1]})
7
- end
8
-
9
- response = client.http(method, uri, options)
10
- OpenStruct.new({
11
- body: response.body || '',
12
- headers: WebMock::Util::Headers.normalize_headers(join_array_values(response.headers)),
13
- status: response.code.to_s
14
- })
15
- end
16
-
17
- def join_array_values(hash)
18
- hash.reduce({}) do |h, (k,v)|
19
- v = v.join(', ') if v.is_a?(Array)
20
- h.merge(k => v)
21
- end
22
- end
23
-
24
- def client_timeout_exception_class
25
- Manticore::ConnectTimeout
26
- end
27
-
28
- def connection_refused_exception_class
29
- Manticore::SocketException
30
- end
31
-
32
- def http_library
33
- :manticore
34
- end
35
- end
@@ -1,153 +0,0 @@
1
- shared_examples_for "Net::HTTP" do
2
- describe "when making real requests", net_connect: true do
3
- let(:port){ WebMockServer.instance.port }
4
-
5
- before(:each) do
6
- @http = Net::HTTP.new("localhost", port)
7
- end
8
-
9
- it "should return a Net::ReadAdapter from response.body when a real request is made with a block and #read_body", net_connect: true do
10
- response = Net::HTTP.new("localhost", port).request_get('/') { |r| r.read_body { } }
11
- expect(response.body).to be_a(Net::ReadAdapter)
12
- end
13
-
14
- it "should handle requests with block passed to read_body", net_connect: true do
15
- body = "".dup
16
- req = Net::HTTP::Get.new("/")
17
- Net::HTTP.start("localhost", port) do |http|
18
- http.request(req) do |res|
19
- res.read_body do |str|
20
- body << str
21
- end
22
- end
23
- end
24
- expect(body).to match(/hello world/)
25
- end
26
-
27
- it "should connect only once when connected on start", net_connect: true do
28
- @http = Net::HTTP.new('localhost', port)
29
- socket_id_before_request = socket_id_after_request = nil
30
- @http.start {|conn|
31
- socket_id_before_request = conn.instance_variable_get(:@socket).object_id
32
- conn.request(Net::HTTP::Get.new("/"))
33
- socket_id_after_request = conn.instance_variable_get(:@socket).object_id
34
- }
35
-
36
- if !defined?(WebMock::Config) || WebMock::Config.instance.net_http_connect_on_start
37
- expect(socket_id_before_request).not_to eq(nil.object_id)
38
- expect(socket_id_after_request).not_to eq(nil.object_id)
39
- expect(socket_id_after_request).to eq(socket_id_before_request)
40
- else
41
- expect(socket_id_before_request).to eq(nil.object_id)
42
- expect(socket_id_after_request).not_to eq(nil.object_id)
43
- end
44
- end
45
-
46
- it "should pass the read_timeout value on", net_connect: true do
47
- @http = Net::HTTP.new('localhost', port)
48
- read_timeout = @http.read_timeout + 1
49
- @http.read_timeout = read_timeout
50
- @http.start {|conn|
51
- conn.request(Net::HTTP::Get.new("/"))
52
- socket = conn.instance_variable_get(:@socket)
53
- expect(socket.read_timeout).to eq(read_timeout)
54
- }
55
- end
56
-
57
- describe "without start" do
58
- it "should close connection after a real request" do
59
- @http.get('/') { }
60
- expect(@http).not_to be_started
61
- end
62
-
63
- it "should execute block exactly once" do
64
- times = 0
65
- @http.get('/') { times += 1 }
66
- expect(times).to eq(1)
67
- end
68
-
69
- it "should have socket open during a real request" do
70
- socket_id = nil
71
- @http.get('/') {
72
- socket_id = @http.instance_variable_get(:@socket).object_id
73
- }
74
- expect(socket_id).not_to be_nil
75
- end
76
-
77
- it "should be started during a real request" do
78
- started = nil
79
- @http.get('/') {
80
- started = @http.started?
81
- }
82
- expect(started).to eq(true)
83
- expect(@http.started?).to eq(false)
84
- end
85
- end
86
-
87
- describe "with start" do
88
- it "should close connection after a real request" do
89
- @http.start {|conn| conn.get('/') { } }
90
- expect(@http).not_to be_started
91
- end
92
-
93
- it "should execute block exactly once" do
94
- times = 0
95
- @http.start {|conn| conn.get('/') { times += 1 }}
96
- expect(times).to eq(1)
97
- end
98
-
99
- it "should have socket open during a real request" do
100
- socket_id = nil
101
- @http.start {|conn| conn.get('/') {
102
- socket_id = conn.instance_variable_get(:@socket).object_id
103
- }
104
- }
105
- expect(socket_id).not_to be_nil
106
- end
107
-
108
- it "should be started during a real request" do
109
- started = nil
110
- @http.start {|conn| conn.get('/') {
111
- started = conn.started?
112
- }
113
- }
114
- expect(started).to eq(true)
115
- expect(@http.started?).to eq(false)
116
- end
117
- end
118
-
119
- describe "with start without request block" do
120
- it "should close connection after a real request" do
121
- @http.start {|conn| conn.get('/') }
122
- expect(@http).not_to be_started
123
- end
124
-
125
- it "should have socket open during a real request" do
126
- socket_id = nil
127
- @http.start {|conn|
128
- socket_id = conn.instance_variable_get(:@socket).object_id
129
- }
130
- expect(socket_id).not_to be_nil
131
- end
132
-
133
- it "should be started during a real request" do
134
- started = nil
135
- @http.start {|conn|
136
- started = conn.started?
137
- }
138
- expect(started).to eq(true)
139
- expect(@http.started?).to eq(false)
140
- end
141
- end
142
-
143
- describe "with start without a block and finish" do
144
- it "should gracefully start and close connection" do
145
- @http.start
146
- @http.get("/")
147
- expect(@http).to be_started
148
- @http.finish
149
- expect(@http).not_to be_started
150
- end
151
- end
152
- end
153
- end