r18455 reverted.
[ruby-svn.git] / test / xmlrpc / test_cookie.rb
blobc1be5c55772232ebca9889df90c893f3e3724869
1 require 'test/unit'
2 require 'time'
3 require 'webrick'
4 require File.join(File.dirname(__FILE__), 'webrick_testing')
5 require "xmlrpc/server"
6 require 'xmlrpc/client'
8 class TestCookie < Test::Unit::TestCase
9   include WEBrick_Testing
11   def create_servlet
12     s = XMLRPC::WEBrickServlet.new
14     def s.logged_in_users
15       @logged_in_users ||= {}
16     end
17     def s.request
18       @request
19     end
20     def s.response
21       @response
22     end
23     def s.service(request, response)
24       @request = request
25       @response = response
26       super
27     ensure
28       @request = nil
29       @response = nil
30     end
32     key = Time.now.to_i.to_s
33     valid_user = "valid-user"
34     s.add_handler("test.login") do |user, password|
35       ok = (user == valid_user and password == "secret")
36       if ok
37         s.logged_in_users[key] = user
38         expires = (Time.now + 60 * 60).httpdate
39         cookies = s.response.cookies
40         cookies << "key=\"#{key}\"; path=\"/RPC2\"; expires=#{expires}"
41         cookies << "user=\"#{user}\"; path=\"/RPC2\""
42       end
43       ok
44     end
46     s.add_handler("test.require_authenticate_echo") do |string|
47       cookies = {}
48       s.request.cookies.each do |cookie|
49         cookies[cookie.name] = cookie.value
50       end
51       if cookies == {"key" => key, "user" => valid_user}
52         string
53       else
54         raise XMLRPC::FaultException.new(29, "Authentication required")
55       end
56     end
58     s.set_default_handler do |name, *args|
59       raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
60             " or wrong number of parameters!")
61     end
63     s.add_introspection
65     s
66   end
68   def setup_http_server(port)
69     option = {:Port => port}
71     start_server(option) {|w| w.mount('/RPC2', create_servlet) }
73     @s = XMLRPC::Client.new3(:port => port)
74   end
76   PORT = 8070
77   def test_cookie
78     begin
79       setup_http_server(PORT)
80       do_test
81     ensure
82       stop_server
83     end
84   end
86   def do_test
87     assert(!@s.call("test.login", "invalid-user", "invalid-password"))
88     exception = assert_raise(XMLRPC::FaultException) do
89       @s.call("test.require_authenticate_echo", "Hello")
90     end
91     assert_equal(29, exception.faultCode)
93     assert(@s.call("test.login", "valid-user", "secret"))
94     assert_equal("Hello", @s.call("test.require_authenticate_echo", "Hello"))
95   end
96 end