webmock 3.14.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +213 -3
- data/README.md +66 -20
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/assertion_failure.rb +2 -0
- data/lib/webmock/callback_registry.rb +2 -0
- data/lib/webmock/config.rb +2 -0
- data/lib/webmock/cucumber.rb +2 -0
- data/lib/webmock/deprecation.rb +2 -0
- data/lib/webmock/errors.rb +2 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +16 -4
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +17 -7
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +3 -3
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +32 -9
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +10 -2
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
- data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +26 -25
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/net_http.rb +46 -121
- data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +3 -1
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
- data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
- data/lib/webmock/minitest.rb +2 -0
- data/lib/webmock/rack_response.rb +5 -1
- data/lib/webmock/request_body_diff.rb +2 -0
- data/lib/webmock/request_execution_verifier.rb +2 -0
- data/lib/webmock/request_pattern.rb +35 -12
- data/lib/webmock/request_registry.rb +2 -0
- data/lib/webmock/request_signature.rb +4 -2
- data/lib/webmock/request_signature_snippet.rb +2 -0
- data/lib/webmock/request_stub.rb +34 -0
- data/lib/webmock/response.rb +15 -13
- data/lib/webmock/responses_sequence.rb +2 -0
- data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers.rb +2 -0
- data/lib/webmock/rspec.rb +2 -0
- data/lib/webmock/stub_registry.rb +2 -0
- data/lib/webmock/stub_request_snippet.rb +2 -0
- data/lib/webmock/test_unit.rb +2 -0
- data/lib/webmock/util/hash_counter.rb +12 -6
- data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
- data/lib/webmock/util/hash_validator.rb +2 -0
- data/lib/webmock/util/headers.rb +23 -10
- data/lib/webmock/util/parsers/json.rb +72 -0
- data/lib/webmock/util/parsers/parse_error.rb +7 -0
- data/lib/webmock/util/parsers/xml.rb +16 -0
- data/lib/webmock/util/query_mapper.rb +2 -0
- data/lib/webmock/util/uri.rb +3 -1
- data/lib/webmock/util/values_stringifier.rb +2 -0
- data/lib/webmock/util/version_checker.rb +7 -5
- data/lib/webmock/version.rb +3 -1
- data/lib/webmock/webmock.rb +12 -0
- data/lib/webmock.rb +4 -2
- metadata +66 -185
- data/.gemtest +0 -0
- data/.github/workflows/CI.yml +0 -37
- data/.gitignore +0 -34
- data/.rspec-tm +0 -2
- data/Gemfile +0 -9
- data/Rakefile +0 -38
- data/lib/webmock/util/json.rb +0 -67
- data/minitest/test_helper.rb +0 -34
- data/minitest/test_webmock.rb +0 -9
- data/minitest/webmock_spec.rb +0 -60
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
- data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
- data/spec/acceptance/curb/curb_spec.rb +0 -499
- data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
- data/spec/acceptance/excon/excon_spec.rb +0 -77
- data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
- data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
- data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
- data/spec/acceptance/manticore/manticore_spec.rb +0 -107
- data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
- data/spec/acceptance/net_http/net_http_shared.rb +0 -153
- data/spec/acceptance/net_http/net_http_spec.rb +0 -369
- data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
- data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
- data/spec/acceptance/patron/patron_spec.rb +0 -125
- data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
- data/spec/acceptance/shared/callbacks.rb +0 -148
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
- data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
- data/spec/acceptance/shared/request_expectations.rb +0 -930
- data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
- data/spec/acceptance/shared/stubbing_requests.rb +0 -678
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
- data/spec/acceptance/webmock_shared.rb +0 -41
- data/spec/fixtures/test.txt +0 -1
- data/spec/quality_spec.rb +0 -84
- data/spec/spec_helper.rb +0 -48
- data/spec/support/example_curl_output.txt +0 -22
- data/spec/support/failures.rb +0 -9
- data/spec/support/my_rack_app.rb +0 -53
- data/spec/support/network_connection.rb +0 -19
- data/spec/support/webmock_server.rb +0 -70
- data/spec/unit/api_spec.rb +0 -175
- data/spec/unit/errors_spec.rb +0 -129
- data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
- data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
- data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
- data/spec/unit/rack_response_spec.rb +0 -112
- data/spec/unit/request_body_diff_spec.rb +0 -90
- data/spec/unit/request_execution_verifier_spec.rb +0 -208
- data/spec/unit/request_pattern_spec.rb +0 -736
- data/spec/unit/request_registry_spec.rb +0 -95
- data/spec/unit/request_signature_snippet_spec.rb +0 -89
- data/spec/unit/request_signature_spec.rb +0 -155
- data/spec/unit/request_stub_spec.rb +0 -199
- data/spec/unit/response_spec.rb +0 -286
- data/spec/unit/stub_registry_spec.rb +0 -103
- data/spec/unit/stub_request_snippet_spec.rb +0 -115
- data/spec/unit/util/hash_counter_spec.rb +0 -39
- data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
- data/spec/unit/util/headers_spec.rb +0 -28
- data/spec/unit/util/json_spec.rb +0 -33
- data/spec/unit/util/query_mapper_spec.rb +0 -157
- data/spec/unit/util/uri_spec.rb +0 -371
- data/spec/unit/util/version_checker_spec.rb +0 -65
- data/spec/unit/webmock_spec.rb +0 -60
- data/test/http_request.rb +0 -24
- data/test/shared_test.rb +0 -108
- data/test/test_helper.rb +0 -23
- data/test/test_webmock.rb +0 -12
- data/webmock.gemspec +0 -54
@@ -1,135 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'acceptance/webmock_shared'
|
3
|
-
|
4
|
-
unless RUBY_PLATFORM =~ /java/
|
5
|
-
require 'acceptance/typhoeus/typhoeus_hydra_spec_helper'
|
6
|
-
|
7
|
-
describe "Typhoeus::Hydra" do
|
8
|
-
include TyphoeusHydraSpecHelper
|
9
|
-
let(:hydra) { Typhoeus::Hydra.new }
|
10
|
-
|
11
|
-
before do
|
12
|
-
Typhoeus::Expectation.clear
|
13
|
-
end
|
14
|
-
|
15
|
-
include_context "with WebMock"
|
16
|
-
|
17
|
-
describe "Typhoeus::Hydra features" do
|
18
|
-
before(:each) do
|
19
|
-
WebMock.disable_net_connect!
|
20
|
-
WebMock.reset!
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "supposed response fields" do
|
24
|
-
it "present" do
|
25
|
-
stub_request(:get, "http://www.example.com").to_return(headers: {'X-Test' => '1'})
|
26
|
-
response = Typhoeus.get("http://www.example.com")
|
27
|
-
expect(response.code).not_to be_nil
|
28
|
-
expect(response.status_message).not_to be_nil
|
29
|
-
expect(response.body).not_to be_nil
|
30
|
-
expect(response.headers).not_to be_nil
|
31
|
-
expect(response.effective_url).not_to be_nil
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "when params are used" do
|
36
|
-
it "should take into account params for POST request" do
|
37
|
-
stub_request(:post, "www.example.com/?hello=world").with(query: {hello: 'world'})
|
38
|
-
request = Typhoeus::Request.new("http://www.example.com", method: :post, params: {hello: 'world'})
|
39
|
-
hydra.queue(request)
|
40
|
-
hydra.run
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should take into account body for POST request" do
|
44
|
-
stub_request(:post, "www.example.com").with(body: {hello: 'world'})
|
45
|
-
response = Typhoeus.post("http://www.example.com", method: :post, body: {hello: 'world'})
|
46
|
-
expect(response.code).to eq(200)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should take into account params for GET request" do
|
50
|
-
stub_request(:get, "http://www.example.com/?hello=world").to_return({})
|
51
|
-
request = Typhoeus::Request.new("http://www.example.com/?hello=world", method: :get)
|
52
|
-
hydra.queue(request)
|
53
|
-
hydra.run
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "timeouts" do
|
58
|
-
it "should support native typhoeus timeouts" do
|
59
|
-
stub_request(:any, "example.com").to_timeout
|
60
|
-
|
61
|
-
request = Typhoeus::Request.new("http://example.com", method: :get)
|
62
|
-
hydra.queue(request)
|
63
|
-
hydra.run
|
64
|
-
|
65
|
-
expect(request.response).to be_timed_out
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "callbacks" do
|
70
|
-
before(:each) do
|
71
|
-
@request = Typhoeus::Request.new("http://example.com")
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should call on_complete with 2xx response" do
|
75
|
-
body = "on_success fired"
|
76
|
-
stub_request(:any, "example.com").to_return(body: body)
|
77
|
-
|
78
|
-
test = nil
|
79
|
-
Typhoeus.on_complete do |c|
|
80
|
-
test = c.body
|
81
|
-
end
|
82
|
-
hydra.queue @request
|
83
|
-
hydra.run
|
84
|
-
expect(test).to eq(body)
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should call on_complete with 5xx response" do
|
88
|
-
response_code = 599
|
89
|
-
stub_request(:any, "example.com").to_return(status: [response_code, "Server On Fire"])
|
90
|
-
|
91
|
-
test = nil
|
92
|
-
Typhoeus.on_complete do |c|
|
93
|
-
test = c.code
|
94
|
-
end
|
95
|
-
hydra.queue @request
|
96
|
-
hydra.run
|
97
|
-
expect(test).to eq(response_code)
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should call on_body with 2xx response" do
|
101
|
-
body = "on_body fired"
|
102
|
-
stub_request(:any, "example.com").to_return(body: body)
|
103
|
-
|
104
|
-
test_body = nil
|
105
|
-
test_complete = nil
|
106
|
-
skip("This test requires a newer version of Typhoeus") unless @request.respond_to?(:on_body)
|
107
|
-
@request.on_body do |body_chunk, response|
|
108
|
-
test_body = body_chunk
|
109
|
-
end
|
110
|
-
@request.on_complete do |response|
|
111
|
-
test_complete = response.body
|
112
|
-
end
|
113
|
-
hydra.queue @request
|
114
|
-
hydra.run
|
115
|
-
expect(test_body).to eq(body)
|
116
|
-
expect(test_complete).to eq("")
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should call on_headers with 2xx response" do
|
120
|
-
body = "on_headers fired"
|
121
|
-
stub_request(:any, "example.com").to_return(body: body, headers: {'X-Test' => '1'})
|
122
|
-
|
123
|
-
test_headers = nil
|
124
|
-
skip("This test requires a newer version of Typhoeus") unless @request.respond_to?(:on_headers)
|
125
|
-
@request.on_headers do |response|
|
126
|
-
test_headers = response.headers
|
127
|
-
end
|
128
|
-
hydra.queue @request
|
129
|
-
hydra.run
|
130
|
-
expect(test_headers.to_h).to include('X-Test' => '1')
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module TyphoeusHydraSpecHelper
|
4
|
-
class FakeTyphoeusHydraTimeoutError < StandardError; end
|
5
|
-
class FakeTyphoeusHydraConnectError < StandardError; end
|
6
|
-
|
7
|
-
|
8
|
-
def http_request(method, uri, options = {}, &block)
|
9
|
-
uri = uri.gsub(" ", "%20") #typhoeus doesn't like spaces in the uri
|
10
|
-
request_options = {
|
11
|
-
method: method,
|
12
|
-
body: options[:body],
|
13
|
-
headers: options[:headers],
|
14
|
-
timeout: 25000
|
15
|
-
}
|
16
|
-
if options[:basic_auth]
|
17
|
-
request_options[:userpwd] = options[:basic_auth].join(':')
|
18
|
-
end
|
19
|
-
request = Typhoeus::Request.new(uri, request_options)
|
20
|
-
|
21
|
-
hydra = Typhoeus::Hydra.new
|
22
|
-
hydra.queue(request)
|
23
|
-
hydra.run
|
24
|
-
|
25
|
-
response = request.response
|
26
|
-
raise FakeTyphoeusHydraConnectError.new if response.return_code == :couldnt_connect
|
27
|
-
raise FakeTyphoeusHydraTimeoutError.new if response.timed_out?
|
28
|
-
OpenStruct.new({
|
29
|
-
body: response.body,
|
30
|
-
headers: WebMock::Util::Headers.normalize_headers(join_array_values(response.headers)),
|
31
|
-
status: response.code.to_s,
|
32
|
-
message: response.status_message
|
33
|
-
})
|
34
|
-
end
|
35
|
-
|
36
|
-
def join_array_values(hash)
|
37
|
-
joined = {}
|
38
|
-
if hash
|
39
|
-
hash.each do |k,v|
|
40
|
-
v = v.join(", ") if v.is_a?(Array)
|
41
|
-
joined[k] = v
|
42
|
-
end
|
43
|
-
end
|
44
|
-
joined
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def client_timeout_exception_class
|
49
|
-
FakeTyphoeusHydraTimeoutError
|
50
|
-
end
|
51
|
-
|
52
|
-
def connection_refused_exception_class
|
53
|
-
FakeTyphoeusHydraConnectError
|
54
|
-
end
|
55
|
-
|
56
|
-
def http_library
|
57
|
-
:typhoeus
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'acceptance/shared/enabling_and_disabling_webmock'
|
3
|
-
require 'acceptance/shared/returning_declared_responses'
|
4
|
-
require 'acceptance/shared/callbacks'
|
5
|
-
require 'acceptance/shared/request_expectations'
|
6
|
-
require 'acceptance/shared/stubbing_requests'
|
7
|
-
require 'acceptance/shared/allowing_and_disabling_net_connect'
|
8
|
-
require 'acceptance/shared/precedence_of_stubs'
|
9
|
-
require 'acceptance/shared/complex_cross_concern_behaviors'
|
10
|
-
|
11
|
-
unless defined? SAMPLE_HEADERS
|
12
|
-
SAMPLE_HEADERS = { "Content-Length" => "8888", "Accept" => "application/json" }
|
13
|
-
ESCAPED_PARAMS = "x=ab%20c&z=%27Stop%21%27%20said%20Fred%20m"
|
14
|
-
NOT_ESCAPED_PARAMS = "z='Stop!' said Fred m&x=ab c"
|
15
|
-
end
|
16
|
-
|
17
|
-
shared_examples "with WebMock" do |*adapter_info|
|
18
|
-
describe "with WebMock" do
|
19
|
-
let(:webmock_server_url) {"http://#{WebMockServer.instance.host_with_port}/"}
|
20
|
-
before(:each) do
|
21
|
-
WebMock.disable_net_connect!
|
22
|
-
WebMock.reset!
|
23
|
-
end
|
24
|
-
|
25
|
-
include_context "allowing and disabling net connect", *adapter_info
|
26
|
-
|
27
|
-
include_context "stubbing requests", *adapter_info
|
28
|
-
|
29
|
-
include_context "declared responses", *adapter_info
|
30
|
-
|
31
|
-
include_context "precedence of stubs", *adapter_info
|
32
|
-
|
33
|
-
include_context "request expectations", *adapter_info
|
34
|
-
|
35
|
-
include_context "callbacks", *adapter_info
|
36
|
-
|
37
|
-
include_context "enabled and disabled webmock", *adapter_info
|
38
|
-
|
39
|
-
include_context "complex cross-concern behaviors", *adapter_info
|
40
|
-
end
|
41
|
-
end
|
data/spec/fixtures/test.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
test
|
data/spec/quality_spec.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
# Borrowed from Bundler
|
4
|
-
# https://github.com/carlhuda/bundler/blob/1-0-stable/spec/quality_spec.rb
|
5
|
-
# Portions copyright (c) 2010 Andre Arko
|
6
|
-
# Portions copyright (c) 2009 Engine Yard
|
7
|
-
|
8
|
-
# MIT License
|
9
|
-
|
10
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
11
|
-
# a copy of this software and associated documentation files (the
|
12
|
-
# "Software"), to deal in the Software without restriction, including
|
13
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
14
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
15
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
16
|
-
# the following conditions:
|
17
|
-
|
18
|
-
# The above copyright notice and this permission notice shall be
|
19
|
-
# included in all copies or substantial portions of the Software.
|
20
|
-
|
21
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
22
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
23
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
24
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
25
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
26
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
27
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
28
|
-
|
29
|
-
describe "The library itself" do
|
30
|
-
def check_for_tab_characters(filename)
|
31
|
-
failing_lines = []
|
32
|
-
File.readlines(filename).each_with_index do |line,number|
|
33
|
-
failing_lines << number + 1 if line =~ /\t/
|
34
|
-
end
|
35
|
-
|
36
|
-
unless failing_lines.empty?
|
37
|
-
"#{filename} has tab characters on lines #{failing_lines.join(', ')}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def check_for_extra_spaces(filename)
|
42
|
-
failing_lines = []
|
43
|
-
File.readlines(filename).each_with_index do |line,number|
|
44
|
-
next if line =~ /^\s+#.*\s+\n$/
|
45
|
-
failing_lines << number + 1 if line =~ /\s+\n$/
|
46
|
-
end
|
47
|
-
|
48
|
-
unless failing_lines.empty?
|
49
|
-
"#{filename} has spaces on the EOL on lines #{failing_lines.join(', ')}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
RSpec::Matchers.define :be_well_formed do
|
54
|
-
failure_message do |actual|
|
55
|
-
actual.join("\n")
|
56
|
-
end
|
57
|
-
|
58
|
-
match do |actual|
|
59
|
-
actual.empty?
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
it "has no malformed whitespace" do
|
64
|
-
error_messages = []
|
65
|
-
Dir.chdir(File.expand_path("../..", __FILE__)) do
|
66
|
-
`git ls-files`.split("\n").each do |filename|
|
67
|
-
next if filename =~ /\.gitmodules|fixtures/
|
68
|
-
error_messages << check_for_tab_characters(filename)
|
69
|
-
error_messages << check_for_extra_spaces(filename)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
expect(error_messages.compact).to be_well_formed
|
73
|
-
end
|
74
|
-
|
75
|
-
it "can still be built" do
|
76
|
-
Dir.chdir(File.expand_path('../../', __FILE__)) do
|
77
|
-
`gem build webmock.gemspec`
|
78
|
-
expect($?).to eq(0)
|
79
|
-
|
80
|
-
# clean up the .gem generated
|
81
|
-
system("rm webmock-#{WebMock.version}.gem")
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'httpclient'
|
3
|
-
unless RUBY_PLATFORM =~ /java/
|
4
|
-
require 'curb'
|
5
|
-
require 'patron'
|
6
|
-
require 'em-http'
|
7
|
-
require 'typhoeus'
|
8
|
-
end
|
9
|
-
if RUBY_PLATFORM =~ /java/
|
10
|
-
require 'manticore'
|
11
|
-
end
|
12
|
-
|
13
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
14
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
15
|
-
require 'rspec'
|
16
|
-
|
17
|
-
require 'webmock/rspec'
|
18
|
-
|
19
|
-
require 'support/network_connection'
|
20
|
-
require 'support/webmock_server'
|
21
|
-
require 'support/my_rack_app'
|
22
|
-
require 'support/failures'
|
23
|
-
|
24
|
-
CURL_EXAMPLE_OUTPUT_PATH = File.expand_path('../support/example_curl_output.txt', __FILE__)
|
25
|
-
|
26
|
-
RSpec.configure do |config|
|
27
|
-
no_network_connection = ENV["NO_CONNECTION"] || ! NetworkConnection.is_network_available?
|
28
|
-
if no_network_connection
|
29
|
-
warn("No network connectivity. Only examples which do not make real network connections will run.")
|
30
|
-
config.filter_run_excluding net_connect: true
|
31
|
-
end
|
32
|
-
|
33
|
-
config.filter_run_excluding without_webmock: true
|
34
|
-
|
35
|
-
config.before(:suite) do
|
36
|
-
WebMockServer.instance.start unless WebMockServer.instance.started
|
37
|
-
end
|
38
|
-
|
39
|
-
config.after(:suite) do
|
40
|
-
WebMockServer.instance.stop
|
41
|
-
end
|
42
|
-
|
43
|
-
config.filter_run focus: true
|
44
|
-
config.run_all_when_everything_filtered = true
|
45
|
-
|
46
|
-
config.include Failures
|
47
|
-
end
|
48
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
HTTP/1.1 202 OK
|
2
|
-
Content-Type: text/html; charset=UTF-8
|
3
|
-
Connection: Keep-Alive
|
4
|
-
Date: Sat, 23 Jan 2010 01:01:05 GMT
|
5
|
-
Content-Length: 419
|
6
|
-
Accept: image/jpeg
|
7
|
-
Accept: image/png
|
8
|
-
|
9
|
-
<HTML>
|
10
|
-
<HEAD>
|
11
|
-
<TITLE>Example Web Page</TITLE>
|
12
|
-
</HEAD>
|
13
|
-
<body>
|
14
|
-
<p>You have reached this web page by typing "example.com",
|
15
|
-
"example.net",
|
16
|
-
or "example.org" into your web browser.</p>
|
17
|
-
<p>These domain names are reserved for use in documentation and are not available
|
18
|
-
for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC
|
19
|
-
2606</a>, Section 3.</p>
|
20
|
-
</BODY>
|
21
|
-
</HTML>
|
22
|
-
|
data/spec/support/failures.rb
DELETED
data/spec/support/my_rack_app.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'rack'
|
2
|
-
|
3
|
-
class MyRackApp
|
4
|
-
class NonArrayResponse
|
5
|
-
# The rack response body need not implement #join,
|
6
|
-
# but it must implement #each. It need not be an Array.
|
7
|
-
# ActionDispatch::Response, for example, exercises that fact.
|
8
|
-
# See: http://rack.rubyforge.org/doc/SPEC.html
|
9
|
-
|
10
|
-
def each(*args, &blk)
|
11
|
-
["This is not in an array!"].each(*args, &blk)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.call(env)
|
16
|
-
case env.values_at('REQUEST_METHOD', 'PATH_INFO')
|
17
|
-
when ['GET', '/']
|
18
|
-
[200, {}, ["This is my root!"]]
|
19
|
-
when ['GET', '/greet']
|
20
|
-
name = env['QUERY_STRING'][/name=([^&]*)/, 1] || "World"
|
21
|
-
[200, {}, ["Hello, #{name}"]]
|
22
|
-
when ['GET', '/non_array_response']
|
23
|
-
[200, {}, NonArrayResponse.new]
|
24
|
-
when ['GET', '/locked']
|
25
|
-
[200, {}, ["Single threaded response."]]
|
26
|
-
when ['POST', '/greet']
|
27
|
-
name = env["rack.input"].read(env["CONTENT_LENGTH"])
|
28
|
-
name = name.force_encoding("UTF-8") if name.respond_to? :force_encoding
|
29
|
-
name = name[/name=([^&]*)/, 1] || "World"
|
30
|
-
[200, {}, ["Good to meet you, #{name}!"]]
|
31
|
-
when ['GET', '/compute']
|
32
|
-
if env['SERVER_PORT'] == 80 && env["SCRIPT_NAME"] == ""
|
33
|
-
[200, {}, [""]]
|
34
|
-
else
|
35
|
-
[401, {}, [""]]
|
36
|
-
end
|
37
|
-
when ['GET', '/error']
|
38
|
-
env['rack.errors'].puts('Error!')
|
39
|
-
[500, {}, ['']]
|
40
|
-
else
|
41
|
-
[404, {}, ['']]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class MyLockedRackApp
|
47
|
-
MUTEX = Mutex.new
|
48
|
-
|
49
|
-
def self.call(env)
|
50
|
-
lock = Rack::Lock.new(MyRackApp, MUTEX)
|
51
|
-
lock.call(env)
|
52
|
-
end
|
53
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'timeout'
|
2
|
-
require 'socket'
|
3
|
-
|
4
|
-
module NetworkConnection
|
5
|
-
def self.connect_to(host, port, timeout=10)
|
6
|
-
Timeout.timeout(timeout) do
|
7
|
-
TCPSocket.new(host, port)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.is_network_available?
|
12
|
-
begin
|
13
|
-
self.connect_to("8.8.8.8", 53, 5)
|
14
|
-
true
|
15
|
-
rescue
|
16
|
-
false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'webrick'
|
2
|
-
require 'logger'
|
3
|
-
require 'singleton'
|
4
|
-
|
5
|
-
class WebMockServer
|
6
|
-
include Singleton
|
7
|
-
|
8
|
-
attr_reader :port, :started
|
9
|
-
|
10
|
-
def host_with_port
|
11
|
-
"localhost:#{port}"
|
12
|
-
end
|
13
|
-
|
14
|
-
def concurrent
|
15
|
-
unless RUBY_PLATFORM =~ /java/
|
16
|
-
@pid = Process.fork do
|
17
|
-
yield
|
18
|
-
end
|
19
|
-
else
|
20
|
-
Thread.new { yield }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def start
|
25
|
-
@started = true
|
26
|
-
server = WEBrick::GenericServer.new(Port: 0, Logger: Logger.new("/dev/null"))
|
27
|
-
server.logger.level = 0
|
28
|
-
@port = server.config[:Port]
|
29
|
-
|
30
|
-
concurrent do
|
31
|
-
['TERM', 'INT'].each do |signal|
|
32
|
-
trap(signal) do
|
33
|
-
Thread.new do
|
34
|
-
server.shutdown
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
server.start do |socket|
|
39
|
-
socket.read(1)
|
40
|
-
socket.puts <<-EOT.gsub(/^\s+\|/, '')
|
41
|
-
|HTTP/1.1 200 OK\r
|
42
|
-
|Date: Fri, 31 Dec 1999 23:59:59 GMT\r
|
43
|
-
|Content-Type: text/html\r
|
44
|
-
|Content-Length: 11\r
|
45
|
-
|Set-Cookie: bar\r
|
46
|
-
|Set-Cookie: foo\r
|
47
|
-
|\r
|
48
|
-
|hello world
|
49
|
-
EOT
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
loop do
|
55
|
-
begin
|
56
|
-
TCPSocket.new("localhost", port)
|
57
|
-
sleep 0.1
|
58
|
-
break
|
59
|
-
rescue Errno::ECONNREFUSED
|
60
|
-
sleep 0.1
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def stop
|
66
|
-
if @pid
|
67
|
-
Process.kill('INT', @pid)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|