webmock 3.18.1 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +34 -15
  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 +2 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +2 -0
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +14 -6
  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 +2 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +2 -0
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +2 -0
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +2 -0
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +2 -0
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +2 -0
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +2 -0
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +2 -0
  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 +2 -0
  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 +3 -1
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +2 -0
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +7 -1
  42. data/lib/webmock/response.rb +2 -0
  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 +22 -8
  55. data/lib/webmock/util/json.rb +2 -0
  56. data/lib/webmock/util/query_mapper.rb +2 -0
  57. data/lib/webmock/util/uri.rb +3 -1
  58. data/lib/webmock/util/values_stringifier.rb +2 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +2 -0
  62. data/lib/webmock.rb +2 -0
  63. metadata +36 -168
  64. data/.gemtest +0 -0
  65. data/.github/workflows/CI.yml +0 -38
  66. data/.gitignore +0 -34
  67. data/.rspec-tm +0 -2
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -38
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
  74. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  75. data/spec/acceptance/curb/curb_spec.rb +0 -510
  76. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  77. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  78. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  79. data/spec/acceptance/excon/excon_spec.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  81. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  82. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  83. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  84. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  85. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  86. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  87. data/spec/acceptance/net_http/net_http_shared.rb +0 -190
  88. data/spec/acceptance/net_http/net_http_spec.rb +0 -395
  89. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  90. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  91. data/spec/acceptance/patron/patron_spec.rb +0 -123
  92. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  93. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  94. data/spec/acceptance/shared/callbacks.rb +0 -148
  95. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  96. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  97. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  98. data/spec/acceptance/shared/request_expectations.rb +0 -930
  99. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  100. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  101. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  103. data/spec/acceptance/webmock_shared.rb +0 -41
  104. data/spec/fixtures/test.txt +0 -1
  105. data/spec/quality_spec.rb +0 -84
  106. data/spec/spec_helper.rb +0 -48
  107. data/spec/support/example_curl_output.txt +0 -22
  108. data/spec/support/failures.rb +0 -9
  109. data/spec/support/my_rack_app.rb +0 -53
  110. data/spec/support/network_connection.rb +0 -19
  111. data/spec/support/webmock_server.rb +0 -70
  112. data/spec/unit/api_spec.rb +0 -175
  113. data/spec/unit/errors_spec.rb +0 -129
  114. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  116. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  117. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  118. data/spec/unit/rack_response_spec.rb +0 -112
  119. data/spec/unit/request_body_diff_spec.rb +0 -90
  120. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  121. data/spec/unit/request_pattern_spec.rb +0 -748
  122. data/spec/unit/request_registry_spec.rb +0 -95
  123. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  124. data/spec/unit/request_signature_spec.rb +0 -175
  125. data/spec/unit/request_stub_spec.rb +0 -234
  126. data/spec/unit/response_spec.rb +0 -314
  127. data/spec/unit/stub_registry_spec.rb +0 -103
  128. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  129. data/spec/unit/util/hash_counter_spec.rb +0 -39
  130. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  131. data/spec/unit/util/headers_spec.rb +0 -28
  132. data/spec/unit/util/json_spec.rb +0 -33
  133. data/spec/unit/util/query_mapper_spec.rb +0 -157
  134. data/spec/unit/util/uri_spec.rb +0 -371
  135. data/spec/unit/util/version_checker_spec.rb +0 -65
  136. data/spec/unit/webmock_spec.rb +0 -114
  137. data/test/http_request.rb +0 -24
  138. data/test/shared_test.rb +0 -108
  139. data/test/test_helper.rb +0 -23
  140. data/test/test_webmock.rb +0 -12
  141. 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