def test_mpqueue_get(): Q = MPQueue() item = Q.safe_get(None) assert item is None Q.put("ITEM1") Q.put("ITEM2") assert Q.safe_get(0.02) == "ITEM1" assert Q.safe_get(0.02) == "ITEM2" assert Q.safe_get(0.02) is None assert Q.safe_get(None) is None num_left = Q.safe_close() assert num_left == 0
def test_proc_full_stop(caplog): shutdown_evt = mp.Event() event_q = MPQueue() caplog.set_level(logging.INFO) proc = Proc("TEST", TimerProcWorkerTest, shutdown_evt, event_q) for idx in range(4): item = event_q.safe_get(1.0) assert item, f"idx: {idx}" assert item.startswith(f'TIMER {idx + 1} [') item = event_q.safe_get(1.0) assert item.msg_src == "TEST" assert item.msg_type == "SHUTDOWN" assert item.msg == "Normal" proc.full_stop(wait_time=0.5) assert not proc.proc.is_alive()
def test_proc_worker_run(caplog): startup_evt = mp.Event() shutdown_evt = mp.Event() event_q = MPQueue() caplog.set_level(logging.INFO) pw = ProcWorkerTest("TEST", startup_evt, shutdown_evt, event_q, "ARG1", "ARG2") assert not startup_evt.is_set() assert not shutdown_evt.is_set() pw.run() assert startup_evt.is_set() assert shutdown_evt.is_set() item = event_q.safe_get() assert item assert item.msg_src == "TEST" assert item.msg_type == "SHUTDOWN" assert item.msg == "Normal" assert f"MAIN_FUNC: ('ARG1', 'ARG2')" in caplog.text
def test_proc_worker_exception(caplog): class ProcWorkerException(ProcWorker): def main_func(self): raise NameError("Because this doesn't happen often") startup_evt = mp.Event() shutdown_evt = mp.Event() event_q = MPQueue() caplog.set_level(logging.INFO) with pytest.raises(SystemExit): proc_worker_wrapper(ProcWorkerException, "TEST", startup_evt, shutdown_evt, event_q) assert startup_evt.is_set() assert not shutdown_evt.is_set() item = event_q.safe_get() assert item assert item.msg_src == "TEST" assert item.msg_type == "FATAL" assert item.msg == "Because this doesn't happen often" assert f"Exception Shutdown" in caplog.text