Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2289)

Unified Diff: appengine/findit/handlers/test/build_failure_test.py

Issue 1833833002: [Findit] Modify build_failure to prepare for new UI. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@0314-result-page
Patch Set: address comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/findit/handlers/build_failure.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/findit/handlers/test/build_failure_test.py
diff --git a/appengine/findit/handlers/test/build_failure_test.py b/appengine/findit/handlers/test/build_failure_test.py
index 71399d30a60bafc00a27cc7750f31e7e1691aa28..66b62155b0a541e04e628ee234275aa8fa427409 100644
--- a/appengine/findit/handlers/test/build_failure_test.py
+++ b/appengine/findit/handlers/test/build_failure_test.py
@@ -12,6 +12,8 @@ import webtest
from testing_utils import testing
from handlers import build_failure
+from handlers import handlers_util
+from handlers import result_status
from model.wf_analysis import WfAnalysis
from model import wf_analysis_status
from waterfall import buildbot
@@ -22,6 +24,81 @@ from waterfall import waterfall_config
ROOT_DIR = os.path.join(os.path.dirname(__file__),
os.path.pardir, os.path.pardir)
+SAMPLE_TRY_JOB_INFO = {
+ 'm/b/119': {
+ 'step1 on platform':{
+ 'try_jobs': [
+ {
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium.'
+ 'linux/builders/linux_variable/builds/121'),
+ 'try_job_build_number': 121,
+ 'tests': ['test3'],
+ 'culprit': {}
+ },
+ {
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium.'
+ 'linux/builders/linux_variable/builds/121'),
+ 'try_job_build_number': 121,
+ 'culprit': {
+ 'revision': 'rev2',
+ 'commit_position': '2',
+ 'review_url': 'url_2'
+ },
+ 'tests': ['test2']
+ },
+ {
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'status': result_status.FLAKY,
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'tests': ['test4']
+ },
+ {
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/120',
+ 'status': result_status.NO_TRY_JOB_REASON_MAP[
+ wf_analysis_status.PENDING],
+ 'task_id': 'task2',
+ 'task_url': 'url/task2',
+ 'tests': ['test1']
+ }
+ ]
+ }
+ },
+ 'm/b/120': {
+ 'compile': {
+ 'try_jobs': [
+ {
+ 'try_job_key': 'm/b/120',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_build_number': 120,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium.'
+ 'linux/builders/linux_variable/builds/120'),
+ 'culprit': {
+ 'revision': 'rev2',
+ 'commit_position': '2',
+ 'review_url': 'url_2'
+ }
+ }
+ ]
+ }
+ }
+}
+
class BuildFailureTest(testing.AppengineTestCase):
app_module = webapp2.WSGIApplication([
@@ -37,6 +114,11 @@ class BuildFailureTest(testing.AppengineTestCase):
for queue in self.taskqueue_stub.GetQueues():
self.taskqueue_stub.FlushQueue(queue['name'])
+ def MockedGetAllTryJobResults(master_name, builder_name, build_number):
+ build_key = '%s/%s/%d' % (master_name, builder_name, build_number)
+ return SAMPLE_TRY_JOB_INFO.get(build_key, None)
+ self.mock(handlers_util, 'GetAllTryJobResults', MockedGetAllTryJobResults)
+
def testGetTriageHistoryWhenUserIsNotAdmin(self):
analysis = WfAnalysis.Create('m', 'b', 1)
analysis.status = wf_analysis_status.ANALYZED
@@ -145,3 +227,410 @@ class BuildFailureTest(testing.AppengineTestCase):
self.assertEquals(200, response.status_int)
self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks()))
+
+ def testGetOrganizedAnalysisResultBySuspectedCLNonSwarming(self):
+ analysis_result = {
+ 'failures': [
+ {
+ 'step_name': 'a',
+ 'first_failure': 98,
+ 'last_pass': None,
+ 'supported': True,
+ 'suspected_cls': [
+ {
+ 'build_number': 99,
+ 'repo_name': 'chromium',
+ 'revision': 'r99_2',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 2,
+ 'hints': {
+ 'modified f99_2.cc (and it was in log)': 2,
+ },
+ }
+ ],
+ }
+ ]
+ }
+
+ result = build_failure._GetOrganizedAnalysisResultBySuspectedCL(
+ analysis_result)
+
+ expected_result = {
+ 'a': [
+ {
+ 'first_failure': 98,
+ 'last_pass': None,
+ 'supported': True,
+ 'suspected_cls': [
+ {
+ 'build_number': 99,
+ 'repo_name': 'chromium',
+ 'revision': 'r99_2',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 2,
+ 'hints': {
+ 'modified f99_2.cc (and it was in log)': 2,
+ },
+ }
+ ],
+ 'tests': []
+ }
+ ]
+ }
+ self.assertEqual(expected_result, result)
+
+ def testGetOrganizedAnalysisResultBySuspectedCLSwarming(self):
+ analysis_result = {
+ 'failures': [
+ {
+ 'step_name': 'b',
+ 'first_failure': 98,
+ 'last_pass': 96,
+ 'supported': True,
+ 'suspected_cls': [
+ {
+ 'build_number': 98,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ 'modified f98.cc[123, 456] (and it was in log)': 4,
+ },
+ }
+ ],
+ 'tests': [
+ {
+ 'test_name': 'Unittest2.Subtest1',
+ 'first_failure': 98,
+ 'last_pass': 97,
+ 'suspected_cls': [
+ {
+ 'build_number': 98,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ ('modified f98.cc[123] '
+ '(and it was in log)'): 4,
+ },
+ }
+ ]
+ },
+ {
+ 'test_name': 'Unittest3.Subtest2',
+ 'first_failure': 98,
+ 'last_pass': 96,
+ 'suspected_cls': [
+ {
+ 'build_number': 98,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ ('modified f98.cc[456] '
+ '(and it was in log)'): 4,
+ },
+ }
+ ]
+ },
+ {
+ 'test_name': 'Unittest3.Subtest3',
+ 'first_failure': 98,
+ 'last_pass': 96,
+ 'suspected_cls': []
+ }
+ ]
+ }
+ ]
+ }
+
+ result = build_failure._GetOrganizedAnalysisResultBySuspectedCL(
+ analysis_result)
+
+ expected_result = {
+ 'b': [
+ {
+ 'supported': True,
+ 'first_failure': 98,
+ 'last_pass': 97,
+ 'suspected_cls': [
+ {
+ 'build_number': 98,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ 'modified f98.cc[123, 456] (and it was in log)': 4,
+ },
+ }
+ ],
+ 'tests': ['Unittest2.Subtest1', 'Unittest3.Subtest2']
+ },
+ {
+ 'first_failure': 98,
+ 'last_pass': 96,
+ 'supported': True,
+ 'suspected_cls': [],
+ 'tests': ['Unittest3.Subtest3']
+ }
+ ]
+ }
+ self.assertEqual(expected_result, result)
+
+ def testGetAnalysisResultWithTryJobInfo(self):
+ master_name = 'm'
+ builder_name = 'b'
+ build_number = 119
+ organized_results = {
+ 'step1 on platform': [
+ {
+ 'supported': True,
+ 'first_failure': 119,
+ 'last_pass': 118,
+ 'suspected_cls': [
+ {
+ 'build_number': 119,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ 'modified f98.cc[123, 456] (and it was in log)': 4,
+ },
+ }
+ ],
+ 'tests': ['test2', 'test3']
+ },
+ {
+ 'first_failure': 119,
+ 'last_pass': 118,
+ 'supported': True,
+ 'suspected_cls': [],
+ 'tests': ['test4']
+ },
+ {
+ 'first_failure': 120,
+ 'last_pass': 119,
+ 'supported': True,
+ 'suspected_cls': [],
+ 'tests': ['test1']
+ }
+ ]
+ }
+
+ updated_result = build_failure._GetAnalysisResultWithTryJobInfo(
+ organized_results, master_name, builder_name, build_number)
+
+ expected_result = {
+ 'step1 on platform':{
+ 'results': {
+ 'reliable_failures': [
+ {
+ 'try_job':{
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium'
+ '.linux/builders/linux_variable/builds/121'),
+ 'try_job_build_number': 121,
+ 'tests': ['test3'],
+ 'culprit': {}
+ },
+ 'heuristic_analysis': {
+ 'suspected_cls': [
+ {
+ 'build_number': 119,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ ('modified f98.cc[123, 456] '
+ '(and it was in log)'): 4,
+ },
+ }
+ ]
+ },
+ 'tests': ['test3'],
+ 'first_failure': 119,
+ 'last_pass': 118,
+ 'supported': True
+ },
+ {
+ 'try_job':{
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium'
+ '.linux/builders/linux_variable/builds/121'),
+ 'try_job_build_number': 121,
+ 'culprit': {
+ 'revision': 'rev2',
+ 'commit_position': '2',
+ 'review_url': 'url_2'
+ },
+ 'tests': ['test2']
+ },
+ 'heuristic_analysis': {
+ 'suspected_cls': [
+ {
+ 'build_number': 119,
+ 'repo_name': 'chromium',
+ 'revision': 'r98_1',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 4,
+ 'hints': {
+ ('modified f98.cc[123, 456] '
+ '(and it was in log)'): 4,
+ },
+ }
+ ]
+ },
+ 'tests': ['test2'],
+ 'first_failure': 119,
+ 'last_pass': 118,
+ 'supported': True
+ }
+ ],
+ 'flaky_failures': [
+ {
+ 'try_job':{
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/119',
+ 'status': result_status.FLAKY,
+ 'task_id': 'task1',
+ 'task_url': 'url/task1',
+ 'tests': ['test4']
+ },
+ 'heuristic_analysis': {
+ 'suspected_cls': []
+ },
+ 'tests': ['test4'],
+ 'first_failure': 119,
+ 'last_pass': 118,
+ 'supported': True
+ }
+ ],
+ 'unclassified_failures': [
+ {
+ 'try_job':{
+ 'ref_name': 'step1',
+ 'try_job_key': 'm/b/120',
+ 'status': result_status.NO_TRY_JOB_REASON_MAP[
+ wf_analysis_status.PENDING],
+ 'task_id': 'task2',
+ 'task_url': 'url/task2',
+ 'tests': ['test1']
+ },
+ 'heuristic_analysis': {
+ 'suspected_cls': []
+ },
+ 'tests': ['test1'],
+ 'first_failure': 120,
+ 'last_pass': 119,
+ 'supported': True
+ }
+ ]
+ }
+ }
+ }
+
+ self.assertEqual(expected_result, updated_result)
+
+ def testGetAnalysisResultWithTryJobInfoNoTryJobInfo(self):
+ organized_results = {
+ 'step1 on platform':{}
+ }
+ result = build_failure._GetAnalysisResultWithTryJobInfo(
+ organized_results, 'n', 'b', 120)
+ self.assertEqual({}, result)
+
+ def testGetAnalysisResultWithTryJobInfoCompile(self):
+ organized_results = {
+ 'compile': [
+ {
+ 'first_failure': 120,
+ 'last_pass': 119,
+ 'supported': True,
+ 'suspected_cls': [
+ {
+ 'build_number': 120,
+ 'repo_name': 'chromium',
+ 'revision': 'rev2',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 2,
+ 'hints': {
+ 'modified f99_2.cc (and it was in log)': 2,
+ },
+ }
+ ],
+ 'tests': []
+ }
+ ]
+ }
+ result = build_failure._GetAnalysisResultWithTryJobInfo(
+ organized_results, 'm', 'b', 120)
+
+ expected_result = {
+ 'compile':{
+ 'results': {
+ 'reliable_failures': [
+ {
+ 'try_job': {
+ 'try_job_key': 'm/b/120',
+ 'status': wf_analysis_status.ANALYZED,
+ 'try_job_build_number': 120,
+ 'try_job_url': (
+ 'http://build.chromium.org/p/tryserver.chromium'
+ '.linux/builders/linux_variable/builds/120'),
+ 'culprit': {
+ 'revision': 'rev2',
+ 'commit_position': '2',
+ 'review_url': 'url_2'
+ }
+ },
+ 'heuristic_analysis': {
+ 'suspected_cls': [
+ {
+ 'build_number': 120,
+ 'repo_name': 'chromium',
+ 'revision': 'rev2',
+ 'commit_position': None,
+ 'url': None,
+ 'score': 2,
+ 'hints': {('modified f99_2.cc '
+ '(and it was in log)'): 2
+ },
+ }
+ ]
+ },
+ 'tests': [],
+ 'first_failure': 120,
+ 'last_pass': 119,
+ 'supported': True
+ }
+ ]
+ }
+ }
+ }
+ self.assertEqual(expected_result, result)
« no previous file with comments | « appengine/findit/handlers/build_failure.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698