mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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:
		
							parent
							
								
									2fbc01fb56
								
							
						
					
					
						commit
						1ac1163f56
					
				
					 3 changed files with 116 additions and 15 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										18
									
								
								test/xmlrpc/data/blog.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								test/xmlrpc/data/blog.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tenderlove
						tenderlove