зеркало из https://github.com/github/ruby.git
* test/xmlrpc/test_client.rb: adding a test for performing an XMLRPC
call. * test/xmlrpc/data/blog.xml: supporting XML document for the response. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34933 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
2fbc01fb56
Коммит
1ac1163f56
|
@ -1,3 +1,9 @@
|
|||
Wed Mar 7 07:39:28 2012 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* test/xmlrpc/test_client.rb: adding a test for performing an XMLRPC
|
||||
call.
|
||||
* test/xmlrpc/data/blog.xml: supporting XML document for the response.
|
||||
|
||||
Tue Mar 6 16:24:01 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* parse.y (parser_tokadd_string): escape simple regexp meta
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0"?>
|
||||
<methodResponse>
|
||||
<params>
|
||||
<param>
|
||||
<value>
|
||||
<array><data>
|
||||
<value><struct>
|
||||
<member><name>isAdmin</name><value><boolean>1</boolean></value></member>
|
||||
<member><name>url</name><value><string>http://tenderlovemaking.com/</string></value></member>
|
||||
<member><name>blogid</name><value><string>1</string></value></member>
|
||||
<member><name>blogName</name><value><string>Tender Lovemaking</string></value></member>
|
||||
<member><name>xmlrpc</name><value><string>http://tenderlovemaking.com/xmlrpc.php</string></value></member>
|
||||
</struct></value>
|
||||
</data></array>
|
||||
</value>
|
||||
</param>
|
||||
</params>
|
||||
</methodResponse>
|
|
@ -1,19 +1,63 @@
|
|||
require 'minitest/autorun'
|
||||
require 'xmlrpc/client'
|
||||
require 'net/http'
|
||||
|
||||
module XMLRPC
|
||||
class ClientTest < MiniTest::Unit::TestCase
|
||||
class FakeClient < XMLRPC::Client
|
||||
attr_reader :args
|
||||
module Fake
|
||||
class HTTP
|
||||
attr_accessor :read_timeout, :open_timeout, :use_ssl
|
||||
|
||||
def initialize(*args)
|
||||
@args = args
|
||||
super
|
||||
def initialize responses = {}
|
||||
@started = false
|
||||
@responses = responses
|
||||
end
|
||||
|
||||
def started?
|
||||
@started
|
||||
end
|
||||
def start; @started = true; 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 = FakeClient.new2 'http://example.org/foo'
|
||||
client = Fake::Client.new2 'http://example.org/foo'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
|
@ -24,7 +68,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_custom_port
|
||||
client = FakeClient.new2 'http://example.org:1234/foo'
|
||||
client = Fake::Client.new2 'http://example.org:1234/foo'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
|
@ -35,7 +79,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_ssl
|
||||
client = FakeClient.new2 'https://example.org/foo'
|
||||
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
|
||||
|
@ -51,7 +95,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_ssl_custom_port
|
||||
client = FakeClient.new2 'https://example.org:1234/foo'
|
||||
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
|
||||
|
@ -66,7 +110,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_user_password
|
||||
client = FakeClient.new2 'http://aaron:tenderlove@example.org/foo'
|
||||
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 }
|
||||
|
@ -77,7 +121,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_proxy_host
|
||||
client = FakeClient.new2 'http://example.org/foo', 'example.com'
|
||||
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 }
|
||||
|
@ -88,7 +132,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_proxy_port
|
||||
client = FakeClient.new2 'http://example.org/foo', 'example.com:1234'
|
||||
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 }
|
||||
|
@ -100,7 +144,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_no_path
|
||||
client = FakeClient.new2 'http://example.org'
|
||||
client = Fake::Client.new2 'http://example.org'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
|
@ -111,7 +155,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_slash_path
|
||||
client = FakeClient.new2 'http://example.org/'
|
||||
client = Fake::Client.new2 'http://example.org/'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
|
@ -134,7 +178,7 @@ module XMLRPC
|
|||
end
|
||||
|
||||
def test_new2_path_with_query
|
||||
client = FakeClient.new2 'http://example.org/foo?bar=baz'
|
||||
client = Fake::Client.new2 'http://example.org/foo?bar=baz'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
|
@ -143,5 +187,38 @@ module XMLRPC
|
|||
|
||||
rest.each { |x| refute x }
|
||||
end
|
||||
|
||||
def test_bad_content_type
|
||||
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
|
||||
|
||||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче