def _run_single_job_with_ui_loop(self, job, job_state, ui): comments = "" while True: if job.plugin in ('user-interact', 'user-interact-verify', 'user-verify', 'manual'): ui.notify_about_purpose(job) if (self.is_interactive and job.plugin in ('user-interact', 'user-interact-verify', 'manual')): ui.notify_about_steps(job) if job.plugin == 'manual': cmd = 'run' else: cmd = ui.wait_for_interaction_prompt(job) if cmd == 'run' or cmd is None: result_builder = self.runner.run_job( job, job_state, self.config, ui).get_builder(comments=comments) elif cmd == 'comment': new_comment = input( self.C.BLUE( _('Please enter your comments:') + '\n')) if new_comment: comments += new_comment + '\n' continue elif cmd == 'skip': result_builder = JobResultBuilder( outcome=IJobResult.OUTCOME_SKIP, comments=_("Explicitly skipped before" " execution")) if comments != "": result_builder.comments = comments break elif cmd == 'quit': raise SystemExit() else: result_builder = self.runner.run_job( job, job_state, self.config, ui).get_builder() else: if 'noreturn' in job.get_flag_set(): ui.noreturn_job() result_builder = self.runner.run_job(job, job_state, self.config, ui).get_builder() if (self.is_interactive and result_builder.outcome == IJobResult.OUTCOME_UNDECIDED): try: if comments != "": result_builder.comments = comments ui.notify_about_verification(job) self._interaction_callback(self.runner, job, result_builder, self.config) except ReRunJob: continue break return result_builder
def skipped_builder(*args, **kwargs): result_builder = JobResultBuilder( outcome=IJobResult.OUTCOME_SKIP, comments=_("Explicitly skipped before execution")) if self._current_comments != "": result_builder.comments = self._current_comments return result_builder
def test_smoke_disk(self): builder = JobResultBuilder() builder.comments = 'it works' builder.execution_duration = 0.1 builder.io_log_filename = 'log' builder.outcome = 'pass' builder.return_code = 0 result = builder.get_result() self.assertEqual(result.comments, "it works") self.assertEqual(result.execution_duration, 0.1) self.assertEqual(result.io_log_filename, 'log') self.assertEqual(result.outcome, "pass") self.assertEqual(result.return_code, 0) # Sanity check: the builder we can re-create is identical builder2 = result.get_builder() self.assertEqual(builder, builder2)
def test_smoke_memory(self): builder = JobResultBuilder() builder.comments = 'it works' builder.execution_duration = 0.1 builder.io_log = [(0, 'stdout', b'ok\n')] builder.outcome = 'pass' builder.return_code = 0 result = builder.get_result() self.assertEqual(result.comments, "it works") self.assertEqual(result.execution_duration, 0.1) self.assertEqual( result.io_log, (IOLogRecord(delay=0, stream_name='stdout', data=b'ok\n'), )) self.assertEqual(result.outcome, "pass") self.assertEqual(result.return_code, 0) # Sanity check: the builder we can re-create is identical builder2 = result.get_builder() self.assertEqual(builder, builder2)
def _run_single_job_with_ui_loop(self, job, ui): print(self.C.header(job.tr_summary(), fill='-')) print(_("ID: {0}").format(job.id)) print( _("Category: {0}").format( self.sa.get_job_state(job.id).effective_category_id)) comments = "" while True: if job.plugin in ('user-interact', 'user-interact-verify', 'user-verify', 'manual'): job_state = self.sa.get_job_state(job.id) if (not self.is_interactive and job.plugin in ('user-interact', 'user-interact-verify', 'manual')): result_builder = JobResultBuilder( outcome=IJobResult.OUTCOME_SKIP, comments=_("Trying to run interactive job in a silent" " session")) return result_builder if job_state.can_start(): ui.notify_about_purpose(job) if (self.is_interactive and job.plugin in ('user-interact', 'user-interact-verify', 'manual')): if job_state.can_start(): ui.notify_about_steps(job) if job.plugin == 'manual': cmd = 'run' else: if job_state.can_start(): cmd = ui.wait_for_interaction_prompt(job) else: # 'running' the job will make it marked as skipped # because of the failed dependency cmd = 'run' if cmd == 'run' or cmd is None: result_builder = self.sa.run_job(job.id, ui, False) elif cmd == 'comment': new_comment = input( self.C.BLUE( _('Please enter your comments:') + '\n')) if new_comment: comments += new_comment + '\n' continue elif cmd == 'skip': result_builder = JobResultBuilder( outcome=IJobResult.OUTCOME_SKIP, comments=_("Explicitly skipped before" " execution")) if comments != "": result_builder.comments = comments break elif cmd == 'quit': raise SystemExit() else: result_builder = self.sa.run_job(job.id, ui, False) else: if 'noreturn' in job.get_flag_set(): ui.noreturn_job() result_builder = self.sa.run_job(job.id, ui, False) if (self.is_interactive and result_builder.outcome == IJobResult.OUTCOME_UNDECIDED): try: if comments != "": result_builder.comments = comments ui.notify_about_verification(job) self._interaction_callback(job, result_builder) except ReRunJob: self.sa.use_job_result(job.id, result_builder.get_result()) continue break return result_builder