| OLD | NEW | 
|---|
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be | 
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. | 
| 4 | 4 | 
| 5 from testing_utils import testing | 5 from testing_utils import testing | 
| 6 | 6 | 
| 7 from common import buildbucket_client | 7 from common import buildbucket_client | 
| 8 from model import wf_analysis_status | 8 from model import wf_analysis_status | 
| 9 from model.wf_try_job import WfTryJob | 9 from model.wf_try_job import WfTryJob | 
| 10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline | 10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline | 
|  | 11 from waterfall.try_job_enums import TryJobType | 
| 11 | 12 | 
| 12 class MonitorTryJobPipelineTest(testing.AppengineTestCase): | 13 class MonitorTryJobPipelineTest(testing.AppengineTestCase): | 
| 13   def _Mock_GetTryJobs(self, build_id): | 14   def _Mock_GetTryJobs(self, build_id): | 
| 14     def Mocked_GetTryJobs(*_): | 15     def Mocked_GetTryJobs(*_): | 
| 15       data = { | 16       data = { | 
| 16           '1': { | 17           '1': { | 
| 17               'build': { | 18               'build': { | 
| 18                   'id': '1', | 19                   'id': '1', | 
| 19                   'url': 'url', | 20                   'url': 'url', | 
| 20                   'status': 'COMPLETED', | 21                   'status': 'COMPLETED', | 
| 21                   'result_details_json': ( | 22                   'result_details_json': ( | 
| 22                       '{"properties": {"result": [["rev1", "passed"],' | 23                       '{"properties": {"result": [["rev1", "passed"],' | 
| 23                       ' ["rev2", "failed"]]}}') | 24                       ' ["rev2", "failed"]]}}') | 
| 24               } | 25               } | 
| 25           }, | 26           }, | 
| 26           '2': { | 27           '2': { | 
| 27               'error': { | 28               'error': { | 
| 28                   'reason': 'BUILD_NOT_FOUND', | 29                   'reason': 'BUILD_NOT_FOUND', | 
| 29                   'message': 'message', | 30                   'message': 'message', | 
| 30               } | 31               } | 
|  | 32           }, | 
|  | 33           '3': { | 
|  | 34               'build': { | 
|  | 35                   'id': '3', | 
|  | 36                   'url': 'url', | 
|  | 37                   'status': 'COMPLETED', | 
|  | 38                   'result_details_json': ( | 
|  | 39                       '{"properties": {"result": {"rev1": {"a_test": {"status":' | 
|  | 40                       ' "passed", "valid": true}}, "rev2": {"a_test": ' | 
|  | 41                       '{"status": "failed", "valid": true, "failures": ["test1"' | 
|  | 42                       ', "test2"]}}}}}') | 
|  | 43               } | 
| 31           } | 44           } | 
| 32       } | 45       } | 
| 33       compile_results = [] | 46       try_job_results = [] | 
| 34       build_error = data.get(build_id) | 47       build_error = data.get(build_id) | 
| 35       if build_error.get('error'):  # pragma: no cover | 48       if build_error.get('error'):  # pragma: no cover | 
| 36         compile_results.append(( | 49         try_job_results.append(( | 
| 37             buildbucket_client.BuildbucketError(build_error['error']), None)) | 50             buildbucket_client.BuildbucketError(build_error['error']), None)) | 
| 38       else: | 51       else: | 
| 39         compile_results.append(( | 52         try_job_results.append(( | 
| 40             None, buildbucket_client.BuildbucketBuild(build_error['build']))) | 53             None, buildbucket_client.BuildbucketBuild(build_error['build']))) | 
| 41       return compile_results | 54       return try_job_results | 
| 42     self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) | 55     self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) | 
| 43 | 56 | 
| 44   def testGetTryJobsForCompileSuccess(self): | 57   def testGetTryJobsForCompileSuccess(self): | 
| 45     master_name = 'm' | 58     master_name = 'm' | 
| 46     builder_name = 'b' | 59     builder_name = 'b' | 
| 47     build_number = 1 | 60     build_number = 1 | 
| 48     try_job_id = '1' | 61     try_job_id = '1' | 
| 49 | 62 | 
| 50     try_job = WfTryJob.Create(master_name, builder_name, build_number) | 63     try_job = WfTryJob.Create(master_name, builder_name, build_number) | 
| 51     try_job.compile_results = [ | 64     try_job.compile_results = [ | 
| 52         { | 65         { | 
| 53             'result': None, | 66             'result': None, | 
| 54             'url': 'url', | 67             'url': 'url', | 
| 55             'try_job_id': '1', | 68             'try_job_id': '1', | 
| 56         } | 69         } | 
| 57     ] | 70     ] | 
| 58     try_job.status = wf_analysis_status.ANALYZING | 71     try_job.status = wf_analysis_status.ANALYZING | 
| 59     try_job.put() | 72     try_job.put() | 
| 60     self._Mock_GetTryJobs(try_job_id) | 73     self._Mock_GetTryJobs(try_job_id) | 
| 61 | 74 | 
| 62     pipeline = MonitorTryJobPipeline() | 75     pipeline = MonitorTryJobPipeline() | 
| 63     compile_result = pipeline.run( | 76     compile_result = pipeline.run( | 
| 64         master_name, builder_name, build_number, try_job_id) | 77         master_name, builder_name, build_number, TryJobType.COMPILE, | 
|  | 78         try_job_id) | 
| 65 | 79 | 
| 66     expected_compile_result = { | 80     expected_compile_result = { | 
| 67         'result': [ | 81         'result': [ | 
| 68             ['rev1', 'passed'], | 82             ['rev1', 'passed'], | 
| 69             ['rev2', 'failed'] | 83             ['rev2', 'failed'] | 
| 70         ], | 84         ], | 
| 71         'url': 'url', | 85         'url': 'url', | 
| 72         'try_job_id': '1', | 86         'try_job_id': '1', | 
| 73     } | 87     } | 
| 74     self.assertEqual(expected_compile_result, compile_result) | 88     self.assertEqual(expected_compile_result, compile_result) | 
| 75 | 89 | 
| 76     try_job = WfTryJob.Get(master_name, builder_name, build_number) | 90     try_job = WfTryJob.Get(master_name, builder_name, build_number) | 
| 77     self.assertEqual(expected_compile_result, try_job.compile_results[-1]) | 91     self.assertEqual(expected_compile_result, try_job.compile_results[-1]) | 
| 78     self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 92     self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 
|  | 93 | 
|  | 94 | 
|  | 95   def testGetTryJobsForTestSuccess(self): | 
|  | 96     master_name = 'm' | 
|  | 97     builder_name = 'b' | 
|  | 98     build_number = 1 | 
|  | 99     try_job_id = '3' | 
|  | 100 | 
|  | 101     try_job = WfTryJob.Create(master_name, builder_name, build_number) | 
|  | 102     try_job.test_results = [ | 
|  | 103         { | 
|  | 104             'result': None, | 
|  | 105             'url': 'url', | 
|  | 106             'try_job_id': '3', | 
|  | 107         } | 
|  | 108     ] | 
|  | 109     try_job.status = wf_analysis_status.ANALYZING | 
|  | 110     try_job.put() | 
|  | 111     self._Mock_GetTryJobs(try_job_id) | 
|  | 112 | 
|  | 113     pipeline = MonitorTryJobPipeline() | 
|  | 114     test_result = pipeline.run( | 
|  | 115         master_name, builder_name, build_number, TryJobType.TEST, | 
|  | 116         try_job_id) | 
|  | 117 | 
|  | 118     expected_test_result = { | 
|  | 119         'result': { | 
|  | 120             'rev1': { | 
|  | 121                 'a_test': { | 
|  | 122                     'status': 'passed', | 
|  | 123                     'valid': True | 
|  | 124                 } | 
|  | 125             }, | 
|  | 126             'rev2': { | 
|  | 127                 'a_test': { | 
|  | 128                     'status': 'failed', | 
|  | 129                     'valid': True, | 
|  | 130                     'failures': ['test1', 'test2'] | 
|  | 131                 } | 
|  | 132             } | 
|  | 133         }, | 
|  | 134         'url': 'url', | 
|  | 135         'try_job_id': '3', | 
|  | 136     } | 
|  | 137     self.assertEqual(expected_test_result, test_result) | 
|  | 138 | 
|  | 139     try_job = WfTryJob.Get(master_name, builder_name, build_number) | 
|  | 140     self.assertEqual(expected_test_result, try_job.test_results[-1]) | 
|  | 141     self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 
| OLD | NEW | 
|---|