vcr 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/FullBuildRakeFile +22 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +46 -25
  5. data/Guardfile +9 -0
  6. data/README.md +10 -371
  7. data/Rakefile +6 -2
  8. data/TODO.md +4 -0
  9. data/features/support/env.rb +5 -1
  10. data/full_build +1 -0
  11. data/lib/vcr.rb +17 -7
  12. data/lib/vcr/basic_object.rb +39 -0
  13. data/lib/vcr/config.rb +4 -7
  14. data/lib/vcr/deprecations.rb +14 -0
  15. data/lib/vcr/http_stubbing_adapters/common.rb +44 -13
  16. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +17 -28
  17. data/lib/vcr/http_stubbing_adapters/multi_object_proxy.rb +43 -0
  18. data/lib/vcr/http_stubbing_adapters/typhoeus.rb +101 -0
  19. data/lib/vcr/http_stubbing_adapters/webmock.rb +16 -37
  20. data/lib/vcr/internet_connection.rb +2 -1
  21. data/lib/vcr/structs.rb +32 -0
  22. data/lib/vcr/version.rb +1 -1
  23. data/spec/config_spec.rb +5 -25
  24. data/spec/deprecations_spec.rb +31 -3
  25. data/spec/extensions/net_http_spec.rb +1 -0
  26. data/spec/fixtures/1.9.1/fake_example.com_responses.yml +32 -1
  27. data/spec/fixtures/not_1.9.1/fake_example.com_responses.yml +32 -1
  28. data/spec/http_stubbing_adapters/fakeweb_spec.rb +9 -24
  29. data/spec/http_stubbing_adapters/multi_object_proxy_spec.rb +101 -0
  30. data/spec/http_stubbing_adapters/typhoeus_spec.rb +28 -0
  31. data/spec/http_stubbing_adapters/webmock_spec.rb +8 -26
  32. data/spec/internet_connection_spec.rb +25 -7
  33. data/spec/spec_helper.rb +3 -1
  34. data/spec/structs_spec.rb +30 -6
  35. data/spec/support/http_library_adapters.rb +50 -15
  36. data/spec/support/http_stubbing_adapter.rb +65 -56
  37. data/spec/support/version_checker.rb +29 -0
  38. data/spec/vcr_spec.rb +30 -12
  39. data/vcr.gemspec +5 -4
  40. metadata +44 -15
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe VCR::HttpStubbingAdapters::Typhoeus do
4
+ without_monkey_patches :vcr
5
+
6
+ before(:each) do
7
+ ::Typhoeus::Hydra.stubs = []
8
+ ::Typhoeus::Hydra.allow_net_connect = true
9
+ end
10
+
11
+ it_behaves_like 'an http stubbing adapter', ['typhoeus'], [:method, :uri, :host, :path, :body, :headers]
12
+
13
+ it_performs('version checking',
14
+ :valid => %w[ 0.2.0 0.2.99 ],
15
+ :too_low => %w[ 0.1.0 0.1.31 ],
16
+ :too_high => %w[ 0.3.0 1.0.0 ]
17
+ ) do
18
+ disable_warnings
19
+ before(:each) { @orig_version = Typhoeus::VERSION }
20
+ after(:each) { Typhoeus::VERSION = @orig_version }
21
+
22
+ # Cannot be regular method def as that raises a "dynamic constant assignment" error
23
+ define_method :stub_version do |version|
24
+ Typhoeus::VERSION = version
25
+ end
26
+ end
27
+ end unless RUBY_PLATFORM == 'java'
28
+
@@ -3,35 +3,17 @@ require 'spec_helper'
3
3
  describe VCR::HttpStubbingAdapters::WebMock do
4
4
  without_monkey_patches :vcr
5
5
 
6
- it_should_behave_like 'an http stubbing adapter',
6
+ it_behaves_like 'an http stubbing adapter',
7
7
  %w[net/http patron httpclient em-http-request curb],
8
8
  [:method, :uri, :host, :path, :body, :headers]
9
9
 
