def _PerformPerfTryJob(perf_job): """Performs the perf try job on the try bot. This creates a patch, uploads it, then tells Rietveld to try the patch. Args: perf_job: TryJob entity with initialized bot name and config. Returns: A dictionary containing the result; if successful, this dictionary contains the field "issue_id", otherwise it contains "error". """ assert perf_job.bot and perf_job.config if not perf_job.key: perf_job.put() bot = perf_job.bot email = perf_job.email config_dict = perf_job.GetConfigDict() config_dict['try_job_id'] = perf_job.key.id() perf_job.config = utils.BisectConfigPythonString(config_dict) # Get the base config file contents and make a patch. base_config = utils.DownloadChromiumFile(_PERF_CONFIG_PATH) if not base_config: return {'error': 'Error downloading base config'} patch, base_checksum, base_hashes = _CreatePatch( base_config, perf_job.config, _PERF_CONFIG_PATH) # Upload the patch to Rietveld. server = rietveld_service.RietveldService() subject = 'Perf Try Job on behalf of %s' % email issue_id, patchset_id = server.UploadPatch(subject, patch, base_checksum, base_hashes, base_config, _PERF_CONFIG_PATH) if not issue_id: return {'error': 'Error uploading patch to rietveld_service.'} url = 'https://codereview.chromium.org/%s/' % issue_id # Tell Rietveld to try the patch. master = 'tryserver.chromium.perf' trypatch_success = server.TryPatch(master, issue_id, patchset_id, bot) if trypatch_success: # Create TryJob entity. The update_bug_with_results and auto_bisect # cron jobs will be tracking, or restarting the job. perf_job.rietveld_issue_id = int(issue_id) perf_job.rietveld_patchset_id = int(patchset_id) perf_job.SetStarted() return {'issue_id': issue_id} return {'error': 'Error starting try job. Try to fix at %s' % url}
def testDownloadChromiumFile_Non200Status(self, mock_logging_error): self.assertIsNone(utils.DownloadChromiumFile('some/file')) self.assertEqual(1, mock_logging_error.call_count)
def testDownloadChromiumFile_BasicCase(self): self.assertEqual(json.dumps({'key': 'this is well-formed JSON.'}), utils.DownloadChromiumFile('some/file'))