def test_amgr_synchronizer(): amgr = Amgr(hostname=host, port=port, username=username, password=password) amgr._setup_mqs() p = Pipeline() s = Stage() # Create and add 10 tasks to the stage for cnt in range(10): t = Task() t.executable = 'some-executable-%s' % cnt s.add_tasks(t) p.add_stages(s) p._validate() amgr.workflow = [p] sid = 'test.0016' rmgr = BaseRmgr({}, sid, None, {}) tmgr = BaseTmgr(sid=sid, pending_queue=['pending-1'], completed_queue=['completed-1'], rmgr=rmgr, rmq_conn_params=amgr._rmq_conn_params, rts=None) amgr._rmgr = rmgr rmgr._task_manager = tmgr for t in p.stages[0].tasks: assert t.state == states.INITIAL assert p.stages[0].state == states.INITIAL assert p.state == states.INITIAL # Start the synchronizer method in a thread amgr._terminate_sync = mt.Event() sync_thread = mt.Thread(target=amgr._synchronizer, name='synchronizer-thread') sync_thread.start() # Start the synchronizer method in a thread proc = mp.Process(target=func_for_synchronizer_test, name='temp-proc', args=(amgr._sid, p, tmgr)) proc.start() proc.join() # Wait for AppManager to finish the message exchange # no need to set *)terminate_sync* but a timeout instead # amgr._terminate_sync.set() sync_thread.join(15) for t in p.stages[0].tasks: assert t.state == states.COMPLETED
def test_run_workflow(self, mocked_init, mocked_ResourceManager, mocked_WFprocessor, mocked_TaskManager, mocked_Profiler): mocked_TaskManager.check_heartbeat = mock.MagicMock(return_value=False) mocked_TaskManager.terminate_heartbeat = mock.MagicMock( return_value=True) mocked_TaskManager.terminate_manager = mock.MagicMock( return_value=True) mocked_TaskManager.start_manager = mock.MagicMock(return_value=True) mocked_TaskManager.start_heartbeat = mock.MagicMock(return_value=True) mocked_ResourceManager.get_resource_allocation_state = mock.MagicMock( return_value='RUNNING') mocked_ResourceManager.get_completed_states = mock.MagicMock( return_value=['DONE']) mocked_WFprocessor.workflow_incomplete = mock.MagicMock( return_value=True) mocked_WFprocessor.check_processor = mock.MagicMock(return_value=True) appman = Amgr() appman._uid = 'appman.0000' appman._logger = ru.Logger(name='radical.entk.taskmanager', ns='radical.entk') appman._prof = mocked_Profiler pipe = mock.Mock() pipe.lock = mt.Lock() pipe.completed = False pipe.uid = 'pipe.0000' appman._workflow = set([pipe]) appman._cur_attempt = 0 appman._reattempts = 3 appman._rmgr = mocked_ResourceManager appman._wfp = mocked_WFprocessor appman._task_manager = mocked_TaskManager appman._sync_thread = mock.Mock() appman._sync_thread.is_alive = mock.MagicMock(return_value=True) with self.assertRaises(ree.EnTKError): appman._run_workflow()