* lib/xmlrpc/client.rb (new2): fix custom port specification when an
SSL uri is used. * test/xmlrpc/test_client.rb: tests for XMLRPC::Client.new2 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b854733d51
commit
60282ebfe5
@ -1,3 +1,9 @@
|
|||||||
|
Sat Mar 3 08:08:11 2012 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||||
|
|
||||||
|
* lib/xmlrpc/client.rb (new2): fix custom port specification when an
|
||||||
|
SSL uri is used.
|
||||||
|
* test/xmlrpc/test_client.rb: tests for XMLRPC::Client.new2
|
||||||
|
|
||||||
Sat Mar 3 08:03:29 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Mar 3 08:03:29 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/syck/rubyext.c (mktime_do): use ISDIGIT().
|
* ext/syck/rubyext.c (mktime_do): use ISDIGIT().
|
||||||
|
@ -279,6 +279,7 @@ require "xmlrpc/create"
|
|||||||
require "xmlrpc/config"
|
require "xmlrpc/config"
|
||||||
require "xmlrpc/utils" # ParserWriterChooseMixin
|
require "xmlrpc/utils" # ParserWriterChooseMixin
|
||||||
require "net/http"
|
require "net/http"
|
||||||
|
require "uri"
|
||||||
|
|
||||||
module XMLRPC
|
module XMLRPC
|
||||||
|
|
||||||
@ -344,15 +345,20 @@ module XMLRPC
|
|||||||
host, port = match[4].split(":")
|
host, port = match[4].split(":")
|
||||||
path = match[5]
|
path = match[5]
|
||||||
|
|
||||||
if proto != "http" and proto != "https"
|
case proto
|
||||||
|
when 'http' then port ||= 80
|
||||||
|
when 'https' then port ||= 443
|
||||||
|
else
|
||||||
raise "Wrong protocol specified. Only http or https allowed!"
|
raise "Wrong protocol specified. Only http or https allowed!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
port = port.to_i
|
||||||
else
|
else
|
||||||
raise "Wrong URI as parameter!"
|
raise "Wrong URI as parameter!"
|
||||||
end
|
end
|
||||||
|
|
||||||
proxy_host, proxy_port = (proxy || "").split(":")
|
proxy_host, proxy_port = (proxy || "").split(":")
|
||||||
|
proxy_port = proxy_port.to_i if proxy_port
|
||||||
|
|
||||||
self.new(host, path, port, proxy_host, proxy_port, user, passwd, (proto == "https"), timeout)
|
self.new(host, path, port, proxy_host, proxy_port, user, passwd, (proto == "https"), timeout)
|
||||||
end
|
end
|
||||||
|
102
test/xmlrpc/test_client.rb
Normal file
102
test/xmlrpc/test_client.rb
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
require 'minitest/autorun'
|
||||||
|
require 'xmlrpc/client'
|
||||||
|
|
||||||
|
module XMLRPC
|
||||||
|
class ClientTest < MiniTest::Unit::TestCase
|
||||||
|
class FakeClient < XMLRPC::Client
|
||||||
|
attr_reader :args
|
||||||
|
|
||||||
|
def initialize(*args)
|
||||||
|
@args = args
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_host_path_port
|
||||||
|
client = FakeClient.new2 'http://example.org/foo'
|
||||||
|
host, path, port, *rest = client.args
|
||||||
|
|
||||||
|
assert_equal 'example.org', host
|
||||||
|
assert_equal '/foo', path
|
||||||
|
assert_equal 80, port
|
||||||
|
|
||||||
|
rest.each { |x| refute x }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_custom_port
|
||||||
|
client = FakeClient.new2 'http://example.org:1234/foo'
|
||||||
|
host, path, port, *rest = client.args
|
||||||
|
|
||||||
|
assert_equal 'example.org', host
|
||||||
|
assert_equal '/foo', path
|
||||||
|
assert_equal 1234, port
|
||||||
|
|
||||||
|
rest.each { |x| refute x }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_ssl
|
||||||
|
client = FakeClient.new2 'https://example.org/foo'
|
||||||
|
host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
|
||||||
|
|
||||||
|
assert_equal 'example.org', host
|
||||||
|
assert_equal '/foo', path
|
||||||
|
assert_equal 443, port
|
||||||
|
assert use_ssl
|
||||||
|
|
||||||
|
refute proxy_host
|
||||||
|
refute proxy_port
|
||||||
|
refute user
|
||||||
|
refute password
|
||||||
|
refute timeout
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_ssl_custom_port
|
||||||
|
client = FakeClient.new2 'https://example.org:1234/foo'
|
||||||
|
host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
|
||||||
|
|
||||||
|
assert_equal 'example.org', host
|
||||||
|
assert_equal '/foo', path
|
||||||
|
assert_equal 1234, port
|
||||||
|
|
||||||
|
refute proxy_host
|
||||||
|
refute proxy_port
|
||||||
|
refute user
|
||||||
|
refute password
|
||||||
|
refute timeout
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_user_password
|
||||||
|
client = FakeClient.new2 'http://aaron:tenderlove@example.org/foo'
|
||||||
|
host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
|
||||||
|
|
||||||
|
[ host, path, port ].each { |x| assert x }
|
||||||
|
assert_equal 'aaron', user
|
||||||
|
assert_equal 'tenderlove', password
|
||||||
|
|
||||||
|
[ proxy_host, proxy_port, use_ssl, timeout ].each { |x| refute x }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_proxy_host
|
||||||
|
client = FakeClient.new2 'http://example.org/foo', 'example.com'
|
||||||
|
host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
|
||||||
|
|
||||||
|
[ host, path, port ].each { |x| assert x }
|
||||||
|
|
||||||
|
assert_equal 'example.com', proxy_host
|
||||||
|
|
||||||
|
[ user, password, proxy_port, use_ssl, timeout ].each { |x| refute x }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new2_proxy_port
|
||||||
|
client = FakeClient.new2 'http://example.org/foo', 'example.com:1234'
|
||||||
|
host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
|
||||||
|
|
||||||
|
[ host, path, port ].each { |x| assert x }
|
||||||
|
|
||||||
|
assert_equal 'example.com', proxy_host
|
||||||
|
assert_equal 1234, proxy_port
|
||||||
|
|
||||||
|
[ user, password, use_ssl, timeout ].each { |x| refute x }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user