ruby-changes:22833
From: tenderlove <ko1@a...>
Date: Sat, 3 Mar 2012 08:12:43 +0900 (JST)
Subject: [ruby-changes:22833] tenderlove:r34882 (trunk): * lib/xmlrpc/client.rb (new2): fix custom port specification when an
tenderlove 2012-03-03 08:12:32 +0900 (Sat, 03 Mar 2012) New Revision: 34882 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34882 Log: * 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 Added files: trunk/test/xmlrpc/test_client.rb Modified files: trunk/ChangeLog trunk/lib/xmlrpc/client.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 34881) +++ ChangeLog (revision 34882) @@ -1,3 +1,9 @@ +Sat Mar 3 08:08:11 2012 Aaron Patterson <aaron@t...> + + * 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@r...> * ext/syck/rubyext.c (mktime_do): use ISDIGIT(). Index: lib/xmlrpc/client.rb =================================================================== --- lib/xmlrpc/client.rb (revision 34881) +++ lib/xmlrpc/client.rb (revision 34882) @@ -279,6 +279,7 @@ require "xmlrpc/config" require "xmlrpc/utils" # ParserWriterChooseMixin require "net/http" +require "uri" module XMLRPC @@ -344,15 +345,20 @@ host, port = match[4].split(":") 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!" end + port = port.to_i else raise "Wrong URI as parameter!" end 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) end Index: test/xmlrpc/test_client.rb =================================================================== --- test/xmlrpc/test_client.rb (revision 0) +++ test/xmlrpc/test_client.rb (revision 34882) @@ -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@e.../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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/