def test_exception_completion(self): jobspec = JobspecV1.from_command(["false"]) thread = _FluxExecutorThread(threading.Event(), threading.Event(), collections.deque(), 0.01, (), {}) fut = FluxExecutorFuture(threading.get_ident()) self.assertFalse(fut.done()) fut._set_event(EventLogEvent({"name": "start", "timestamp": 0})) self.assertFalse(fut.done()) thread._FluxExecutorThread__event_update( ShamJobEventWatchFuture( EventLogEvent({ "name": "exception", "timestamp": 0, "context": { "severity": 1, "type": "foobar" }, })), fut, ) self.assertFalse(fut.done()) thread._FluxExecutorThread__event_update( ShamJobEventWatchFuture( EventLogEvent({ "name": "exception", "timestamp": 0, "context": { "severity": 0, "type": "foobar" }, })), fut, ) self.assertTrue(fut.done()) self.assertIsInstance(fut.exception(), JobException)
def test_finish_completion(self): thread = _FluxExecutorThread( threading.Event(), collections.deque(), 0.01, (), {} ) for exit_status in (0, 1, 15, 120, 255): flag = threading.Event() fut = FluxExecutorFuture(threading.get_ident()).add_done_callback( lambda fut: flag.set() ) thread._FluxExecutorThread__event_update( ShamJobEventWatchFuture( EventLogEvent( { "name": "finish", "timestamp": 0, "context": {"status": exit_status}, } ) ), fut, ) self.assertTrue(fut.done()) self.assertTrue(flag.is_set()) if os.WIFEXITED(exit_status): self.assertEqual(fut.result(), os.WEXITSTATUS(exit_status)) elif os.WIFSIGNALED(exit_status): self.assertEqual(fut.result(), -os.WTERMSIG(exit_status))