def test_broadcast(self): communicator = kiwipy.LocalCommunicator() messages = [] def on_broadcast_receive(_comm, body, sender, subject, correlation_id): messages.append({ 'body': body, 'subject': subject, 'sender': sender, 'correlation_id': correlation_id }) communicator.add_broadcast_subscriber(on_broadcast_receive) proc = test_utils.DummyProcess(communicator=communicator) proc.execute() expected_subjects = [] for i, state in enumerate( test_utils.DummyProcess.EXPECTED_STATE_SEQUENCE): from_state = test_utils.DummyProcess.EXPECTED_STATE_SEQUENCE[ i - 1].value if i != 0 else None expected_subjects.append("state_changed.{}.{}".format( from_state, state.value)) for i, message in enumerate(messages): self.assertEqual(message['subject'], expected_subjects[i])
def test_kill(self): proc = test_utils.DummyProcess(loop=self.loop) proc.kill('Farewell!') self.assertTrue(proc.killed()) self.assertEqual(proc.killed_msg(), 'Farewell!') self.assertEqual(proc.state, ProcessState.KILLED)
def test_bundle_load_context(self): """ Check that the loop from the load context is used """ proc = test_utils.DummyProcess(loop=self.loop) bundle = plumpy.Bundle(proc) loop2 = plumpy.new_event_loop() proc2 = bundle.unbundle(plumpy.LoadSaveContext(loop=loop2)) self.assertIs(loop2, proc2.loop())
def test_spec(self): """ Check that the references to specs are doing the right thing... """ dp = test_utils.DummyProcess() self.assertIsNot(test_utils.DummyProcess.spec(), Process.spec()) self.assertIs(dp.spec(), test_utils.DummyProcess.spec()) class Proc(test_utils.DummyProcess): pass self.assertIsNot(Proc.spec(), Process.spec()) self.assertIsNot(Proc.spec(), test_utils.DummyProcess.spec()) p = Proc() self.assertIs(p.spec(), Proc.spec())
def test_continue(self): persister = plumpy.InMemoryPersister() load_context = plumpy.LoadSaveContext(loop=self.loop) launcher = plumpy.ProcessLauncher(persister=persister, load_context=load_context) process = test_utils.DummyProcess(loop=self.loop) pid = process.pid persister.save_checkpoint(process) del process process = None result = yield launcher._continue( None, **plumpy.create_continue_body(pid)[process_comms.TASK_ARGS]) self.assertEqual(test_utils.DummyProcess.EXPECTED_OUTPUTS, result)
def test_broadcast(self): messages = [] def on_broadcast_receive(**msg): messages.append(msg) self.communicator.add_broadcast_subscriber(on_broadcast_receive) proc = test_utils.DummyProcess(loop=self.loop, communicator=self.communicator) proc.execute() expected_subjects = [] for i, state in enumerate(test_utils.DummyProcess.EXPECTED_STATE_SEQUENCE): from_state = test_utils.DummyProcess.EXPECTED_STATE_SEQUENCE[i - 1].value if i != 0 else None expected_subjects.append("state_changed.{}.{}".format(from_state, state.value)) for i, message in enumerate(messages): self.assertEqual(message['subject'], expected_subjects[i])
def test_killed(self): proc = test_utils.DummyProcess() proc.kill() self.assertEqual(proc.state, plumpy.ProcessState.KILLED) self._check_round_trip(proc)
def test_created_bundle(self): """ Check that the bundle after just creating a process is as we expect """ self._check_round_trip(test_utils.DummyProcess())
def test_run_done(self): proc = test_utils.DummyProcess() proc.execute() self.assertTrue(proc.done())
def test_execute_twice(self): """Test a process that is executed once finished raises a ClosedError""" proc = test_utils.DummyProcess() proc.execute() with self.assertRaises(plumpy.ClosedError): proc.execute()