| Index: dashboard/dashboard/bisect_fyi.py
|
| diff --git a/dashboard/dashboard/bisect_fyi.py b/dashboard/dashboard/bisect_fyi.py
|
| index 822031bbf98d7ede84b9c8c27f5a33a061bda116..d7e832fea7822b85d8b1226d10a6d74b032cc777 100644
|
| --- a/dashboard/dashboard/bisect_fyi.py
|
| +++ b/dashboard/dashboard/bisect_fyi.py
|
| @@ -5,7 +5,6 @@
|
| """URL endpoint for a cron job to run bisects integration tests."""
|
|
|
| import datetime
|
| -import logging
|
| import time
|
|
|
| from google.appengine.api import mail
|
| @@ -67,7 +66,6 @@ def _StartBisectFYIJob(test_name, bisect_config):
|
| If successful, a dict containing "issue_id" and "issue_url" for the
|
| bisect job. Otherwise, a dict containing "error", with some description
|
| of the reason why a job wasn't started.
|
| -
|
| """
|
| try:
|
| bisect_job = _MakeBisectFYITryJob(test_name, bisect_config)
|
| @@ -114,53 +112,35 @@ def _MakeBisectFYITryJob(test_name, bisect_config):
|
| return bisect_job
|
|
|
|
|
| -def VerifyBisectFYIResults(job, bisect_results):
|
| - """Verifies the bisect results against expected results in test config."""
|
| - bisect_fyi_configs = stored_object.Get(_BISECT_FYI_CONFIGS_KEY)
|
| - for test_name, config in bisect_fyi_configs.iteritems():
|
| - if job.job_name == test_name:
|
| - errors = _VerifyExpectedResults(
|
| - bisect_results.get('results'), config.get('expected_results'))
|
| - if errors:
|
| - bisect_results['status'] = 'Failure'
|
| - bisect_results['errors'] = errors
|
| - return bisect_results
|
| +def VerifyBisectFYIResults(job):
|
| + """Verifies the bisect results against expected results in test config.
|
| +
|
| + Args:
|
| + job: TryJob entity.
|
| +
|
| + Returns:
|
| + A message with the missing properties, otherwise returns an empty string.
|
| + """
|
| + expected_results = _GetBisectConfig(job).get('expected_results')
|
| + try:
|
| + utils.Validate(expected_results, job.results_data)
|
| + except ValueError as e:
|
| + return 'Bisect result is not as expected: %s.' % e
|
| + return ''
|
|
|
|
|
| -def VerifyBugUpdate(job, issue_tracker, bisect_results):
|
| +def IsBugUpdated(job, issue_tracker):
|
| """Verifies whether bug is updated with the bisect results."""
|
| comment_info = issue_tracker.GetLastBugCommentsAndTimestamp(job.bug_id)
|
| - err_msg = 'Failed to update bug %s with bisect results.' % job.bug_id
|
| if not comment_info:
|
| - bisect_results['status'] = 'Failure'
|
| - if bisect_results.get('errors'):
|
| - err_msg = '%s\n%s' % (bisect_results['errors'], err_msg)
|
| - bisect_results['errors'] = err_msg
|
| - return bisect_results
|
| + return False
|
|
|
| bug_update_timestamp = datetime.datetime.strptime(
|
| comment_info['timestamp'], '%Y-%m-%dT%H:%M:%S.%fZ')
|
| try_job_timestamp = time.mktime(job.last_ran_timestamp.timetuple())
|
| if bug_update_timestamp <= try_job_timestamp:
|
| - logging.info('Issue updated timestamp: %s', bug_update_timestamp)
|
| - logging.info('Try job timestamp: %s', try_job_timestamp)
|
| - bisect_results['status'] = 'Failure'
|
| - if bisect_results.get('errors'):
|
| - err_msg = '%s\n%s' % (bisect_results['errors'], err_msg)
|
| - bisect_results['errors'] = err_msg
|
| - return bisect_results
|
| -
|
| -
|
| -def _VerifyExpectedResults(bisect_results, expected_results):
|
| - if not expected_results:
|
| - return 'No expected results found in test config.'
|
| - error_list = []
|
| - for key, value in expected_results.iteritems():
|
| - if value not in bisect_results:
|
| - error_list.append('Expected results %s = "%s" not found in bisect '
|
| - 'results.\n' % (key, value))
|
| -
|
| - return ''.join(error_list)
|
| + return False
|
| + return True
|
|
|
|
|
| def _TextBody(errors_list):
|
| @@ -184,3 +164,11 @@ def _SendEmailAlert(errors_list):
|
| to='auto-bisect-team@google.com',
|
| subject='[Bisect FYI Alert]Failed to run bisect integration tests.',
|
| body=_TextBody(errors_list))
|
| +
|
| +
|
| +def _GetBisectConfig(job):
|
| + bisect_fyi_configs = stored_object.Get(_BISECT_FYI_CONFIGS_KEY)
|
| + for test_name, config in bisect_fyi_configs.iteritems():
|
| + if job.job_name == test_name:
|
| + return config
|
| + return {}
|
|
|