[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]