From 17ea268764744446d003c2c8e7dd299e61ebd0fb Mon Sep 17 00:00:00 2001 From: kou Date: Tue, 15 Apr 2008 14:10:18 +0000 Subject: * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403] * test/xmlrpc/test_cookie.rb: add a test for the above fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/xmlrpc/test_cookie.rb | 96 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/xmlrpc/test_cookie.rb (limited to 'test') diff --git a/test/xmlrpc/test_cookie.rb b/test/xmlrpc/test_cookie.rb new file mode 100644 index 0000000000..c1be5c5577 --- /dev/null +++ b/test/xmlrpc/test_cookie.rb @@ -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 -- cgit v1.2.3