@@ -269,28 +269,89 @@ def test_continue_request_500_if_xmlrpc_dumps_raises(self):
269
269
self .assertEqual (request ._error , 500 )
270
270
271
271
class TraverseTests (unittest .TestCase ):
272
- def test_underscore (self ):
272
+ def test_security_disallows_underscore_methods (self ):
273
273
from supervisor import xmlrpc
274
- self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse , None , '_' , None )
274
+ class Root :
275
+ pass
276
+ class A :
277
+ def _danger (self ):
278
+ return True
279
+ root = Root ()
280
+ root .a = A ()
281
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
282
+ root , 'a._danger' , [])
283
+
284
+ def test_security_disallows_object_traversal (self ):
285
+ from supervisor import xmlrpc
286
+ class Root :
287
+ pass
288
+ class A :
289
+ pass
290
+ class B :
291
+ def danger (self ):
292
+ return True
293
+ root = Root ()
294
+ root .a = A ()
295
+ root .a .b = B ()
296
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
297
+ root , 'a.b.danger' , [])
298
+
299
+ def test_namespace_name_not_found (self ):
300
+ from supervisor import xmlrpc
301
+ class Root :
302
+ pass
303
+ root = Root ()
304
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
305
+ root , 'notfound.hello' , None )
275
306
276
- def test_notfound (self ):
307
+ def test_method_name_not_found (self ):
277
308
from supervisor import xmlrpc
278
- self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse , None , 'foo' , None )
309
+ class Root :
310
+ pass
311
+ class A :
312
+ pass
313
+ root = Root ()
314
+ root .a = A ()
315
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
316
+ root , 'a.notfound' , [])
279
317
280
- def test_badparams (self ):
318
+ def test_method_name_exists_but_is_not_a_method (self ):
281
319
from supervisor import xmlrpc
282
- self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse , self ,
283
- 'test_badparams' , (1 , 2 , 3 ))
320
+ class Root :
321
+ pass
322
+ class A :
323
+ pass
324
+ class B :
325
+ pass
326
+ root = Root ()
327
+ root .a = A ()
328
+ root .a .b = B ()
329
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
330
+ root , 'a.b' , []) # b is not a method
331
+
332
+ def test_bad_params (self ):
333
+ from supervisor import xmlrpc
334
+ class Root :
335
+ pass
336
+ class A :
337
+ def hello (self , name ):
338
+ return "Hello %s" % name
339
+ root = Root ()
340
+ root .a = A ()
341
+ self .assertRaises (xmlrpc .RPCError , xmlrpc .traverse ,
342
+ root , 'a.hello' , ["there" , "extra" ]) # too many params
284
343
285
344
def test_success (self ):
286
345
from supervisor import xmlrpc
287
- L = []
288
- class Dummy :
289
- def foo (self , a ):
290
- L .append (a )
291
- dummy = Dummy ()
292
- xmlrpc .traverse (dummy , 'foo' , [1 ])
293
- self .assertEqual (L , [1 ])
346
+ class Root :
347
+ pass
348
+ class A :
349
+ def hello (self , name ):
350
+ return "Hello %s" % name
351
+ root = Root ()
352
+ root .a = A ()
353
+ result = xmlrpc .traverse (root , 'a.hello' , ["there" ])
354
+ self .assertEqual (result , "Hello there" )
294
355
295
356
class SupervisorTransportTests (unittest .TestCase ):
296
357
def _getTargetClass (self ):
0 commit comments