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.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +213 -3
  3. data/README.md +66 -20
  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 +16 -4
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +17 -7
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -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 +3 -3
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +32 -9
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +10 -2
  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 +26 -25
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +46 -121
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +3 -1
  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 +2 -0
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +35 -12
  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 +15 -13
  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 +2 -0
  48. data/lib/webmock/stub_registry.rb +2 -0
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +2 -0
  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 +2 -0
  59. data/lib/webmock/util/uri.rb +3 -1
  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 +12 -0
  64. data/lib/webmock.rb +4 -2
  65. metadata +66 -185
  66. data/.gemtest +0 -0
  67. data/.github/workflows/CI.yml +0 -37
  68. data/.gitignore +0 -34
  69. data/.rspec-tm +0 -2
  70. data/Gemfile +0 -9
  71. data/Rakefile +0 -38
  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/async_http_client/async_http_client_spec.rb +0 -375
  77. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  78. data/spec/acceptance/curb/curb_spec.rb +0 -499
  79. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  80. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  81. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  82. data/spec/acceptance/excon/excon_spec.rb +0 -77
  83. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  84. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  85. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  86. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  87. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  88. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  89. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  90. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  91. data/spec/acceptance/net_http/net_http_spec.rb +0 -369
  92. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  93. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  94. data/spec/acceptance/patron/patron_spec.rb +0 -125
  95. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  96. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  97. data/spec/acceptance/shared/callbacks.rb +0 -148
  98. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  99. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  100. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  101. data/spec/acceptance/shared/request_expectations.rb +0 -930
  102. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  103. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  104. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  105. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  106. data/spec/acceptance/webmock_shared.rb +0 -41
  107. data/spec/fixtures/test.txt +0 -1
  108. data/spec/quality_spec.rb +0 -84
  109. data/spec/spec_helper.rb +0 -48
  110. data/spec/support/example_curl_output.txt +0 -22
  111. data/spec/support/failures.rb +0 -9
  112. data/spec/support/my_rack_app.rb +0 -53
  113. data/spec/support/network_connection.rb +0 -19
  114. data/spec/support/webmock_server.rb +0 -70
  115. data/spec/unit/api_spec.rb +0 -175
  116. data/spec/unit/errors_spec.rb +0 -129
  117. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  118. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  119. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  120. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  121. data/spec/unit/rack_response_spec.rb +0 -112
  122. data/spec/unit/request_body_diff_spec.rb +0 -90
  123. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  124. data/spec/unit/request_pattern_spec.rb +0 -736
  125. data/spec/unit/request_registry_spec.rb +0 -95
  126. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  127. data/spec/unit/request_signature_spec.rb +0 -155
  128. data/spec/unit/request_stub_spec.rb +0 -199
  129. data/spec/unit/response_spec.rb +0 -286
  130. data/spec/unit/stub_registry_spec.rb +0 -103
  131. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  132. data/spec/unit/util/hash_counter_spec.rb +0 -39
  133. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  134. data/spec/unit/util/headers_spec.rb +0 -28
  135. data/spec/unit/util/json_spec.rb +0 -33
  136. data/spec/unit/util/query_mapper_spec.rb +0 -157
  137. data/spec/unit/util/uri_spec.rb +0 -371
  138. data/spec/unit/util/version_checker_spec.rb +0 -65
  139. data/spec/unit/webmock_spec.rb +0 -60
  140. data/test/http_request.rb +0 -24
  141. data/test/shared_test.rb +0 -108
  142. data/test/test_helper.rb +0 -23
  143. data/test/test_webmock.rb +0 -12
  144. 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
@@ -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 &quot;example.com&quot;,
15
- &quot;example.net&quot;,
16
- or &quot;example.org&quot; 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
-
@@ -1,9 +0,0 @@
1
- module Failures
2
- def fail()
3
- raise_error(RSpec::Expectations::ExpectationNotMetError)
4
- end
5
-
6
- def fail_with(message)
7
- raise_error(RSpec::Expectations::ExpectationNotMetError, message)
8
- end
9
- end
@@ -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