ruby-changes:4549
From: ko1@a...
Date: Tue, 15 Apr 2008 23:10:33 +0900 (JST)
Subject: [ruby-changes:4549] kou - Ruby:r16042 (trunk): * lib/xmlrpc/client.rb: fix cookie handling.
kou 2008-04-15 23:10:18 +0900 (Tue, 15 Apr 2008) New Revision: 16042 Added files: trunk/test/xmlrpc/test_cookie.rb Modified files: trunk/ChangeLog trunk/lib/xmlrpc/client.rb Log: * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403] * test/xmlrpc/test_cookie.rb: add a test for the above fix. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/xmlrpc/client.rb?r1=16042&r2=16041&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16042&r2=16041&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/xmlrpc/test_cookie.rb?revision=16042&view=markup Index: ChangeLog =================================================================== --- ChangeLog (revision 16041) +++ ChangeLog (revision 16042) @@ -1,3 +1,9 @@ +Tue Apr 15 23:08:46 2008 Kouhei Sutou <kou@c...> + + * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403] + + * test/xmlrpc/test_cookie.rb: add a test for the above fix. + Tue Apr 15 19:20:14 2008 Yukihiro Matsumoto <matz@r...> * io.c: #undef rb_argv moved before #define. Index: lib/xmlrpc/client.rb =================================================================== --- lib/xmlrpc/client.rb (revision 16041) +++ lib/xmlrpc/client.rb (revision 16042) @@ -565,8 +565,13 @@ raise "Wrong size. Was #{data.size}, should be #{expected}" end - c = resp["Set-Cookie"] - @cookie = c if c + set_cookies = resp.get_fields("Set-Cookie") + if set_cookies and !set_cookies.empty? + @cookie = set_cookies.collect do |set_cookie| + cookie = WEBrick::Cookie.parse_set_cookie(set_cookie) + WEBrick::Cookie.new(cookie.name, cookie.value).to_s + end.join("; ") + end return data end Index: test/xmlrpc/test_cookie.rb =================================================================== --- test/xmlrpc/test_cookie.rb (revision 0) +++ test/xmlrpc/test_cookie.rb (revision 16042) @@ -0,0 +1,96 @@ +require 'test/unit' +require 'time' +require 'webrick' +require File.join(File.dirname(__FILE__), 'webrick_testing') +require "xmlrpc/server" +require 'xmlrpc/client' + +class TestCookie < Test::Unit::TestCase + include WEBrick_Testing + + def create_servlet + s = XMLRPC::WEBrickServlet.new + + def s.logged_in_users + @logged_in_users ||= {} + end + def s.request + @request + end + def s.response + @response + end + def s.service(request, response) + @request = request + @response = response + super + ensure + @request = nil + @response = nil + end + + key = Time.now.to_i.to_s + valid_user = "valid-user" + s.add_handler("test.login") do |user, password| + ok = (user == valid_user and password == "secret") + if ok + s.logged_in_users[key] = user + expires = (Time.now + 60 * 60).httpdate + cookies = s.response.cookies + cookies << "key=\"#{key}\"; path=\"/RPC2\"; expires=#{expires}" + cookies << "user=\"#{user}\"; path=\"/RPC2\"" + end + ok + end + + s.add_handler("test.require_authenticate_echo") do |string| + cookies = {} + s.request.cookies.each do |cookie| + cookies[cookie.name] = cookie.value + end + if cookies == {"key" => key, "user" => valid_user} + string + else + raise XMLRPC::FaultException.new(29, "Authentication required") + end + end + + s.set_default_handler do |name, *args| + raise XMLRPC::FaultException.new(-99, "Method #{name} missing" + + " or wrong number of parameters!") + end + + s.add_introspection + + s + end + + def setup_http_server(port) + option = {:Port => port} + + start_server(option) {|w| w.mount('/RPC2', create_servlet) } + + @s = XMLRPC::Client.new3(:port => port) + end + + PORT = 8070 + def test_cookie + begin + setup_http_server(PORT) + do_test + ensure + stop_server + end + end + + def do_test + assert(!@s.call("test.login", "invalid-user", "invalid-password")) + exception = assert_raise(XMLRPC::FaultException) do + @s.call("test.require_authenticate_echo", "Hello") + end + assert_equal(29, exception.faultCode) + + assert(@s.call("test.login", "valid-user", "secret")) + assert_equal("Hello", @s.call("test.require_authenticate_echo", "Hello")) + end +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/