Chromium Code Reviews| Index: appengine/findit/waterfall/test/identify_try_job_culprit_pipeline_test.py |
| diff --git a/appengine/findit/waterfall/test/identify_try_job_culprit_pipeline_test.py b/appengine/findit/waterfall/test/identify_try_job_culprit_pipeline_test.py |
| index 05d637b5ec66124dfd454d4fcffa12acabef49a2..ba4609c0a7b57a723a5b20b8402b682eedb276a8 100644 |
| --- a/appengine/findit/waterfall/test/identify_try_job_culprit_pipeline_test.py |
| +++ b/appengine/findit/waterfall/test/identify_try_job_culprit_pipeline_test.py |
| @@ -9,6 +9,7 @@ from model import wf_analysis_status |
| from model.wf_try_job import WfTryJob |
| from waterfall.identify_try_job_culprit_pipeline import( |
| IdentifyTryJobCulpritPipeline) |
| +from waterfall.try_job_type import TryJobType |
| class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| @@ -21,6 +22,7 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| self.code_review_url = code_review_url |
| mock_change_logs = {} |
| + mock_change_logs['rev1'] = MockedChangeLog('1', 'url_1') |
| mock_change_logs['rev2'] = MockedChangeLog('2', 'url_2') |
| return mock_change_logs.get(revision) |
| @@ -77,33 +79,19 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| ] |
| })) |
| - def testGetCulpritFromFailedRevision(self): |
| - self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog) |
| - self.assertIsNone( |
| - IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision(None)) |
| - self.assertIsNone( |
| - IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision( |
| - 'revision_with_no_change_log')) |
| - self.assertEqual( |
| - { |
| - 'revision': 'rev2', |
| - 'commit_position': '2', |
| - 'review_url': 'url_2' |
| - }, |
| - IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision('rev2')) |
| - |
| def testIdentifyCulpritForCompileTryJobNoCulprit(self): |
| master_name = 'm' |
| builder_name = 'b' |
| build_number = 1 |
| - try_job_id = '1' |
| try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| try_job.put() |
| pipeline = IdentifyTryJobCulpritPipeline() |
| culprit = pipeline.run( |
| - master_name, builder_name, build_number, try_job_id, None) |
| + master_name, builder_name, build_number, ['rev1'], |
| + TryJobType.COMPILE, '1', None) |
| + try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) |
| self.assertEqual([], try_job.compile_results) |
| @@ -113,7 +101,6 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| master_name = 'm' |
| builder_name = 'b' |
| build_number = 1 |
| - try_job_id = '1' |
| compile_result = { |
| 'report': { |
| 'result': { |
| @@ -140,8 +127,8 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| pipeline = IdentifyTryJobCulpritPipeline() |
| culprit = pipeline.run( |
| - master_name, builder_name, build_number, try_job_id, compile_result) |
| - |
| + master_name, builder_name, build_number, ['rev1'], |
| + TryJobType.COMPILE, '1', compile_result) |
| expected_compile_result = { |
| 'report': { |
| 'result': { |
| @@ -160,42 +147,59 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| self.assertEqual(expected_compile_result['culprit'], culprit) |
| try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| + |
| self.assertEqual(expected_compile_result, try_job.compile_results[-1]) |
| self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) |
| - # TODO(lijeffrey): Deprecate all tests with compile_results whose 'result' |
| - # key is a list once it is returned as a dict from the recipe. |
| - def testIdentifyCulpritForCompileListTryJobSuccess(self): |
| + def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self): |
| master_name = 'm' |
| builder_name = 'b' |
| build_number = 1 |
| - try_job_id = '1' |
| compile_result = { |
|
lijeffrey
2016/02/02 00:24:31
Since the compile recipe has now changed, the form
chanli
2016/02/02 01:53:02
Done.
|
| 'report': [ |
| ['rev1', 'passed'], |
| - ['rev2', 'failed'] |
| + ['rev2', 'passed'] |
| ], |
| 'url': 'url', |
| 'try_job_id': '1', |
| } |
| + WfTryJob.Create(master_name, builder_name, build_number).put() |
| - try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| - try_job.status = wf_analysis_status.ANALYZING |
| - try_job.compile_results = [{ |
| + pipeline = IdentifyTryJobCulpritPipeline() |
| + culprit = pipeline.run( |
| + master_name, builder_name, build_number, ['rev1'], |
| + TryJobType.COMPILE, '1', compile_result) |
| + try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| + |
| + self.assertIsNone(culprit) |
| + self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) |
| + |
| + # TODO(lijeffrey): Deprecate all tests with compile_results whose 'result' |
| + # key is a list once it is returned as a dict from the recipe. |
| + def testIdentifyCulpritForCompileListTryJobSuccess(self): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 1 |
| + compile_result = { |
| 'report': [ |
| ['rev1', 'passed'], |
| ['rev2', 'failed'] |
| ], |
| 'url': 'url', |
| 'try_job_id': '1', |
| - }] |
| + } |
| + |
| + try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| + try_job.status = wf_analysis_status.ANALYZING |
| + try_job.compile_results = [compile_result] |
| try_job.put() |
| self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog) |
| pipeline = IdentifyTryJobCulpritPipeline() |
| culprit = pipeline.run( |
| - master_name, builder_name, build_number, try_job_id, compile_result) |
| + master_name, builder_name, build_number, ['rev1'], |
| + TryJobType.COMPILE, '1', compile_result) |
| expected_compile_result = { |
| 'report': [ |
| @@ -216,3 +220,217 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| self.assertEqual(expected_compile_result, try_job.compile_results[-1]) |
| self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) |
| + |
| + def testIdentifyCulpritForTestTryJobReturnNoneIfNoTryJobResult(self): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 1 |
| + |
| + try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| + try_job.status = wf_analysis_status.ANALYZING |
| + try_job.put() |
| + |
| + pipeline = IdentifyTryJobCulpritPipeline() |
| + culprit = pipeline.run( |
| + master_name, builder_name, build_number, ['rev1', 'rev2'], |
| + TryJobType.TEST, '1', None) |
| + |
| + self.assertIsNone(culprit) |
| + |
| + def testIdentifyCulpritForTestTryJobReturnNoneIfNoRevisionToCheck(self): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 1 |
| + test_result = { |
| + 'report': { |
| + 'rev1': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1'] |
| + } |
| + } |
| + }, |
| + 'url': 'url', |
| + 'try_job_id': '1' |
| + } |
| + |
| + try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| + try_job.status = wf_analysis_status.ANALYZING |
| + try_job.put() |
| + |
| + pipeline = IdentifyTryJobCulpritPipeline() |
| + culprit = pipeline.run( |
| + master_name, builder_name, build_number, [], TryJobType.TEST, '1', |
| + test_result) |
| + |
| + self.assertIsNone(culprit) |
| + |
| + def testIdentifyCulpritForTestTryJobReturnNoneIfNoCulpritInfo(self): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 1 |
| + test_result = { |
| + 'report': { |
| + 'rev3': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1'] |
| + } |
| + } |
| + }, |
| + 'url': 'url', |
| + 'try_job_id': '1' |
| + } |
| + |
| + try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| + try_job.status = wf_analysis_status.ANALYZING |
| + try_job.put() |
| + |
| + pipeline = IdentifyTryJobCulpritPipeline() |
| + culprit = pipeline.run( |
| + master_name, builder_name, build_number, ['rev3'], TryJobType.TEST, |
| + '1', test_result) |
| + |
| + expected_culprit = { |
| + 'a_test': { |
| + 'tests':{ |
| + 'a_test1': { |
| + 'revision': 'rev3' |
| + } |
| + } |
| + } |
| + } |
| + self.assertEqual(expected_culprit, culprit) |
| + |
| + def testIdentifyCulpritForTestTryJobSuccess(self): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 1 |
| + test_result = { |
| + 'report': { |
| + 'rev1': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1'] |
| + }, |
| + 'b_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['b_test1'] |
| + }, |
| + 'c_test': { |
| + 'status': 'passed', |
| + 'valid': True |
| + } |
| + }, |
| + 'rev2': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1', 'a_test2'] |
| + }, |
| + 'b_test': { |
| + 'status': 'passed', |
| + 'valid': True |
| + }, |
| + 'c_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': [] |
| + } |
| + } |
| + }, |
| + 'url': 'url', |
| + 'try_job_id': '1' |
| + } |
| + |
| + try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| + try_job.status = wf_analysis_status.ANALYZING |
| + try_job.test_results = [test_result] |
| + try_job.put() |
| + |
| + self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog) |
| + |
| + pipeline = IdentifyTryJobCulpritPipeline() |
| + culprit = pipeline.run( |
| + master_name, builder_name, build_number, ['rev1', 'rev2'], |
| + TryJobType.TEST, '1', test_result) |
| + |
| + expected_test_result = { |
| + 'report': { |
| + 'rev1': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1'] |
| + }, |
| + 'b_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['b_test1'] |
| + }, |
| + 'c_test': { |
| + 'status': 'passed', |
| + 'valid': True |
| + } |
| + }, |
| + 'rev2': { |
| + 'a_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': ['a_test1', 'a_test2'] |
| + }, |
| + 'b_test': { |
| + 'status': 'passed', |
| + 'valid': True |
| + }, |
| + 'c_test': { |
| + 'status': 'failed', |
| + 'valid': True, |
| + 'failures': [] |
| + } |
| + } |
| + }, |
| + 'url': 'url', |
| + 'try_job_id': '1', |
| + 'culprit': { |
| + 'a_test': { |
| + 'tests': { |
| + 'a_test1': { |
| + 'revision': 'rev1', |
| + 'commit_position': '1', |
| + 'review_url': 'url_1' |
| + }, |
| + 'a_test2': { |
| + 'revision': 'rev2', |
| + 'commit_position': '2', |
| + 'review_url': 'url_2' |
| + } |
| + } |
| + }, |
| + 'b_test': { |
| + 'tests': { |
| + 'b_test1': { |
| + 'revision': 'rev1', |
| + 'commit_position': '1', |
| + 'review_url': 'url_1' |
| + } |
| + } |
| + }, |
| + 'c_test': { |
| + 'revision': 'rev2', |
| + 'commit_position': '2', |
| + 'review_url': 'url_2', |
| + 'tests': {} |
| + } |
| + } |
| + } |
| + |
| + self.assertEqual(expected_test_result['culprit'], culprit) |
| + |
| + try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| + self.assertEqual(expected_test_result, try_job.test_results[-1]) |
| + self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) |