Changeset 3049

Show
Ignore:
Timestamp:
02/13/08 12:22:56 (10 months ago)
Author:
bgranger
Message:

Created ipython1/kernel/tests/tasktest.py that contains general purpose code for testing ITaskControllers. Now both test_task.py and test_taskxmlrpc.py use this code. This means that the new task client is being tested!

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ipython1/branches/ipython1-client-r3021/TODO

    r3046 r3049  
    55Actions: 
    66 
    7 * Decide if it should be barrier(*args) or barrier(args) 
    87* Write test_taskxmlrpc 
    98* Write tests for Properties in multiengine 
    109* Work on Task interfaces 
     10 
    1111* Change coding conventions of interfaces 
     12 
    1213* Update ChangeLog describing new APIs 
    1314* Update documentation 
  • ipython1/branches/ipython1-client-r3021/docs/examples/multiengine.ipy

    r3045 r3049  
    139139mec.queueStatus() 
    140140 
    141 mec.barrier(*prs) 
     141mec.barrier(prs) 
    142142 
    143143for pr in prs: 
     
    166166pr2 = mec.execute('import sets') 
    167167 
    168 mec.barrier(pr1, pr2
     168mec.barrier((pr1, pr2)
    169169 
    170170pr1 = mec.execute('1/0') 
    171171pr2 = mec.execute('c = sets.Set()') 
    172172 
    173 mec.barrier(pr1, pr2
     173mec.barrier((pr1, pr2)
    174174try: 
    175175    pr1.r 
  • ipython1/branches/ipython1-client-r3021/ipython1/kernel/multiengineclient.py

    r3043 r3049  
    390390        return blockingCallFromThread(self.stpmultiengine.getPendingDeferred, deferredID, block) 
    391391     
    392     def barrier(self, *pendingResults): 
     392    def barrier(self, pendingResults): 
    393393        """Synchronize a set of `PendingResults`. 
    394394         
  • ipython1/branches/ipython1-client-r3021/ipython1/kernel/tests/test_task.py

    r3036 r3049  
    2525from ipython1.kernel.multiengine import IMultiEngine 
    2626from ipython1.testutils.util import DeferredTestCase 
     27from ipython1.kernel.tests.tasktest import ITaskControllerTestCase 
    2728 
    28 def _printer(r): 
    29     """passthrough callback for debugging""" 
    30     print r 
    31     return r 
     29#------------------------------------------------------------------------------- 
     30# Tests 
     31#------------------------------------------------------------------------------- 
    3232 
    33 class TaskTest(DeferredTestCase): 
     33class BasicTaskControllerTestCase(DeferredTestCase, ITaskControllerTestCase): 
    3434     
    3535    def setUp(self): 
    36         self.c  = cs.ControllerService() 
    37         self.c.startService() 
    38         self.me = IMultiEngine(self.c
    39         self.tc = task.TaskController(self.c
     36        self.controller  = cs.ControllerService() 
     37        self.controller.startService() 
     38        self.multiengine = IMultiEngine(self.controller
     39        self.tc = task.ITaskController(self.controller
    4040        self.tc.failurePenalty = 0 
     41        self.engines=[] 
    4142         
    42         self.engines = [] 
    43         for i in range(1): 
    44             e = es.EngineService() 
    45             # e.startService() 
    46             self.c.registerEngine(es.QueuedEngine(e), i) 
    47             self.engines.append(e) 
    48      
    4943    def tearDown(self): 
    50         self.c.stopService() 
     44        self.controller.stopService() 
    5145        for e in self.engines: 
    52             # e.stopService() 
    53             pass 
    54      
    55     def testTaskIDs(self): 
    56         l = [] 
    57         for i in range(16): 
    58             d = self.tc.run(task.Task('a=5')) 
    59             d = self.assertDeferredEquals(d, i) 
    60             l.append(d) 
    61         return defer.DeferredList(l) 
    62      
    63     def testAbort(self): 
    64         """Cannot do a proper abort test, because blocking execution prevents 
    65         abort from being called before task completes""" 
    66         t = task.Task('a=5') 
    67         d = self.tc.abort(0) 
    68         d = self.assertDeferredRaises(d, IndexError) 
    69         d.addCallback(lambda _:self.tc.run(t)) 
    70         d.addCallback(self.tc.abort) 
    71         d = self.assertDeferredRaises(d, IndexError) 
    72         return d 
    73      
    74     def testClears(self): 
    75         d = self.me.execute('b=1', targets=0) 
    76         t = task.Task('a=1', clearBefore=True, resultNames='b', clearAfter=True) 
    77         d.addCallback(lambda _:self.tc.run(t)) 
    78         d.addCallback(self.tc.getTaskResult,block=True) 
    79         d.addCallback(lambda tr: tr.failure) 
    80         d = self.assertDeferredRaises(d, NameError) # check b for clearBefore 
    81         d.addCallback(lambda _:self.me.pull('a', targets=0)) 
    82         d = self.assertDeferredRaises(d, NameError) # check a for clearAfter 
    83         return d 
    84      
    85     def testSimpleRetries(self): 
    86         d = self.me.execute('i=0', targets=0) 
    87         t = task.Task("i += 1\nassert i == 16", resultNames='i',retries=10) 
    88         t2 = task.Task("i += 1\nassert i == 16", resultNames='i',retries=10) 
    89          
    90         d.addCallback(lambda r: self.tc.run(t)) 
    91         d.addCallback(self.tc.getTaskResult, block=True) 
    92         d.addCallback(lambda tr: tr.ns.i) 
    93         d = self.assertDeferredRaises(d, AssertionError) 
    94          
    95         d.addCallback(lambda r: self.tc.run(t2)) 
    96         d.addCallback(self.tc.getTaskResult, block=True) 
    97         d.addCallback(lambda tr: tr.ns.i) 
    98         d = self.assertDeferredEquals(d, 16) 
    99         return d 
    100      
    101     def testRecoveryTasks(self): 
    102         t = task.Task("i=16", resultNames='i') 
    103         t2 = task.Task("raise Exception", recoveryTask=t, retries = 2) 
    104          
    105         d = self.tc.run(t2) 
    106         d.addCallback(self.tc.getTaskResult, block=True) 
    107         d.addCallback(lambda tr: tr.ns.i) 
    108         d = self.assertDeferredEquals(d, 16) 
    109         return d 
    110      
    111     def testInfiniteRecoveryLoop(self): 
    112         t = task.Task("raise Exception", retries = 5) 
    113         t2 = task.Task("assert False", retries = 2, recoveryTask = t) 
    114         t.recoveryTask = t2 
    115          
    116         d = self.tc.run(t) 
    117         d.addCallback(self.tc.getTaskResult, block=True) 
    118         d.addCallback(lambda tr: tr.ns.i) 
    119         d = self.assertDeferredRaises(d, AssertionError) 
    120         return d 
    121      
    122     def testSetupNS(self): 
    123         d = self.me.execute('a=0', targets=0) 
    124         ns = dict(a=1, b=0) 
    125         t = task.Task("", setupNS=ns, resultNames=['a','b']) 
    126         d.addCallback(lambda r: self.tc.run(t)) 
    127         d.addCallback(self.tc.getTaskResult, block=True) 
    128         d.addCallback(lambda tr: {'a':tr.ns.a, 'b':tr['b']}) 
    129         d = self.assertDeferredEquals(d, ns) 
    130         return d 
    131          
    132      
    133     def testTaskResults(self): 
    134         t1 = task.Task('a=5', resultNames='a') 
    135         d = self.tc.run(t1) 
    136         d.addCallback(self.tc.getTaskResult, block=True) 
    137         d.addCallback(lambda tr: (tr.ns.a,tr['a'],tr.failure, tr.raiseException())) 
    138         d = self.assertDeferredEquals(d, (5,5,None,None)) 
    139          
    140         t2 = task.Task('7=5') 
    141         d.addCallback(lambda r: self.tc.run(t2)) 
    142         d.addCallback(self.tc.getTaskResult, block=True) 
    143         d.addCallback(lambda tr: tr.ns) 
    144         d = self.assertDeferredRaises(d, SyntaxError) 
    145          
    146         t3 = task.Task('', resultNames='b') 
    147         d.addCallback(lambda r: self.tc.run(t3)) 
    148         d.addCallback(self.tc.getTaskResult, block=True) 
    149         d.addCallback(lambda tr: tr.ns) 
    150         d = self.assertDeferredRaises(d, NameError) 
    151         return d 
    152      
     46            e.stopService() 
     47 
     48 
    15349 
    15450class DependencyTest(unittest.TestCase): 
    155     """The Tests for a Task's Dependency object""" 
    15651     
    15752    def testDictDependency(self): 
     
    210105        dikt['c'] = 2 
    211106        self.assertEquals(d.test(dikt), True) 
    212          
    213          
    214              
    215      
    216      
    217