| 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 4557aa46735982ce6fdb8ad322e11d8652b2dbe7..8abda36162eda9eb2577011bebebb23f64d7826a 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
|
| @@ -24,6 +24,62 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
|
| mock_change_logs['rev2'] = MockedChangeLog('2', 'url_2')
|
| return mock_change_logs.get(revision)
|
|
|
| + def testGetFailedRevisionFromResultsDict(self):
|
| + self.assertIsNone(
|
| + IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict({}))
|
| + self.assertEqual(
|
| + None,
|
| + IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
|
| + {'rev1': 'passed'}))
|
| + self.assertEqual(
|
| + 'rev1',
|
| + IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
|
| + {'rev1': 'failed'}))
|
| + self.assertEqual(
|
| + 'rev2',
|
| + IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
|
| + {'rev1': 'passed', 'rev2': 'failed'}))
|
| +
|
| + def testFindFailedRevisionFromCompileResult(self):
|
| + self.assertIsNone(
|
| + IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
|
| + None))
|
| + self.assertIsNone(
|
| + IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
|
| + {'analysis_info': {}}))
|
| + self.assertIsNone(
|
| + IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
|
| + {
|
| + 'analysis_info': {
|
| + 'result': {
|
| + 'rev1': 'passed'
|
| + }
|
| + }
|
| + }))
|
| + self.assertEqual(
|
| + 'rev2',
|
| + IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
|
| + {
|
| + 'analysis_info': {
|
| + 'result': {
|
| + 'rev1': 'passed',
|
| + 'rev2': 'failed'
|
| + }
|
| + }
|
| + }))
|
| +
|
| + def testGetCulpritFromFailedRevision(self):
|
| + self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
|
| + self.assertIsNone(
|
| + IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision(None))
|
| + self.assertEqual(
|
| + {
|
| + 'revision': 'rev2',
|
| + 'commit_position': '2',
|
| + 'review_url': 'url_2'
|
| + },
|
| + IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision('rev2'))
|
| +
|
| def testIdentifyCulpritForCompileReturnNoneIfNoCompileResult(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| @@ -46,7 +102,9 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
|
| build_number = 1
|
| try_job_id = '1'
|
| compile_result = {
|
| - 'result': [],
|
| + 'analysis_info': {
|
| + 'result': {},
|
| + },
|
| 'url': 'url',
|
| 'try_job_id': '1',
|
| }
|
| @@ -66,6 +124,135 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
|
| build_number = 1
|
| try_job_id = '1'
|
| compile_result = {
|
| + 'analysis_info': {
|
| + 'result': {
|
| + 'rev1': 'passed',
|
| + 'rev2': 'passed'
|
| + }
|
| + },
|
| + 'url': 'url',
|
| + 'try_job_id': '1',
|
| + }
|
| + WfTryJob.Create(master_name, builder_name, build_number).put()
|
| +
|
| + pipeline = IdentifyTryJobCulpritPipeline()
|
| + culprit = pipeline.run(
|
| + master_name, builder_name, build_number, try_job_id, compile_result)
|
| + try_job = WfTryJob.Get(master_name, builder_name, build_number)
|
| +
|
| + self.assertIsNone(culprit)
|
| + self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
|
| +
|
| + def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self):
|
| + master_name = 'm'
|
| + builder_name = 'b'
|
| + build_number = 1
|
| + try_job_id = '1'
|
| + compile_result = {
|
| + 'result': [
|
| + ['rev1', 'failed']
|
| + ],
|
| + 'url': 'url',
|
| + 'try_job_id': '1',
|
| + }
|
| +
|
| + self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
|
| + WfTryJob.Create(master_name, builder_name, build_number).put()
|
| +
|
| + pipeline = IdentifyTryJobCulpritPipeline()
|
| + culprit = pipeline.run(
|
| + master_name, builder_name, build_number, try_job_id, compile_result)
|
| + try_job = WfTryJob.Get(master_name, builder_name, build_number)
|
| +
|
| + self.assertIsNone(culprit)
|
| + self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
|
| +
|
| + def testIdentifyCulpritForCompileTryJobSuccess(self):
|
| + master_name = 'm'
|
| + builder_name = 'b'
|
| + build_number = 1
|
| + try_job_id = '1'
|
| + compile_result = {
|
| + 'analysis_info': {
|
| + 'result': {
|
| + '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 = [{
|
| + 'analysis_info': {
|
| + 'result': {
|
| + 'rev1': 'passed',
|
| + 'rev2': 'failed'
|
| + },
|
| + },
|
| + 'url': 'url',
|
| + 'try_job_id': '1',
|
| + }]
|
| + 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)
|
| +
|
| + expected_compile_result = {
|
| + 'analysis_info': {
|
| + 'result': {
|
| + 'rev1': 'passed',
|
| + 'rev2': 'failed'
|
| + }
|
| + },
|
| + 'url': 'url',
|
| + 'try_job_id': '1',
|
| + 'culprit': {
|
| + 'revision': 'rev2',
|
| + 'commit_position': '2',
|
| + 'review_url': 'url_2'
|
| + }
|
| + }
|
| +
|
| + 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 testIdentifyCulpritForCompileNoTryJobResultListForCompile(self):
|
| + master_name = 'm'
|
| + builder_name = 'b'
|
| + build_number = 1
|
| + try_job_id = '1'
|
| + compile_result = {
|
| + 'result': [],
|
| + 'url': 'url',
|
| + 'try_job_id': '1',
|
| + }
|
| + WfTryJob.Create(master_name, builder_name, build_number).put()
|
| +
|
| + pipeline = IdentifyTryJobCulpritPipeline()
|
| + culprit = pipeline.run(
|
| + master_name, builder_name, build_number, try_job_id, compile_result)
|
| + try_job = WfTryJob.Get(master_name, builder_name, build_number)
|
| +
|
| + self.assertIsNone(culprit)
|
| + self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
|
| +
|
| + def testIdentifyCulpritForCompileListReturnNoneIfAllPassed(self):
|
| + master_name = 'm'
|
| + builder_name = 'b'
|
| + build_number = 1
|
| + try_job_id = '1'
|
| + compile_result = {
|
| 'result': [
|
| ['rev1', 'passed'],
|
| ['rev2', 'passed']
|
| @@ -83,7 +270,7 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
|
| self.assertIsNone(culprit)
|
| self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
|
|
|
| - def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self):
|
| + def testIdentifyCulpritForCompileListReturnNoneIfNoChangeLog(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| build_number = 1
|
| @@ -107,7 +294,7 @@ class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
|
| self.assertIsNone(culprit)
|
| self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
|
|
|
| - def testIdentifyCulpritForCompileTryJobSuccess(self):
|
| + def testIdentifyCulpritForCompileListTryJobSuccess(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| build_number = 1
|
|
|