test_xmlrpc.py (4952B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_xmlrpc.py 2 import sys 3 from xmlrpclib import DateTime, Fault, ServerProxy, SafeTransport 4 5 class HTTPSTransport(SafeTransport): 6 7 def request(self, host, handler, request_body, verbose = 0): 8 h = self.make_connection(host) 9 if verbose: 10 h.set_debuglevel(1) 11 self.send_request(h, handler, request_body) 12 self.send_host(h, host) 13 self.send_user_agent(h) 14 self.send_content(h, request_body) 15 errcode, errmsg, headers = h.getreply() 16 if errcode != 200: 17 raise xmlrpclib.ProtocolError(host + handler, errcode, errmsg, headers) 18 self.verbose = verbose 19 return self.parse_response(h.getfile()) 20 21 22 import cherrypy 23 24 def setup_server(): 25 from cherrypy import _cptools 26 27 class Root: 28 29 def index(self): 30 return "I'm a standard index!" 31 32 index.exposed = True 33 34 class XmlRpc(_cptools.XMLRPCController): 35 36 def foo(self): 37 return 'Hello world!' 38 39 foo.exposed = True 40 41 def return_single_item_list(self): 42 return [42] 43 44 return_single_item_list.exposed = True 45 46 def return_string(self): 47 return 'here is a string' 48 49 return_string.exposed = True 50 51 def return_tuple(self): 52 return ('here', 'is', 1, 'tuple') 53 54 return_tuple.exposed = True 55 56 def return_dict(self): 57 return dict(a=1, b=2, c=3) 58 59 return_dict.exposed = True 60 61 def return_composite(self): 62 return (dict(a=1, z=26), 'hi', ['welcome', 'friend']) 63 64 return_composite.exposed = True 65 66 def return_int(self): 67 return 42 68 69 return_int.exposed = True 70 71 def return_float(self): 72 return 3.14 73 74 return_float.exposed = True 75 76 def return_datetime(self): 77 return DateTime((2003, 10, 7, 8, 1, 0, 1, 280, -1)) 78 79 return_datetime.exposed = True 80 81 def return_boolean(self): 82 return True 83 84 return_boolean.exposed = True 85 86 def test_argument_passing(self, num): 87 return num * 2 88 89 test_argument_passing.exposed = True 90 91 def test_returning_Fault(self): 92 return Fault(1, 'custom Fault response') 93 94 test_returning_Fault.exposed = True 95 96 root = Root() 97 root.xmlrpc = XmlRpc() 98 cherrypy.tree.mount(root, config={'/': {'request.dispatch': cherrypy.dispatch.XMLRPCDispatcher(), 99 'tools.xmlrpc.allow_none': 0}}) 100 101 102 from cherrypy.test import helper 103 104 class XmlRpcTest(helper.CPWebCase): 105 setup_server = staticmethod(setup_server) 106 107 def testXmlRpc(self): 108 scheme = 'http' 109 try: 110 scheme = self.harness.scheme 111 except AttributeError: 112 pass 113 114 if scheme == 'https': 115 url = 'https://%s:%s/xmlrpc/' % (self.interface(), self.PORT) 116 proxy = ServerProxy(url, transport=HTTPSTransport()) 117 else: 118 url = 'http://%s:%s/xmlrpc/' % (self.interface(), self.PORT) 119 proxy = ServerProxy(url) 120 self.getPage('/xmlrpc/foo') 121 self.assertBody('Hello world!') 122 self.assertEqual(proxy.return_single_item_list(), [42]) 123 self.assertNotEqual(proxy.return_single_item_list(), 'one bazillion') 124 self.assertEqual(proxy.return_string(), 'here is a string') 125 self.assertEqual(proxy.return_tuple(), list(('here', 'is', 1, 'tuple'))) 126 self.assertEqual(proxy.return_dict(), {'a': 1, 127 'c': 3, 128 'b': 2}) 129 self.assertEqual(proxy.return_composite(), [{'a': 1, 130 'z': 26}, 'hi', ['welcome', 'friend']]) 131 self.assertEqual(proxy.return_int(), 42) 132 self.assertEqual(proxy.return_float(), 3.14) 133 self.assertEqual(proxy.return_datetime(), DateTime((2003, 10, 7, 8, 1, 0, 1, 280, -1))) 134 self.assertEqual(proxy.return_boolean(), True) 135 self.assertEqual(proxy.test_argument_passing(22), 44) 136 try: 137 proxy.test_argument_passing({}) 138 except Exception: 139 x = sys.exc_info()[1] 140 self.assertEqual(x.__class__, Fault) 141 self.assertEqual(x.faultString, "unsupported operand type(s) for *: 'dict' and 'int'") 142 else: 143 self.fail('Expected xmlrpclib.Fault') 144 145 try: 146 proxy.non_method() 147 except Exception: 148 x = sys.exc_info()[1] 149 self.assertEqual(x.__class__, Fault) 150 self.assertEqual(x.faultString, 'method "non_method" is not supported') 151 else: 152 self.fail('Expected xmlrpclib.Fault') 153 154 try: 155 proxy.test_returning_Fault() 156 except Exception: 157 x = sys.exc_info()[1] 158 self.assertEqual(x.__class__, Fault) 159 self.assertEqual(x.faultString, 'custom Fault response') 160 else: 161 self.fail('Expected xmlrpclib.Fault')