Package cherrypy :: Package test :: Module test_xmlrpc
[hide private]
[frames] | no frames]

Source Code for Module cherrypy.test.test_xmlrpc

  1  from cherrypy.test import test 
  2  test.prefer_parent_path() 
  3  import xmlrpclib 
  4   
  5  import cherrypy 
  6   
  7   
8 -def setup_server():
9 from cherrypy import _cptools 10 11 class Root: 12 def index(self): 13 return "I'm a standard index!"
14 index.exposed = True 15 16 17 class XmlRpc(_cptools.XMLRPCController): 18 19 def return_single_item_list(self): 20 return [42] 21 return_single_item_list.exposed = True 22 23 def return_string(self): 24 return "here is a string" 25 return_string.exposed = True 26 27 def return_tuple(self): 28 return ('here', 'is', 1, 'tuple') 29 return_tuple.exposed = True 30 31 def return_dict(self): 32 return dict(a=1, b=2, c=3) 33 return_dict.exposed = True 34 35 def return_composite(self): 36 return dict(a=1,z=26), 'hi', ['welcome', 'friend'] 37 return_composite.exposed = True 38 39 def return_int(self): 40 return 42 41 return_int.exposed = True 42 43 def return_float(self): 44 return 3.14 45 return_float.exposed = True 46 47 def return_datetime(self): 48 return xmlrpclib.DateTime((2003, 10, 7, 8, 1, 0, 1, 280, -1)) 49 return_datetime.exposed = True 50 51 def return_boolean(self): 52 return True 53 return_boolean.exposed = True 54 55 def test_argument_passing(self, num): 56 return num * 2 57 test_argument_passing.exposed = True 58 59 root = Root() 60 root.xmlrpc = XmlRpc() 61 cherrypy.tree.mount(root, config={'/': { 62 'request.dispatch': cherrypy.dispatch.XMLRPCDispatcher(), 63 }}) 64 cherrypy.config.update({'environment': 'test_suite'}) 65 66
67 -class HTTPSTransport(xmlrpclib.SafeTransport):
68 """Subclass of SafeTransport to fix sock.recv errors (by using file).""" 69
70 - def request(self, host, handler, request_body, verbose=0):
71 # issue XML-RPC request 72 h = self.make_connection(host) 73 if verbose: 74 h.set_debuglevel(1) 75 76 self.send_request(h, handler, request_body) 77 self.send_host(h, host) 78 self.send_user_agent(h) 79 self.send_content(h, request_body) 80 81 errcode, errmsg, headers = h.getreply() 82 if errcode != 200: 83 raise xmlrpclib.ProtocolError(host + handler, errcode, errmsg, 84 headers) 85 86 self.verbose = verbose 87 return self.parse_response(h.getfile())
88 89 90 from cherrypy.test import helper 91
92 -class XmlRpcTest(helper.CPWebCase):
93 - def testXmlRpc(self):
94 95 # load the appropriate xmlrpc proxy 96 if getattr(self.harness, "scheme", "http") == "https": 97 url = 'https://%s:%s/xmlrpc/' % (self.HOST, self.PORT) 98 proxy = xmlrpclib.ServerProxy(url, transport=HTTPSTransport()) 99 else: 100 url = 'http://%s:%s/xmlrpc/' % (self.HOST, self.PORT) 101 proxy = xmlrpclib.ServerProxy(url) 102 103 # begin the tests ... 104 self.assertEqual(proxy.return_single_item_list(), [42]) 105 self.assertNotEqual(proxy.return_single_item_list(), 'one bazillion') 106 self.assertEqual(proxy.return_string(), "here is a string") 107 self.assertEqual(proxy.return_tuple(), list(('here', 'is', 1, 'tuple'))) 108 self.assertEqual(proxy.return_dict(), {'a': 1, 'c': 3, 'b': 2}) 109 self.assertEqual(proxy.return_composite(), 110 [{'a': 1, 'z': 26}, 'hi', ['welcome', 'friend']]) 111 self.assertEqual(proxy.return_int(), 42) 112 self.assertEqual(proxy.return_float(), 3.14) 113 self.assertEqual(proxy.return_datetime(), 114 xmlrpclib.DateTime((2003, 10, 7, 8, 1, 0, 1, 280, -1))) 115 self.assertEqual(proxy.return_boolean(), True) 116 self.assertEqual(proxy.test_argument_passing(22), 22 * 2) 117 118 # Test an error in the page handler (should raise an xmlrpclib.Fault) 119 try: 120 proxy.test_argument_passing({}) 121 except Exception, x: 122 self.assertEqual(x.__class__, xmlrpclib.Fault) 123 self.assertEqual(x.faultString, ("unsupported operand type(s) " 124 "for *: 'dict' and 'int'")) 125 else: 126 self.fail("Expected xmlrpclib.Fault") 127 128 # http://www.cherrypy.org/ticket/533 129 # if a method is not found, an xmlrpclib.Fault should be raised 130 try: 131 proxy.non_method() 132 except Exception, x: 133 self.assertEqual(x.__class__, xmlrpclib.Fault) 134 self.assertEqual(x.faultString, 'method "non_method" is not supported') 135 else: 136 self.fail("Expected xmlrpclib.Fault")
137 138 139 if __name__ == '__main__': 140 setup_server() 141 helper.testmain() 142