10
- describe '#check_version!' do
11
- before(:each) { WebMock.should respond_to(:version) }
12
-
13
- %w( 0.9.9 0.9.10 0.1.30 1.0.30 1.2.9 1.3.9 ).each do |version|
14
- it "raises an error when WebMock's version is #{version}" do
15
- WebMock.stub!(:version).and_return(version)
16
- described_class.should_not_receive(:warn)
17
- expect { described_class.check_version! }.to raise_error(/You are using WebMock #{version}. VCR requires version .* or greater/)
18
- end
19
- end
20
-
21
- %w( 1.4.0 1.4.10 1.4.99 ).each do |version|
22
- it "does nothing when WebMock's version is #{version}" do
23
- WebMock.stub!(:version).and_return(version)
24
- described_class.should_not_receive(:warn)
25
- expect { described_class.check_version! }.to_not raise_error
26
- end
27
- end
28
-
29
- %w( 1.5.0 1.10.0 2.0.0 ).each do |version|
30
- it "does nothing when WebMock's version is #{version}" do
31
- WebMock.stub!(:version).and_return(version)
32
- described_class.should_receive(:warn).with(/VCR is known to work with WebMock ~> .*\./)
33
- expect { described_class.check_version! }.to_not raise_error
34
- end
10
+ it_performs('version checking',
11
+ :valid => %w[ 1.4.0 1.4.99 1.5.0 1.5.99 ],
12
+ :too_low => %w[ 0.9.9 0.9.10 0.1.30 1.0.30 1.2.9 1.3.9 ],
13
+ :too_high => %w[ 1.6.0 1.10.0 2.0.0 ]
14
+ ) do
15
+ def stub_version(version)
16
+ WebMock.stub(:version).and_return(version)
35
17
  end
36
18
  end
37
19
  end
@@ -3,17 +3,35 @@ require 'spec_helper'
3
3
  describe VCR::InternetConnection do
4
4
  describe '.available?' do
5
5
  before(:each) do
6
- described_class.instance_variable_set(:@available, nil)
6
+ described_class.send(:remove_instance_variable, :@available) if described_class.instance_variable_defined?(:@available)
7
7
  end
8
8
 
9
- it 'returns true when pinging example.com succeeds' do
10
- Ping.stub(:pingecho).with("example.com", anything, anything).and_return(true)
11
- described_class.available?.should be_true
9
+ def stub_pingecho_with(value)
10
+ Ping.stub(:pingecho).with("example.com", anything, anything).and_return(value)
12
11
  end
13
12
 
14
- it 'returns false when pinging example.com fails' do
15
- Ping.stub(:pingecho).with("example.com", anything, anything).and_return(false)
16
- described_class.available?.should be_false
13
+ context 'when pinging example.com succeeds' do
14
+ it 'returns true' do
15
+ stub_pingecho_with(true)
16
+ described_class.should be_available
17
+ end
18
+
19
+ it 'memoizes the value so no extra pings are made' do
20
+ Ping.should_receive(:pingecho).once.and_return(true)
21
+ 3.times { described_class.available? }
22
+ end
23
+ end
24
+
25
+ context 'when pinging example.com fails' do
26
+ it 'returns false' do
27
+ stub_pingecho_with(false)
28
+ described_class.should_not be_available
29
+ end
30
+
31
+ it 'memoizes the value so no extra pings are made' do
32
+ Ping.should_receive(:pingecho).once.and_return(false)
33
+ 3.times { described_class.available? }
34
+ end
17
35
  end
18
36
  end
19
37
  end
data/spec/spec_helper.rb CHANGED
@@ -25,7 +25,7 @@ RSpec.configure do |config|
25
25
 
26
26
  config.before(:each) do
27
27
  VCR::Config.default_cassette_options = { :record => :new_episodes }
28
- VCR::Config.http_stubbing_library = :fakeweb
28
+ VCR::Config.stub_with :fakeweb
29
29
 
30
30
  WebMock.allow_net_connect!
31
31
  WebMock.reset_webmock
@@ -36,5 +36,7 @@ RSpec.configure do |config|
36
36
 
37
37
  config.filter_run :focus => true
38
38
  config.run_all_when_everything_filtered = true
39
+
40
+ config.alias_it_should_behave_like_to :it_performs, 'it performs'
39
41
  end
40
42
 
data/spec/structs_spec.rb CHANGED
@@ -32,6 +32,28 @@ describe VCR::Request do
32
32
  end
33
33
  end
34
34
 
35
+ describe 'uri normalization' do
36
+ def request(uri)
37
+ VCR::Request.new(:get, uri, '', {})
38
+ end
39
+
40
+ it 'adds port 80 to an http URI that lacks a port' do
41
+ request('http://example.com/foo').uri.should == 'http://example.com:80/foo'
42
+ end
43
+
44
+ it 'keeps the existing port for an http URI' do
45
+ request('http://example.com:8000/foo').uri.should == 'http://example.com:8000/foo'
46
+ end
47
+
48
+ it 'adds port 443 to an https URI that lacks a port' do
49
+ request('https://example.com/foo').uri.should == 'https://example.com:443/foo'
50
+ end
51
+
52
+ it 'keeps the existing port for an https URI' do
53
+ request('https://example.com:8000/foo').uri.should == 'https://example.com:8000/foo'
54
+ end
55
+ end
56
+
35
57
  describe '.from_net_http_request' do
36
58
  let(:net_http) { YAML.load(File.read(File.dirname(__FILE__) + "/fixtures/#{YAML_SERIALIZATION_VERSION}/example_net_http.yml")) }
37
59
  let(:request) { YAML.load(File.read(File.dirname(__FILE__) + "/fixtures/#{YAML_SERIALIZATION_VERSION}/example_net_http_request.yml")) }
@@ -53,10 +75,11 @@ describe VCR::Request do
53
75
  end
54
76
  end
55
77
 
56
- def with_headers(headers)
57
- described_class.new(:get, 'http://example.com/', nil, headers)
78
+ it_behaves_like 'a header normalizer' do
79
+ def with_headers(headers)
80
+ described_class.new(:get, 'http://example.com/', nil, headers)
81
+ end
58
82
  end
59
- it_should_behave_like 'a header normalizer'
60
83
  end
61
84
 
62
85
  describe VCR::ResponseStatus do
@@ -96,10 +119,11 @@ describe VCR::Response do
96
119
  end
97
120
  end
98
121
 
99
- def with_headers(headers)
100
- described_class.new(:status, headers, nil, '1.1')
122
+ it_behaves_like 'a header normalizer' do
123
+ def with_headers(headers)
124
+ described_class.new(:status, headers, nil, '1.1')
125
+ end
101
126
  end
102
- it_should_behave_like 'a header normalizer'
103
127
 
104
128
  it "ensures the body is serialized to yaml as a raw string" do
105
129
  body = "My String"
@@ -96,10 +96,26 @@ HTTP_LIBRARY_ADAPTERS['curb'] = Module.new do
96
96
  end
97
97
  end
98
98
 
99
+ HTTP_LIBRARY_ADAPTERS['typhoeus'] = Module.new do
100
+ def self.http_library_name; "Typhoeus"; end
101
+
102
+ def get_body_string(response)
103
+ response.body
104
+ end
105
+
106
+ def get_header(header_key, response)
107
+ response.headers_hash[header_key]
108
+ end
109
+
110
+ def make_http_request(method, url, body = nil, headers = {})
111
+ Typhoeus::Request.send(method, url, :body => body, :headers => headers)
112
+ end
113
+ end
114
+
99
115
  NET_CONNECT_NOT_ALLOWED_ERROR = /You can use VCR to automatically record this request and replay it later/
100
116
 
101
117
  module HttpLibrarySpecs
102
- def test_http_library(library, supported_request_match_attributes)
118
+ def test_http_library(library, supported_request_match_attributes, *other)
103
119
  # curb, patron and em-http-client cannot be installed on jruby
104
120
  return if %w[curb patron em-http-request].include?(library) && RUBY_INTERPRETER != :mri
105
121
 
@@ -135,7 +151,7 @@ module HttpLibrarySpecs
135
151
  end
136
152
  end
137
153
 
138
- it 'raises an error for another method' do
154
+ it "raises an error for a request with a different #{attribute}" do
139
155
  expect { make_http_request(invalid) }.to raise_error(NET_CONNECT_NOT_ALLOWED_ERROR)
140
156
  end
141
157
  else
@@ -192,11 +208,12 @@ module HttpLibrarySpecs
192
208
 
193
209
  it 'records new http requests' do
194
210
  VCR.should_receive(:record_http_interaction) do |interaction|
195
- URI.parse(interaction.request.uri).to_s.should == URI.parse('http://example.com/foo').to_s
211
+ interaction.request.uri.should == 'http://example.com:80/foo'
196
212
  interaction.request.method.should == :get
197
213
  interaction.response.status.code.should == 404
198
214
  interaction.response.status.message.should == 'Not Found'
199
215
  interaction.response.body.should =~ /The requested URL \/foo was not found/
216
+ interaction.response.headers['content-type'].should == ["text/html; charset=iso-8859-1"]
200
217
  end
201
218
 
202
219
  make_http_request(:get, 'http://example.com/foo')
@@ -214,6 +231,11 @@ module HttpLibrarySpecs
214
231
  subject.request_stubbed?(VCR::Request.new(method, url), [:method, :uri]).should == expected
215
232
  end
216
233
 
234
+ it "returns false from #http_connections_allowed? when http_connections_allowed is set to nil" do
235
+ subject.http_connections_allowed = nil
236
+ subject.http_connections_allowed?.should == false
237
+ end
238
+
217
239
  [true, false].each do |http_allowed|
218
240
  context "when #http_connections_allowed is set to #{http_allowed}" do
219
241
  before(:each) { subject.http_connections_allowed = http_allowed }
@@ -257,14 +279,16 @@ module HttpLibrarySpecs
257
279
  subject.stub_requests(@recorded_interactions, VCR::RequestMatcher::DEFAULT_MATCH_ATTRIBUTES)
258
280
  end
259
281
 
260
- it 'returns true from #request_stubbed? for the requests that are stubbed' do
261
- test_request_stubbed(:post, 'http://example.com', true)
262
- test_request_stubbed(:get, 'http://example.com/foo', true)
263
- end
282
+ if other.include?(:needs_net_http_extension)
283
+ it 'returns true from #request_stubbed? for the requests that are stubbed' do
284
+ test_request_stubbed(:post, 'http://example.com', true)
285
+ test_request_stubbed(:get, 'http://example.com/foo', true)
286
+ end
264
287
 
265
- it 'returns false from #request_stubbed? for requests that are not stubbed' do
266
- test_request_stubbed(:post, 'http://example.com/foo', false)
267
- test_request_stubbed(:get, 'http://google.com', false)
288
+ it 'returns false from #request_stubbed? for requests that are not stubbed' do
289
+ test_request_stubbed(:post, 'http://example.com/foo', false)
290
+ test_request_stubbed(:get, 'http://google.com', false)
291
+ end
268
292
  end
269
293
 
270
294
  it 'gets the stubbed responses when multiple post requests are made to http://example.com, and does not record them' do
@@ -275,7 +299,16 @@ module HttpLibrarySpecs
275
299
 
276
300
  it 'gets the stubbed responses when requests are made to http://example.com/foo, and does not record them' do
277
301
  VCR.should_receive(:record_http_interaction).never
278
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response with path=foo'
302
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 1 with path=foo'
303
+ end
304
+
305
+ it 'rotates through multiple responses for the same request' do
306
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 1 with path=foo'
307
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
308
+
309
+ # subsequent requests keep getting the last one
310
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
311
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
279
312
  end
280
313
 
281
314
  it "correctly handles stubbing multiple values for the same header" do
@@ -287,10 +320,12 @@ module HttpLibrarySpecs
287
320
 
288
321
  test_real_http_request(http_allowed)
289
322
 
290
- it 'returns false from #request_stubbed?' do
291
- test_request_stubbed(:get, 'http://example.com/foo', false)
292
- test_request_stubbed(:post, 'http://example.com', false)
293
- test_request_stubbed(:get, 'http://google.com', false)
323
+ if other.include?(:needs_net_http_extension)
324
+ it 'returns false from #request_stubbed?' do
325
+ test_request_stubbed(:get, 'http://example.com/foo', false)
326
+ test_request_stubbed(:post, 'http://example.com', false)
327
+ test_request_stubbed(:get, 'http://google.com', false)
328
+ end
294
329
  end
295
330
  end
296
331
  end
@@ -1,20 +1,22 @@
1
- shared_examples_for "an http stubbing adapter" do |supported_http_libraries, supported_request_match_attributes|
1
+ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, supported_request_match_attributes, *other|
2
2
  extend HttpLibrarySpecs
3
3
  before(:each) { VCR.stub!(:http_stubbing_adapter).and_return(subject) }
4
4
  subject { described_class }
5
5
 
6
- describe '#request_uri' do
7
- it 'returns the uri for the given http request' do
8
- net_http = Net::HTTP.new('example.com', 80)
9
- request = Net::HTTP::Get.new('/foo/bar')
10
- subject.request_uri(net_http, request).should == 'http://example.com:80/foo/bar'
11
- end
6
+ if other.include?(:needs_net_http_extension)
7
+ describe '#request_uri' do
8
+ it 'returns the uri for the given http request' do
9
+ net_http = Net::HTTP.new('example.com', 80)
10
+ request = Net::HTTP::Get.new('/foo/bar')
11
+ subject.request_uri(net_http, request).should == 'http://example.com:80/foo/bar'
12
+ end
12
13
 
13
- it 'handles basic auth' do
14
- net_http = Net::HTTP.new('example.com',80)
15
- request = Net::HTTP::Get.new('/auth.txt')
16
- request.basic_auth 'user', 'pass'
17
- subject.request_uri(net_http, request).should == 'http://user:pass@example.com:80/auth.txt'
14
+ it 'handles basic auth' do
15
+ net_http = Net::HTTP.new('example.com',80)
16
+ request = Net::HTTP::Get.new('/auth.txt')
17
+ request.basic_auth 'user', 'pass'
18
+ subject.request_uri(net_http, request).should == 'http://user:pass@example.com:80/auth.txt'
19
+ end
18
20
  end
19
21
  end
20
22
 
@@ -25,76 +27,83 @@ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, sup
25
27
  subject.ignore_localhost?.should == val
26
28
  end
27
29
  end
30
+
31
+ it "returns false when ignore_localhost is set to nil" do
32
+ subject.ignore_localhost = nil
33
+ subject.ignore_localhost?.should == false
34
+ end
28
35
  end
29
36
 
30
- describe '#request_stubbed? using specific match_attributes' do
31
- let(:interactions) { YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', YAML_SERIALIZATION_VERSION, 'match_requests_on.yml'))) }
37
+ if other.include?(:needs_net_http_extension)
38
+ describe '#request_stubbed? using specific match_attributes' do
39
+ let(:interactions) { YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', YAML_SERIALIZATION_VERSION, 'match_requests_on.yml'))) }
32
40
 
33
- @supported_request_match_attributes = supported_request_match_attributes
34
- def self.matching_on(attribute, valid1, valid2, invalid, &block)
35
- supported_request_match_attributes = @supported_request_match_attributes
41
+ @supported_request_match_attributes = supported_request_match_attributes
42
+ def self.matching_on(attribute, valid1, valid2, invalid, &block)
43
+ supported_request_match_attributes = @supported_request_match_attributes
36
44
 
37
- describe ":#{attribute}" do
38
- if supported_request_match_attributes.include?(attribute)
39
- before(:each) { subject.stub_requests(interactions, [attribute]) }
40
- module_eval(&block)
45
+ describe ":#{attribute}" do
46
+ if supported_request_match_attributes.include?(attribute)
47
+ before(:each) { subject.stub_requests(interactions, [attribute]) }
48
+ module_eval(&block)
41
49
 
42
- [valid1, valid2].each do |val|
43
- it "returns true for a #{val.inspect} request" do
44
- subject.request_stubbed?(request(val), [attribute]).should be_true
50
+ [valid1, valid2].each do |val|
51
+ it "returns true for a #{val.inspect} request" do
52
+ subject.request_stubbed?(request(val), [attribute]).should == true
53
+ end
45
54
  end
46
- end
47
55
 
48
- it "returns false for another #{attribute}" do
49
- subject.request_stubbed?(request(invalid), [attribute]).should be_false
50
- end
51
- else
52
- it 'raises an error indicating matching requests on this attribute is not supported' do
53
- expect { subject.request_stubbed?(VCR::Request.new, [attribute]) }.to raise_error(/does not support matching requests on #{attribute}/)
56
+ it "returns false for another #{attribute}" do
57
+ subject.request_stubbed?(request(invalid), [attribute]).should == false
58
+ end
59
+ else
60
+ it 'raises an error indicating matching requests on this attribute is not supported' do
61
+ expect { subject.request_stubbed?(VCR::Request.new, [attribute]) }.to raise_error(/does not support matching requests on #{attribute}/)
62
+ end
54
63
  end
55
64
  end
56
65
  end
57
- end
58
66
 
59
- matching_on :method, :get, :post, :put do
60
- def request(http_method)
61
- VCR::Request.new(http_method, 'http://some-wrong-domain.com/', nil, {})
67
+ matching_on :method, :get, :post, :put do
68
+ def request(http_method)
69
+ VCR::Request.new(http_method, 'http://some-wrong-domain.com/', nil, {})
70
+ end
62
71
  end
63
- end
64
72
 
65
- matching_on :host, 'example1.com', 'example2.com', 'example3.com' do
66
- def request(host)
67
- VCR::Request.new(:get, "http://#{host}/some/wrong/path", nil, {})
73
+ matching_on :host, 'example1.com', 'example2.com', 'example3.com' do
74
+ def request(host)
75
+ VCR::Request.new(:get, "http://#{host}/some/wrong/path", nil, {})
76
+ end
68
77
  end
69
- end
70
78
 
71
- matching_on :uri, 'http://example.com/uri1', 'http://example.com/uri2', 'http://example.com/uri3' do
72
- def request(uri)
73
- VCR::Request.new(:get, uri, nil, {})
79
+ matching_on :uri, 'http://example.com/uri1', 'http://example.com/uri2', 'http://example.com/uri3' do
80
+ def request(uri)
81
+ VCR::Request.new(:get, uri, nil, {})
82
+ end
74
83
  end
75
- end
76
84
 
77
- matching_on :path, '/path1', '/path2', '/path3' do
78
- def request(path)
79
- VCR::Request.new(:get, "http://example.com#{path}", nil, {})
85
+ matching_on :path, '/path1', '/path2', '/path3' do
86
+ def request(path)
87
+ VCR::Request.new(:get, "http://example.com#{path}", nil, {})
88
+ end
80
89
  end
81
- end
82
90
 
83
- matching_on :body, 'param=val1', 'param=val2', 'param=val3' do
84
- def request(body)
85
- VCR::Request.new(:put, "http://wrong-domain.com/wrong/path", body, {})
91
+ matching_on :body, 'param=val1', 'param=val2', 'param=val3' do
92
+ def request(body)
93
+ VCR::Request.new(:put, "http://wrong-domain.com/wrong/path", body, {})
94
+ end
86
95
  end
87
- end
88
96
 
89
- matching_on :headers, { 'X-HTTP-HEADER1' => 'val1' }, { 'X-HTTP-HEADER1' => 'val2' }, { 'X-HTTP-HEADER1' => 'val3' } do
90
- def request(headers)
91
- VCR::Request.new(:get, "http://wrong-domain.com/wrong/path", nil, headers)
97
+ matching_on :headers, { 'X-HTTP-HEADER1' => 'val1' }, { 'X-HTTP-HEADER1' => 'val2' }, { 'X-HTTP-HEADER1' => 'val3' } do
98
+ def request(headers)
99
+ VCR::Request.new(:get, "http://wrong-domain.com/wrong/path", nil, headers)
100
+ end
92
101
  end
93
102
  end
94
103
  end
95
104
 
96
105
  supported_http_libraries.each do |library|
97
- test_http_library library, supported_request_match_attributes
106
+ test_http_library library, supported_request_match_attributes, *other
98
107
  end
99
108
  end
100
109