summaryrefslogtreecommitdiff
path: root/jni/ruby/test/xmlrpc/test_client.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/xmlrpc/test_client.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/xmlrpc/test_client.rb')
-rw-r--r--jni/ruby/test/xmlrpc/test_client.rb317
1 files changed, 317 insertions, 0 deletions
diff --git a/jni/ruby/test/xmlrpc/test_client.rb b/jni/ruby/test/xmlrpc/test_client.rb
new file mode 100644
index 0000000..83f8c6b
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_client.rb
@@ -0,0 +1,317 @@
+require 'minitest/autorun'
+require 'xmlrpc/client'
+require 'net/http'
+begin
+ require 'openssl'
+rescue LoadError
+end
+
+module XMLRPC
+ class ClientTest < MiniTest::Unit::TestCase
+ module Fake
+ class HTTP
+ attr_accessor :read_timeout, :open_timeout, :use_ssl
+
+ def initialize responses = {}
+ @started = false
+ @responses = responses
+ end
+
+ def started?
+ @started
+ end
+
+ def start
+ @started = true
+ if block_given?
+ begin
+ return yield(self)
+ ensure
+ @started = false
+ end
+ end
+ self
+ end
+
+ def request_post path, request, headers
+ @responses[path].shift
+ end
+ end
+
+ class Client < XMLRPC::Client
+ attr_reader :args, :http
+
+ def initialize(*args)
+ @args = args
+ super
+ end
+
+ private
+ def net_http host, port, proxy_host, proxy_port
+ HTTP.new
+ end
+ end
+
+ class Response
+ def self.new body, fields = [], status = '200'
+ klass = Class.new(Net::HTTPResponse::CODE_TO_OBJ[status]) {
+ def initialize(*args)
+ super
+ @read = true
+ end
+ }
+
+ resp = klass.new '1.1', status, 'OK'
+ resp.body = body
+ fields.each do |k,v|
+ resp.add_field k, v
+ end
+ resp
+ end
+ end
+ end
+
+ def test_new2_host_path_port
+ client = Fake::Client.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 = Fake::Client.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 = Fake::Client.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 if defined?(OpenSSL)
+
+ def test_new2_ssl_custom_port
+ client = Fake::Client.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
+ assert use_ssl
+
+ refute proxy_host
+ refute proxy_port
+ refute user
+ refute password
+ refute timeout
+ end if defined?(OpenSSL)
+
+ def test_new2_user_password
+ client = Fake::Client.new2 'http://aaron:tenderlove@example.org/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 = Fake::Client.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 = Fake::Client.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
+
+ def test_new2_no_path
+ client = Fake::Client.new2 'http://example.org'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_nil path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_slash_path
+ client = Fake::Client.new2 'http://example.org/'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/', path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_bad_protocol
+ assert_raises(ArgumentError) do
+ XMLRPC::Client.new2 'ftp://example.org'
+ end
+ end
+
+ def test_new2_bad_uri
+ assert_raises(ArgumentError) do
+ XMLRPC::Client.new2 ':::::'
+ end
+ end
+
+ def test_new2_path_with_query
+ client = Fake::Client.new2 'http://example.org/foo?bar=baz'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo?bar=baz', path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_request
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh, [['Content-Type', 'text/xml']]) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ def test_async_request
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh, [['Content-Type', 'text/xml']]) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call_async('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ # make a request without content-type header
+ def test_bad_content_type
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ def test_i8_tag
+ fh = read('blog.xml').gsub(/string/, 'i8')
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ assert_equal 1, resp.first['blogid']
+ end
+
+ def test_cookie_simple
+ client = Fake::Client.new2('http://example.org/cookie')
+ assert_nil(client.cookie)
+ client.send(:parse_set_cookies, ["param1=value1", "param2=value2"])
+ assert_equal("param1=value1; param2=value2", client.cookie)
+ end
+
+ def test_cookie_override
+ client = Fake::Client.new2('http://example.org/cookie')
+ client.send(:parse_set_cookies,
+ [
+ "param1=value1",
+ "param2=value2",
+ "param1=value3",
+ ])
+ assert_equal("param2=value2; param1=value3", client.cookie)
+ end
+
+ private
+ def read filename
+ File.read File.expand_path(File.join(__FILE__, '..', 'data', filename))
+ end
+
+ def fake_client responses
+ Class.new(Fake::Client) {
+ define_method(:net_http) { |*_| Fake::HTTP.new(responses) }
+ }
+ end
+ end
+end