savon 0.6.8 → 0.7.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.
- data/CHANGELOG +30 -0
- data/README.textile +6 -2
- data/Rakefile +22 -4
- data/lib/savon.rb +1 -1
- data/lib/savon/client.rb +23 -28
- data/lib/savon/core_ext.rb +1 -1
- data/lib/savon/core_ext/hash.rb +33 -17
- data/lib/savon/core_ext/net_http.rb +20 -0
- data/lib/savon/request.rb +38 -40
- data/lib/savon/response.rb +13 -25
- data/lib/savon/soap.rb +5 -0
- data/lib/savon/wsdl.rb +8 -0
- data/spec/basic_spec_helper.rb +12 -0
- data/spec/fixtures/response/response_fixture.rb +5 -1
- data/spec/fixtures/response/xml/multi_ref.xml +39 -0
- data/spec/fixtures/response/xml/soap_fault12.xml +17 -17
- data/spec/fixtures/wsdl/wsdl_fixture.rb +2 -2
- data/spec/integration/http_basic_auth_spec.rb +12 -0
- data/spec/integration/server.rb +51 -0
- data/spec/savon/client_spec.rb +34 -54
- data/spec/savon/core_ext/hash_spec.rb +24 -20
- data/spec/savon/core_ext/net_http_spec.rb +38 -0
- data/spec/savon/core_ext/string_spec.rb +2 -2
- data/spec/savon/request_spec.rb +10 -56
- data/spec/savon/response_spec.rb +13 -5
- data/spec/savon/savon_spec.rb +3 -3
- data/spec/savon/soap_spec.rb +16 -8
- data/spec/savon/wsdl_spec.rb +7 -3
- data/spec/savon/wsse_spec.rb +12 -12
- data/spec/spec_helper.rb +1 -12
- metadata +12 -2
data/lib/savon/soap.rb
CHANGED
@@ -76,6 +76,11 @@ module Savon
|
|
76
76
|
@namespaces ||= { "xmlns:env" => SOAPNamespace[version] }
|
77
77
|
end
|
78
78
|
|
79
|
+
# Convenience method for setting the "xmlns:wsdl" namespace.
|
80
|
+
def namespace=(namespace)
|
81
|
+
namespaces["xmlns:wsdl"] = namespace
|
82
|
+
end
|
83
|
+
|
79
84
|
# Sets the SOAP version.
|
80
85
|
def version=(version)
|
81
86
|
@version = version if Savon::SOAPVersions.include? version
|
data/lib/savon/wsdl.rb
CHANGED
@@ -10,6 +10,14 @@ module Savon
|
|
10
10
|
@request = request
|
11
11
|
end
|
12
12
|
|
13
|
+
# Sets whether to use the WSDL.
|
14
|
+
attr_writer :enabled
|
15
|
+
|
16
|
+
# Returns whether to use the WSDL. Defaults to +true+.
|
17
|
+
def enabled?
|
18
|
+
@enabled.nil? ? true : @enabled
|
19
|
+
end
|
20
|
+
|
13
21
|
# Returns the namespace URI of the WSDL.
|
14
22
|
def namespace_uri
|
15
23
|
@namespace_uri ||= stream.namespace_uri
|
@@ -23,10 +23,14 @@ class ResponseFixture
|
|
23
23
|
@@soap_fault12 ||= load_fixture :soap_fault12
|
24
24
|
end
|
25
25
|
|
26
|
+
def self.multi_ref
|
27
|
+
@@multi_ref ||= load_fixture :multi_ref
|
28
|
+
end
|
29
|
+
|
26
30
|
private
|
27
31
|
|
28
32
|
def self.load_fixture(fixture)
|
29
|
-
File.read
|
33
|
+
File.read File.dirname(__FILE__) + "/xml/#{fixture}.xml"
|
30
34
|
end
|
31
35
|
|
32
36
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
2
|
+
<soapenv:Body>
|
3
|
+
<ns1:listResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://ws.example.com">
|
4
|
+
<listReturn soapenc:arrayType="ns2:HistoryEntry[3]" xsi:type="soapenc:Array" xmlns:ns2="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
|
5
|
+
<listReturn href="#id0"/>
|
6
|
+
<listReturn href="#id1"/>
|
7
|
+
<listReturn href="#id2"/>
|
8
|
+
</listReturn>
|
9
|
+
</ns1:listResponse>
|
10
|
+
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:HistoryEntry" xmlns:ns5="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
|
11
|
+
<date xsi:type="xsd:dateTime">2009-09-22T13:47:23.000Z</date>
|
12
|
+
<location xsi:type="soapenc:string">Archive</location>
|
13
|
+
<mailId href="#id9"/>
|
14
|
+
<referenceId href="#id8"/>
|
15
|
+
<state xsi:type="soapenc:string">Original</state>
|
16
|
+
<subject xsi:type="soapenc:string">Mail from 09-22-2009: Misc</subject>
|
17
|
+
</multiRef>
|
18
|
+
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns6:HistoryEntry" xmlns:ns6="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
|
19
|
+
<date xsi:type="xsd:dateTime">2009-04-30T06:38:34.000Z</date>
|
20
|
+
<location xsi:type="soapenc:string">Archive</location>
|
21
|
+
<mailId href="#id10"/>
|
22
|
+
<referenceId href="#id8"/>
|
23
|
+
<state xsi:type="soapenc:string">Original</state>
|
24
|
+
<subject xsi:type="soapenc:string">Mail from 04-29-2009: Technical support</subject>
|
25
|
+
</multiRef>
|
26
|
+
<multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:HistoryEntry" xmlns:ns7="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
|
27
|
+
<date xsi:type="xsd:dateTime">2009-12-18T15:43:21.000Z</date>
|
28
|
+
<location xsi:type="soapenc:string">Archive</location>
|
29
|
+
<mailId href="#id11"/>
|
30
|
+
<referenceId href="#id8"/>
|
31
|
+
<state xsi:type="soapenc:string">Original</state>
|
32
|
+
<subject xsi:type="soapenc:string">Mail from 12-17-2009: Misc</subject>
|
33
|
+
</multiRef>
|
34
|
+
<multiRef id="id11" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">972219</multiRef>
|
35
|
+
<multiRef id="id10" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">708021</multiRef>
|
36
|
+
<multiRef id="id8" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
|
37
|
+
<multiRef id="id9" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">855763</multiRef>
|
38
|
+
</soapenv:Body>
|
39
|
+
</soapenv:Envelope>
|
@@ -1,18 +1,18 @@
|
|
1
1
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m="http://www.example.org/timeouts">
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
</soap:Envelope>
|
2
|
+
<soap:Body>
|
3
|
+
<soap:Fault>
|
4
|
+
<Code>
|
5
|
+
<Value>soap:Sender</Value>
|
6
|
+
<Subcode>
|
7
|
+
<Value>m:MessageTimeout</Value>
|
8
|
+
</Subcode>
|
9
|
+
</Code>
|
10
|
+
<Reason>
|
11
|
+
<Text xml:lang="en">Sender Timeout</Text>
|
12
|
+
</Reason>
|
13
|
+
<Detail>
|
14
|
+
<m:MaxTime>P5M</m:MaxTime>
|
15
|
+
</Detail>
|
16
|
+
</soap:Fault>
|
17
|
+
</soap:Body>
|
18
|
+
</soap:Envelope>
|
@@ -20,7 +20,7 @@ private
|
|
20
20
|
def self.expectations
|
21
21
|
return @@expectations if @@expectations
|
22
22
|
|
23
|
-
file = File.read
|
23
|
+
file = File.read File.dirname(__FILE__) + "/wsdl_fixture.yml"
|
24
24
|
@@expectations = YAML.load ERB.new(file).result
|
25
25
|
end
|
26
26
|
|
@@ -30,7 +30,7 @@ private
|
|
30
30
|
def self.wsdl(wsdl)
|
31
31
|
return @@wsdl[wsdl] if @@wsdl[wsdl]
|
32
32
|
|
33
|
-
file = File.read
|
33
|
+
file = File.read File.dirname(__FILE__) + "/xml/#{wsdl}.xml"
|
34
34
|
@@wsdl[wsdl] = file
|
35
35
|
end
|
36
36
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "basic_spec_helper"
|
2
|
+
|
3
|
+
describe Savon do
|
4
|
+
before { @endpoint = "http://localhost:8080/http-basic-auth" }
|
5
|
+
|
6
|
+
it "should be able to handle HTTP basic authentication" do
|
7
|
+
client = Savon::Client.new @endpoint
|
8
|
+
client.request.basic_auth "user", "password"
|
9
|
+
response = client.do_something!
|
10
|
+
response.to_hash[:authenticate_response][:return][:success].should == true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "webrick"
|
2
|
+
|
3
|
+
include WEBrick
|
4
|
+
|
5
|
+
# Run WEBrick. Yields the server to a given block.
|
6
|
+
def run_webrick(config = {})
|
7
|
+
config.update :Port => 8080
|
8
|
+
server = HTTPServer.new config
|
9
|
+
yield server if block_given?
|
10
|
+
["INT", "TERM"].each { |signal| trap(signal) { server.shutdown } }
|
11
|
+
server.start
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns the SOAP response fixture for a given +file+.
|
15
|
+
def respond_with(file)
|
16
|
+
response_path = File.dirname(__FILE__) + "/../fixtures/response/xml"
|
17
|
+
File.read "#{response_path}/#{file}.xml"
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns HTML links for a given Hash of link URI's and names.
|
21
|
+
def link_to(links)
|
22
|
+
links.map { |link| "<a href='#{link[:uri]}'>#{link[:name]}</a>" }.join("<br>")
|
23
|
+
end
|
24
|
+
|
25
|
+
run_webrick do |server|
|
26
|
+
user, password, realm = "user", "password", "realm"
|
27
|
+
|
28
|
+
htdigest = HTTPAuth::Htdigest.new "/tmp/webrick-htdigest"
|
29
|
+
htdigest.set_passwd realm, user, password
|
30
|
+
authenticator = HTTPAuth::DigestAuth.new :UserDB => htdigest, :Realm => realm
|
31
|
+
|
32
|
+
# Homepage including links to subpages.
|
33
|
+
server.mount_proc("/") do |request, response|
|
34
|
+
response.body = link_to [
|
35
|
+
{ :uri => "http-basic-auth", :name => "HTTP basic auth" },
|
36
|
+
{ :uri => "http-digest-auth", :name => "HTTP digest auth" }
|
37
|
+
]
|
38
|
+
end
|
39
|
+
|
40
|
+
# HTTP basic authentication.
|
41
|
+
server.mount_proc("/http-basic-auth") do |request, response|
|
42
|
+
HTTPAuth.basic_auth(request, response, realm) { |u, p| u == user && p == password }
|
43
|
+
response.body = respond_with :authentication
|
44
|
+
end
|
45
|
+
|
46
|
+
# HTTP digest authentication.
|
47
|
+
server.mount_proc("/http-digest-auth") do |request, response|
|
48
|
+
authenticator.authenticate request, response
|
49
|
+
response.body = "HTTP digest authentication successfull"
|
50
|
+
end
|
51
|
+
end
|
data/spec/savon/client_spec.rb
CHANGED
@@ -3,32 +3,26 @@ require "spec_helper"
|
|
3
3
|
describe Savon::Client do
|
4
4
|
before { @client = Savon::Client.new EndpointHelper.wsdl_endpoint }
|
5
5
|
|
6
|
-
it "
|
7
|
-
Savon::Client.new EndpointHelper.wsdl_endpoint
|
6
|
+
it "should be initialized with an endpoint String" do
|
7
|
+
client = Savon::Client.new EndpointHelper.wsdl_endpoint
|
8
|
+
client.request.http.proxy?.should be_false
|
8
9
|
end
|
9
10
|
|
10
|
-
it "
|
11
|
-
Savon::Client.new EndpointHelper.wsdl_endpoint, :proxy =>
|
11
|
+
it "should accept a proxy URI via an optional Hash of options" do
|
12
|
+
client = Savon::Client.new EndpointHelper.wsdl_endpoint, :proxy => "http://proxy"
|
13
|
+
client.request.http.proxy?.should be_true
|
14
|
+
client.request.http.proxy_address == "http://proxy"
|
12
15
|
end
|
13
16
|
|
14
|
-
it "
|
15
|
-
|
16
|
-
:client_cert => "client cert",
|
17
|
-
:client_key => "client key",
|
18
|
-
:ca_file => "ca file",
|
19
|
-
:verify => OpenSSL::SSL::VERIFY_PEER
|
20
|
-
}
|
17
|
+
it "should have a method that returns the Savon::WSDL" do
|
18
|
+
@client.wsdl.should be_a(Savon::WSDL)
|
21
19
|
end
|
22
20
|
|
23
|
-
it "
|
24
|
-
@client.
|
21
|
+
it "should have a method that returns the Savon::Request" do
|
22
|
+
@client.request.should be_a(Savon::Request)
|
25
23
|
end
|
26
24
|
|
27
|
-
it "
|
28
|
-
@client.request.should be_a Savon::Request
|
29
|
-
end
|
30
|
-
|
31
|
-
it "responds to SOAP actions while still behaving as usual otherwise" do
|
25
|
+
it "should respond to available SOAP actions while behaving as expected otherwise" do
|
32
26
|
WSDLFixture.authentication(:operations).keys.each do |soap_action|
|
33
27
|
@client.respond_to?(soap_action).should be_true
|
34
28
|
end
|
@@ -37,61 +31,47 @@ describe Savon::Client do
|
|
37
31
|
@client.respond_to?(:some_undefined_method).should be_false
|
38
32
|
end
|
39
33
|
|
40
|
-
it "
|
41
|
-
@client.authenticate.should be_a
|
34
|
+
it "should dispatch available SOAP calls via method_missing and return the Savon::Response" do
|
35
|
+
@client.authenticate.should be_a(Savon::Response)
|
42
36
|
end
|
43
37
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
Savon::
|
48
|
-
|
49
|
-
expect_the_wsdl_to_be_disabled
|
50
|
-
@client.authenticate.should be_a Savon::Response
|
51
|
-
|
52
|
-
Savon::Client.wsdl = true
|
53
|
-
end
|
54
|
-
|
55
|
-
it "can be done per request" do
|
56
|
-
@client.wsdl = false
|
57
|
-
|
58
|
-
expect_the_wsdl_to_be_disabled
|
59
|
-
@client.authenticate.should be_a Savon::Response
|
38
|
+
it "should disable the Savon::WSDL when passed a method with an exclamation mark" do
|
39
|
+
@client.wsdl.enabled?.should be_true
|
40
|
+
[:respond_to?, :operations, :namespace_uri, :soap_endpoint].each do |method|
|
41
|
+
Savon::WSDL.any_instance.expects(method).never
|
60
42
|
end
|
61
43
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
Savon::WSDL.any_instance.expects(method).never
|
66
|
-
end
|
44
|
+
response = @client.authenticate! do |soap|
|
45
|
+
soap.input.should == "authenticate"
|
46
|
+
soap.input.should == "authenticate"
|
67
47
|
end
|
48
|
+
response.should be_a(Savon::Response)
|
49
|
+
@client.wsdl.enabled?.should be_false
|
68
50
|
end
|
69
51
|
|
70
|
-
it "
|
52
|
+
it "should raise a Savon::SOAPFault in case of a SOAP fault" do
|
71
53
|
client = Savon::Client.new EndpointHelper.wsdl_endpoint(:soap_fault)
|
72
|
-
client.
|
73
|
-
lambda { client.authenticate }.should raise_error Savon::SOAPFault
|
54
|
+
lambda { client.authenticate! }.should raise_error(Savon::SOAPFault)
|
74
55
|
end
|
75
56
|
|
76
|
-
it "
|
57
|
+
it "should raise a Savon::HTTPError in case of an HTTP error" do
|
77
58
|
client = Savon::Client.new EndpointHelper.wsdl_endpoint(:http_error)
|
78
|
-
client.
|
79
|
-
lambda { client.authenticate }.should raise_error Savon::HTTPError
|
59
|
+
lambda { client.authenticate! }.should raise_error(Savon::HTTPError)
|
80
60
|
end
|
81
61
|
|
82
|
-
it "
|
83
|
-
@client.authenticate { |soap| soap.should be_a
|
62
|
+
it "should yield an instance of Savon::SOAP to a given block expecting one argument" do
|
63
|
+
@client.authenticate { |soap| soap.should be_a(Savon::SOAP) }
|
84
64
|
end
|
85
65
|
|
86
|
-
it "
|
66
|
+
it "should yield an instance of Savon::SOAP and Savon::WSSE to a gven block expecting two arguments" do
|
87
67
|
@client.authenticate do |soap, wsse|
|
88
|
-
soap.should be_a
|
89
|
-
wsse.should be_a
|
68
|
+
soap.should be_a(Savon::SOAP)
|
69
|
+
wsse.should be_a(Savon::WSSE)
|
90
70
|
end
|
91
71
|
end
|
92
72
|
|
93
|
-
it "
|
94
|
-
lambda { @client.some_undefined_method }.should raise_error
|
73
|
+
it "should raise a NoMethodError when the method does not match an available SOAP action or method" do
|
74
|
+
lambda { @client.some_undefined_method }.should raise_error(NoMethodError)
|
95
75
|
end
|
96
76
|
|
97
77
|
end
|
@@ -2,26 +2,13 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Hash do
|
4
4
|
|
5
|
-
describe "
|
6
|
-
|
7
|
-
|
8
|
-
"faultcode" => "soap:Server", "faultstring" => "Fault occurred while processing."
|
9
|
-
} } } }
|
5
|
+
describe "find_soap_body" do
|
6
|
+
it "returns the content from the 'soap:Body' element" do
|
7
|
+
{ "soap:Envelope" => { "soap:Body" => "content" } }.find_soap_body.should == "content"
|
10
8
|
end
|
11
9
|
|
12
|
-
it "returns an empty Hash in case
|
13
|
-
|
14
|
-
|
15
|
-
result.should be_a Hash
|
16
|
-
result.should be_empty
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns the value of the last Regexp filter found in the Hash" do
|
20
|
-
@soap_fault_hash.find_regexp([".+:Envelope", ".+:Body"]).
|
21
|
-
should == @soap_fault_hash["soap:Envelope"]["soap:Body"]
|
22
|
-
|
23
|
-
@soap_fault_hash.find_regexp([/.+:Envelope/, /.+:Body/, /.+Fault/]).
|
24
|
-
should == @soap_fault_hash["soap:Envelope"]["soap:Body"]["soap:Fault"]
|
10
|
+
it "returns an empty Hash in case the 'soap:Body' element could not be found" do
|
11
|
+
{ "some_hash" => "content" }.find_soap_body.should == {}
|
25
12
|
end
|
26
13
|
end
|
27
14
|
|
@@ -39,8 +26,8 @@ describe Hash do
|
|
39
26
|
it "for a Hash with multiple keys" do
|
40
27
|
soap_xml = { :all => "users", :before => "whatever" }.to_soap_xml
|
41
28
|
|
42
|
-
soap_xml.should include
|
43
|
-
soap_xml.should include
|
29
|
+
soap_xml.should include("<all>users</all>")
|
30
|
+
soap_xml.should include("<before>whatever</before>")
|
44
31
|
end
|
45
32
|
|
46
33
|
it "for a Hash containing an Array" do
|
@@ -92,6 +79,23 @@ describe Hash do
|
|
92
79
|
{ :some => object }.to_soap_xml.should == "<some>#{object}</some>"
|
93
80
|
end
|
94
81
|
end
|
82
|
+
|
83
|
+
it "preserves the order of Hash keys and values specified through :@inorder" do
|
84
|
+
{ :find_user => { :name => "Lucy", :id => 666, :@inorder => [:id, :name] } }.to_soap_xml.
|
85
|
+
should == "<findUser><id>666</id><name>Lucy</name></findUser>"
|
86
|
+
|
87
|
+
{ :find_user => { :by_name => { :mname => "in the", :lname => "Sky", :fname => "Lucy",
|
88
|
+
:@inorder => [:fname, :mname, :lname] } } }.to_soap_xml. should ==
|
89
|
+
"<findUser><byName><fname>Lucy</fname><mname>in the</mname><lname>Sky</lname></byName></findUser>"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "raises an error if the :@inorder Array does not match the Hash keys" do
|
93
|
+
lambda { { :name => "Lucy", :id => 666, :@inorder => [:name] }.to_soap_xml }.
|
94
|
+
should raise_error(RuntimeError)
|
95
|
+
|
96
|
+
lambda { { :by_name => { :name => "Lucy", :lname => "Sky", :@inorder => [:mname, :name] } }.to_soap_xml }.
|
97
|
+
should raise_error(RuntimeError)
|
98
|
+
end
|
95
99
|
end
|
96
100
|
|
97
101
|
describe "map_soap_response" do
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Net::HTTP do
|
4
|
+
before do
|
5
|
+
@some_uri = URI "http://example.com"
|
6
|
+
@another_uri = URI "http://example.org"
|
7
|
+
@http = Net::HTTP.new @some_uri.host, @some_uri.port
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "endpoint" do
|
11
|
+
it "changes the address and port of a Net::HTTP object" do
|
12
|
+
@http.address.should == @some_uri.host
|
13
|
+
@http.port.should == @some_uri.port
|
14
|
+
|
15
|
+
@http.endpoint @another_uri.host, @another_uri.port
|
16
|
+
@http.address.should == @another_uri.host
|
17
|
+
@http.port.should == @another_uri.port
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "ssl_client_auth" do
|
22
|
+
it "accepts a Hash of options for SSL client authentication" do
|
23
|
+
@http.cert.should be_nil
|
24
|
+
@http.key.should be_nil
|
25
|
+
@http.ca_file.should be_nil
|
26
|
+
@http.verify_mode.should be_nil
|
27
|
+
|
28
|
+
@http.ssl_client_auth :cert => "cert", :key => "key",
|
29
|
+
:ca_file => "ca_file", :verify_mode => OpenSSL::SSL::VERIFY_PEER
|
30
|
+
|
31
|
+
@http.cert.should == "cert"
|
32
|
+
@http.key.should == "key"
|
33
|
+
@http.ca_file.should == "ca_file"
|
34
|
+
@http.verify_mode.should == OpenSSL::SSL::VERIFY_PEER
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|