Pārlūkot izejas kodu

Add tests for iterparse loader and deal with logging differences when cElementTree is installed.

Chris McDonough 18 gadi atpakaļ
vecāks
revīzija
c77e3f3e55
1 mainītis faili ar 89 papildinājumiem un 10 dzēšanām
  1. 89 10
      src/supervisor/tests/test_xmlrpc.py

+ 89 - 10
src/supervisor/tests/test_xmlrpc.py

@@ -51,10 +51,15 @@ class XMLRPCHandlerTests(unittest.TestCase):
         request = DummyRequest('/what/ever', None, None, None)
         handler.continue_request(data, request)
         logdata = supervisor.options.logger.data
-        self.assertEqual(len(logdata), 2)
-        self.assertEqual(logdata[0],
+        from supervisor.xmlrpc import loads
+        if loads:
+            expected = 2
+        else:
+            expected = 3
+        self.assertEqual(len(logdata), expected)
+        self.assertEqual(logdata[-2],
                          u'XML-RPC method called: supervisor.noSuchMethod()')
-        self.assertEqual(logdata[1],
+        self.assertEqual(logdata[-1],
            (u'XML-RPC method supervisor.noSuchMethod() returned fault: '
             '[1] UNKNOWN_METHOD'))
         self.assertEqual(len(request.producers), 1)
@@ -70,10 +75,15 @@ class XMLRPCHandlerTests(unittest.TestCase):
         request = DummyRequest('/what/ever', None, None, None)
         handler.continue_request(data, request)
         logdata = supervisor.options.logger.data
-        self.assertEqual(len(logdata), 2)
-        self.assertEqual(logdata[0],
+        from supervisor.xmlrpc import loads
+        if loads:
+            expected = 2
+        else:
+            expected = 3
+        self.assertEqual(len(logdata), expected)
+        self.assertEqual(logdata[-2],
                u'XML-RPC method called: supervisor.getAPIVersion()')
-        self.assertEqual(logdata[1],
+        self.assertEqual(logdata[-1],
             u'XML-RPC method supervisor.getAPIVersion() returned successfully')
         self.assertEqual(len(request.producers), 1)
         xml_response = request.producers[0]
@@ -92,11 +102,16 @@ class XMLRPCHandlerTests(unittest.TestCase):
         request = DummyRequest('/what/ever', None, None, None)
         handler.continue_request(data, request)
         logdata = supervisor.options.logger.data
-        self.assertEqual(len(logdata), 2)
-        self.assertEqual(logdata[0],
+        from supervisor.xmlrpc import loads
+        if loads:
+            expected = 2
+        else:
+            expected = 3
+        self.assertEqual(len(logdata), expected)
+        self.assertEqual(logdata[-2],
                u'XML-RPC method called: supervisor.raiseError()')
-        self.failUnless(logdata[1].startswith('Traceback'))
-        self.failUnless(logdata[1].endswith('ValueError: error\n'))
+        self.failUnless(logdata[-1].startswith('Traceback'))
+        self.failUnless(logdata[-1].endswith('ValueError: error\n'))
         self.assertEqual(len(request.producers), 0)
         self.assertEqual(request._error, 500)
 
@@ -223,6 +238,70 @@ class TesstSupervisorTransport(unittest.TestCase):
         # would be an AttributeError for _use_datetime under Python 2.5
         parser, unmarshaller = instance.getparser() # this uses _use_datetime
 
+class TestIterparseLoads(unittest.TestCase):
+    def test_iterparse_loads_methodcall(self):
+        s = """<?xml version="1.0"?>
+        <methodCall>
+        <methodName>examples.getStateName</methodName>
+        <params>
+        <param>
+        <value><i4>41</i4></value>
+        </param>
+        <param>
+        <value><int>14</int></value>
+        </param>
+        <param>
+        <value><boolean>1</boolean></value>
+        </param>
+        <param>
+        <value><string>hello world</string></value>
+        </param>
+        <param>
+        <value><double>-12.214</double></value>
+        </param>
+        <param>
+        <value><dateTime.iso8601>19980717T14:08:55</dateTime.iso8601></value>
+        </param>
+        <param>
+        <value><base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64></value>
+        </param>
+        <param>
+        <struct>
+          <member><name>k</name><value><i4>5</i4></value></member>
+        </struct>
+        </param>
+        <param>
+        <array><data><value><i4>12</i4></value></data></array>
+        </param>
+        <param>
+        <struct>
+        <member>
+          <name>k</name>
+          <value><array><data><value><i4>1</i4></value></data></array></value>
+        </member>
+        </struct>
+        </param>
+        </params>
+        </methodCall>
+        """
+        from supervisor.xmlrpc import loads
+        if loads is None:
+            return # no cElementTree
+        result = loads(s)
+        params, method = result
+        import datetime
+        self.assertEqual(method, 'examples.getStateName')
+        self.assertEqual(params[0], 41)
+        self.assertEqual(params[1], 14)
+        self.assertEqual(params[2], True)
+        self.assertEqual(params[3], 'hello world')
+        self.assertEqual(params[4], -12.214)
+        self.assertEqual(params[5], datetime.datetime(1998, 7, 17, 14, 8, 55))
+        self.assertEqual(params[6], "you can't read this!")
+        self.assertEqual(params[7], {'k': 5})
+        self.assertEqual(params[8], [12])
+        self.assertEqual(params[9], {'k': [1]})
+
 class DummyResponse:
     def __init__(self, status=200, body='', reason='reason'):
         self.status = status