Beispiel #1
0
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
Beispiel #2
0
    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()