def test_memory_supervisor_organize(): supervisor = Default.get_employee('supervisor') assert isinstance(supervisor.messenger, MemoryMessenger) assert supervisor.messenger.topic == 'codepack' assert supervisor.messenger.queues['codepack'].empty() code1 = Code(add2) code2 = Code(mul2) code1 >> code2 code2(3, b=5) assert code1.get_state() == 'UNKNOWN' assert code2.get_state() == 'WAITING' supervisor.organize() assert code1.get_state() == 'UNKNOWN' assert code2.get_state() == 'WAITING' assert supervisor.messenger.queues['codepack'].empty() code1(a=2, b=4) assert code1.get_state() == 'TERMINATED' assert code2.get_state() == 'WAITING' assert supervisor.messenger.queues['codepack'].empty() supervisor.organize() assert code1.get_state() == 'TERMINATED' assert code2.get_state() == 'READY' assert not supervisor.messenger.queues['codepack'].empty( ) and supervisor.messenger.queues['codepack'].qsize() == 1 item = supervisor.messenger.queues['codepack'].get(block=False) item.pop('source', None) expected_item = code2.to_snapshot(args=(3, ), kwargs={ 'b': 5 }, timestamp=item['timestamp']).to_dict() expected_item.pop('source', None) assert item == expected_item supervisor.close()
def test_memory_worker_run_snapshot_with_image_and_callback( mock_docker_client): worker = Default.get_employee('worker') worker.callback = dummy_callback_function assert isinstance(worker.messenger, MemoryMessenger) code = Code(add2, image='dummy') assert code.get_state() == 'UNKNOWN' sn = worker.run_snapshot(code.to_snapshot(kwargs={'a': 3, 'b': 5})) assert sn == code.serial_number default_config_dir = Config.get_default_config_dir() script_dir = os.path.join(default_config_dir, 'scripts') mock_docker_client.return_value.containers.run.assert_called_once_with( auto_remove=True, command=[ 'python', 'run_snapshot.py', '%s.json' % sn, '-p', '.', '-l', 'worker-logger', '-c', 'dummy_callback_function' ], dns=['8.8.8.8'], environment=['CODEPACK_LOGGER_LOG_DIR=/usr/logs'], image='dummy', name=id(worker.docker_manager), volumes=[ '%s:/usr/src/codepack' % script_dir, '%s:/usr/logs' % os.path.abspath(Config.get_log_dir()) ], working_dir='/usr/src/codepack') worker.stop()
def test_memory_worker_run_snapshot_with_nothing(): worker = Default.get_employee('worker') assert isinstance(worker.messenger, MemoryMessenger) code = Code(add2) assert code.get_state() == 'UNKNOWN' sn = worker.run_snapshot(code.to_snapshot(kwargs={'a': 3, 'b': 5})) assert sn == code.serial_number assert code.get_state() == 'TERMINATED' assert code.get_result() == 8 worker.stop()
def test_memory_supervisor_run_code(): supervisor = Default.get_employee('supervisor') assert isinstance(supervisor.messenger, MemoryMessenger) assert supervisor.messenger.topic == 'codepack' assert supervisor.messenger.queues['codepack'].empty() code = Code(add2) sn = supervisor.run_code(code=code, args=(3, ), kwargs={'b': 5}) assert sn == code.serial_number assert not supervisor.messenger.queues['codepack'].empty( ) and supervisor.messenger.queues['codepack'].qsize() == 1 item = supervisor.messenger.queues['codepack'].get(block=False) assert item == code.to_snapshot(args=(3, ), kwargs={ 'b': 5 }, timestamp=item['timestamp']).to_dict() supervisor.close()
def test_memory_worker_run_snapshot_with_env(mock_subprocess_run): worker = Default.get_employee('worker') assert isinstance(worker.messenger, MemoryMessenger) code = Code(add2, env='test_env', image='dummy') assert code.get_state() == 'UNKNOWN' sn = worker.run_snapshot(code.to_snapshot(kwargs={'a': 3, 'b': 5})) assert sn == code.serial_number default_config_dir = Config.get_default_config_dir() script_dir = os.path.join(default_config_dir, 'scripts') mock_subprocess_run.assert_called_once_with([ os.path.join(worker.interpreter_manager.path, 'test_env', 'bin', 'python'), os.path.join(script_dir, 'run_snapshot.py'), os.path.join(script_dir, '%s.json' % sn), '-p', script_dir, '-l', 'worker-logger' ]) worker.stop()
def test_code_to_snapshot_and_from_snapshot(default_os_env): code1 = Code(add2) snapshot1 = code1.to_snapshot(args=(1, 2)) code2 = Code.from_snapshot(snapshot=snapshot1) assert code2.get_state() == 'UNKNOWN' assert code2(1, 2) == 3