def _perform_reimage_and_run(spec, afe, tko, suite_job_id=None): """ Do the work of reimaging hosts and running tests. @param spec: a populated _SuiteSpec object. @param afe: an instance of AFE as defined in server/frontend.py. @param tko: an instance of TKO as defined in server/frontend.py. @param suite_job_id: Job id that will act as parent id to all sub jobs. Default: None """ suite = Suite.create_from_predicates( predicates=[spec.predicate], name=spec.name, builds=spec.builds, board=spec.board, devserver=spec.devserver, afe=afe, tko=tko, pool=spec.pool, results_dir=spec.job.resultdir, max_runtime_mins=spec.max_runtime_mins, timeout_mins=spec.timeout_mins, file_bugs=spec.file_bugs, suite_job_id=suite_job_id, extra_deps=spec.suite_dependencies, priority=spec.priority, wait_for_results=spec.wait_for_results, job_retry=spec.job_retry, max_retries=spec.max_retries, offload_failures_only=spec.offload_failures_only, test_source_build=spec.test_source_build, run_prod_code=spec.run_prod_code, job_keyvals=spec.job_keyvals, test_args=spec.test_args) _run_suite_with_spec(suite, spec)
def testAdHocSuiteCreation(self): """Should be able to schedule an ad-hoc suite by specifying a single test name.""" self.expect_control_file_parsing(suite_name='ad_hoc_suite') self.mox.ReplayAll() predicate = SuiteBase.test_name_equals_predicate('name-data_five') suite = Suite.create_from_predicates([predicate], self._BUILDS, self._BOARD, devserver=None, cf_getter=self.getter, afe=self.afe, tko=self.tko) self.assertFalse(self.files['one'] in suite.tests) self.assertFalse(self.files['two'] in suite.tests) self.assertFalse(self.files['four'] in suite.tests) self.assertTrue(self.files['five'] in suite.tests)
def _perform_reimage_and_run(spec, afe, tko, predicate, suite_job_id=None): """ Do the work of reimaging hosts and running tests. @param spec: a populated SuiteSpec object. @param afe: an instance of AFE as defined in server/frontend.py. @param tko: an instance of TKO as defined in server/frontend.py. @param predicate: A function mapping ControlData objects to True if they should be included in the suite. @param suite_job_id: Job id that will act as parent id to all sub jobs. Default: None """ # We can't do anything else until the devserver has finished downloading # control_files and test_suites packages so that we can get the control # files we should schedule. try: if not spec.run_prod_code: spec.devserver.stage_artifacts(spec.test_source_build, ['control_files', 'test_suites']) except dev_server.DevServerException as e: # If we can't get the control files, there's nothing to run. raise error.AsynchronousBuildFailure(e) timestamp = datetime.datetime.now().strftime(time_utils.TIME_FMT) utils.write_keyval(spec.job.resultdir, {constants.ARTIFACT_FINISHED_TIME: timestamp}) suite = Suite.create_from_predicates( predicates=[predicate], name=spec.name, builds=spec.builds, board=spec.board, devserver=spec.devserver, afe=afe, tko=tko, pool=spec.pool, results_dir=spec.job.resultdir, max_runtime_mins=spec.max_runtime_mins, timeout_mins=spec.timeout_mins, file_bugs=spec.file_bugs, file_experimental_bugs=spec.file_experimental_bugs, suite_job_id=suite_job_id, extra_deps=spec.suite_dependencies, priority=spec.priority, wait_for_results=spec.wait_for_results, job_retry=spec.job_retry, max_retries=spec.max_retries, offload_failures_only=spec.offload_failures_only, test_source_build=spec.test_source_build, run_prod_code=spec.run_prod_code) # Now we get to asychronously schedule tests. suite.schedule(spec.job.record_entry, spec.add_experimental) if suite.wait_for_results: logging.debug('Waiting on suite.') suite.wait(spec.job.record_entry, spec.bug_template) logging.debug('Finished waiting on suite. ' 'Returning from _perform_reimage_and_run.') else: logging.info('wait_for_results is set to False, suite job will exit ' 'without waiting for test jobs to finish.')
def _perform_reimage_and_run(spec, afe, tko, suite_job_id=None): """ Do the work of reimaging hosts and running tests. @param spec: a populated SuiteSpec object. @param afe: an instance of AFE as defined in server/frontend.py. @param tko: an instance of TKO as defined in server/frontend.py. @param suite_job_id: Job id that will act as parent id to all sub jobs. Default: None """ # We can't do anything else until the devserver has finished downloading # control_files and test_suites packages so that we can get the control # files we should schedule. if not spec.run_prod_code: _stage_artifacts(spec) timestamp = datetime.datetime.now().strftime(time_utils.TIME_FMT) utils.write_keyval( spec.job.resultdir, {constants.ARTIFACT_FINISHED_TIME: timestamp}) suite = Suite.create_from_predicates( predicates=[spec.predicate], name=spec.name, builds=spec.builds, board=spec.board, devserver=spec.devserver, afe=afe, tko=tko, pool=spec.pool, results_dir=spec.job.resultdir, max_runtime_mins=spec.max_runtime_mins, timeout_mins=spec.timeout_mins, file_bugs=spec.file_bugs, file_experimental_bugs=spec.file_experimental_bugs, suite_job_id=suite_job_id, extra_deps=spec.suite_dependencies, priority=spec.priority, wait_for_results=spec.wait_for_results, job_retry=spec.job_retry, max_retries=spec.max_retries, offload_failures_only=spec.offload_failures_only, test_source_build=spec.test_source_build, run_prod_code=spec.run_prod_code, job_keyvals=spec.job_keyvals, test_args=spec.test_args) if spec.delay_minutes: logging.debug('delay_minutes is set. Sleeping %d minutes before ' 'creating test jobs.', spec.delay_minutes) time.sleep(spec.delay_minutes*60) logging.debug('Finished waiting for %d minutes before creating test ' 'jobs.', spec.delay_minutes) # Now we get to asychronously schedule tests. suite.schedule(spec.job.record_entry, spec.add_experimental) if suite.wait_for_results: logging.debug('Waiting on suite.') suite.wait(spec.job.record_entry, spec.bug_template) logging.debug('Finished waiting on suite. ' 'Returning from _perform_reimage_and_run.') else: logging.info('wait_for_results is set to False, suite job will exit ' 'without waiting for test jobs to finish.')