@@ -180,7 +180,7 @@ def test_continue_request_400_if_method_name_is_empty(self):
180
180
self .assertEqual (len (request .producers ), 0 )
181
181
self .assertEqual (request ._error , 400 )
182
182
183
- def test_continue_request_500 (self ):
183
+ def test_continue_request_500_if_rpcinterface_method_call_raises (self ):
184
184
supervisor = DummySupervisor ()
185
185
subinterfaces = [('supervisor' , DummySupervisorRPCNamespace ())]
186
186
handler = self ._makeOne (supervisor , subinterfaces )
@@ -197,11 +197,38 @@ def test_continue_request_500(self):
197
197
self .assertEqual (len (logdata ), expected )
198
198
self .assertEqual (logdata [- 2 ],
199
199
u'XML-RPC method called: supervisor.raiseError()' )
200
- self .assertTrue (logdata [- 1 ].startswith ('Traceback' ))
201
- self .assertTrue (logdata [- 1 ].endswith ('ValueError: error\n ' ))
200
+ self .assertTrue ("unexpected exception" in logdata [1 ])
201
+ self .assertTrue (repr (data ) in logdata [- 1 ])
202
+ self .assertTrue ("Traceback" in logdata [- 1 ])
203
+ self .assertTrue ("ValueError: error" in logdata [- 1 ])
202
204
self .assertEqual (len (request .producers ), 0 )
203
205
self .assertEqual (request ._error , 500 )
204
206
207
+ def test_continue_request_500_if_xmlrpc_dumps_raises (self ):
208
+ supervisor = DummySupervisor ()
209
+ subinterfaces = [('supervisor' , DummySupervisorRPCNamespace ())]
210
+ handler = self ._makeOne (supervisor , subinterfaces )
211
+ import xmlrpclib
212
+ data = xmlrpclib .dumps ((), 'supervisor.getXmlRpcUnmarshallable' )
213
+ request = DummyRequest ('/what/ever' , None , None , None )
214
+ handler .continue_request (data , request )
215
+ logdata = supervisor .options .logger .data
216
+ from supervisor .xmlrpc import loads
217
+ if loads :
218
+ expected = 3
219
+ else :
220
+ expected = 4
221
+ self .assertEqual (len (logdata ), expected )
222
+ self .assertEqual (logdata [- 3 ],
223
+ 'XML-RPC method called: supervisor.getXmlRpcUnmarshallable()' )
224
+ self .assertEqual (logdata [- 2 ],
225
+ 'XML-RPC method supervisor.getXmlRpcUnmarshallable() '
226
+ 'returned successfully' )
227
+ self .assertTrue ("unexpected exception" in logdata [- 1 ])
228
+ self .assertTrue (repr (data ) in logdata [- 1 ])
229
+ self .assertTrue ("Traceback" in logdata [- 1 ])
230
+ self .assertTrue ("TypeError: cannot marshal" in logdata [- 1 ])
231
+
205
232
class TraverseTests (unittest .TestCase ):
206
233
def test_underscore (self ):
207
234
from supervisor import xmlrpc
0 commit comments