| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 datetime import datetime | 5 from datetime import datetime |
| 6 import mock | 6 import mock |
| 7 | 7 |
| 8 from common import constants | 8 from common import constants |
| 9 from model.flake.flake_analysis_request import BuildStep | 9 from model.flake.flake_analysis_request import BuildStep |
| 10 from model.flake.flake_analysis_request import FlakeAnalysisRequest | 10 from model.flake.flake_analysis_request import FlakeAnalysisRequest |
| 11 from waterfall.flake import flake_analysis_service | 11 from waterfall.flake import flake_analysis_service |
| 12 from waterfall.test import wf_testcase | 12 from waterfall.test import wf_testcase |
| 13 from waterfall.test_info import TestInfo |
| 13 | 14 |
| 14 | 15 |
| 15 class FlakeAnalysisServiceTest(wf_testcase.WaterfallTestCase): | 16 class FlakeAnalysisServiceTest(wf_testcase.WaterfallTestCase): |
| 16 | 17 |
| 17 def testCheckFlakeSwarmedAndSupportedWhenNotSupported(self): | 18 def testCheckFlakeSwarmedAndSupportedWhenNotSupported(self): |
| 18 request = FlakeAnalysisRequest.Create('flake', False, 123) | 19 request = FlakeAnalysisRequest.Create('flake', False, 123) |
| 19 step1 = BuildStep.Create('m', 'b1', 10, 's', datetime(2016, 10, 01)) | 20 step1 = BuildStep.Create('m', 'b1', 10, 's', datetime(2016, 10, 01)) |
| 20 step1.swarmed = False | 21 step1.swarmed = False |
| 21 step1.supported = False | 22 step1.supported = False |
| 22 step2 = BuildStep.Create('m', 'b2', 10, 's', datetime(2016, 10, 01)) | 23 step2 = BuildStep.Create('m', 'b2', 10, 's', datetime(2016, 10, 01)) |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 def CheckForNewAnalysis(*_): | 218 def CheckForNewAnalysis(*_): |
| 218 step.wf_master_name = 'wf_m' | 219 step.wf_master_name = 'wf_m' |
| 219 step.wf_builder_name = 'wf_b' | 220 step.wf_builder_name = 'wf_b' |
| 220 step.wf_build_number = 100 | 221 step.wf_build_number = 100 |
| 221 step.wf_step_name = 'wf_s' | 222 step.wf_step_name = 'wf_s' |
| 222 return 1, step | 223 return 1, step |
| 223 | 224 |
| 224 mocked_analysis = mock.Mock(key='key') | 225 mocked_analysis = mock.Mock(key='key') |
| 225 mocked_request = mock.Mock() | 226 mocked_request = mock.Mock() |
| 226 | 227 |
| 228 normalized_test = TestInfo('wf_m', 'wf_b', 100, 'wf_s', 'flake') |
| 229 original_test = TestInfo('m', 'b', 80, 's', 'flake') |
| 230 |
| 227 with mock.patch.object( | 231 with mock.patch.object( |
| 228 flake_analysis_service, '_CheckForNewAnalysis', | 232 flake_analysis_service, '_CheckForNewAnalysis', |
| 229 side_effect=CheckForNewAnalysis) as ( | 233 side_effect=CheckForNewAnalysis) as ( |
| 230 mocked_CheckForNewAnalysis), mock.patch.object( | 234 mocked_CheckForNewAnalysis), mock.patch.object( |
| 231 flake_analysis_service.initialize_flake_pipeline, | 235 flake_analysis_service.initialize_flake_pipeline, |
| 232 'ScheduleAnalysisIfNeeded', return_value=mocked_analysis) as ( | 236 'ScheduleAnalysisIfNeeded', return_value=mocked_analysis) as ( |
| 233 mocked_ScheduleAnalysisIfNeeded), mock.patch.object( | 237 mocked_ScheduleAnalysisIfNeeded), mock.patch.object( |
| 234 flake_analysis_service.FlakeAnalysisRequest, | 238 flake_analysis_service.FlakeAnalysisRequest, |
| 235 'GetVersion', return_value=mocked_request) as mocked_GetVersion: | 239 'GetVersion', return_value=mocked_request) as mocked_GetVersion: |
| 236 self.assertTrue(flake_analysis_service.ScheduleAnalysisForFlake( | 240 self.assertTrue(flake_analysis_service.ScheduleAnalysisForFlake( |
| 237 request, 'test@chromium.org', True)) | 241 request, 'test@chromium.org', True)) |
| 238 mocked_CheckForNewAnalysis.assert_called_once_with(request) | 242 mocked_CheckForNewAnalysis.assert_called_once_with(request) |
| 239 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with( | 243 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with( |
| 240 'wf_m', 'wf_b', 100, 'wf_s', 'flake', | 244 normalized_test, original_test, bug_id=123, |
| 241 allow_new_analysis=True, manually_triggered=False, | 245 allow_new_analysis=True, manually_triggered=False, |
| 242 queue_name=constants.WATERFALL_ANALYSIS_QUEUE) | 246 queue_name=constants.WATERFALL_ANALYSIS_QUEUE) |
| 243 mocked_GetVersion.assert_called_once_with(key='flake', version=1) | 247 mocked_GetVersion.assert_called_once_with(key='flake', version=1) |
| 244 mocked_request.assert_has_calls([ | 248 mocked_request.assert_has_calls([ |
| 245 mock.call.analyses.append('key'), | 249 mock.call.analyses.append('key'), |
| 246 mock.call.put(), | 250 mock.call.put(), |
| 247 ]) | 251 ]) |
| 248 | 252 |
| 249 @mock.patch.object( | 253 @mock.patch.object( |
| 250 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep') | 254 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep') |
| 251 def testAuthorizedAccessAndNewAnalysisNeededButNotTriggered(self, _mock): | 255 def testAuthorizedAccessAndNewAnalysisNeededButNotTriggered(self, _mock): |
| 252 step = BuildStep.Create('m', 'b', 80, 's', datetime(2016, 10, 20)) | 256 step = BuildStep.Create('m', 'b', 80, 's', datetime(2016, 10, 20)) |
| 253 request = FlakeAnalysisRequest.Create('flake', False, 123) | 257 request = FlakeAnalysisRequest.Create('flake', False, 123) |
| 254 request.build_steps = [step] | 258 request.build_steps = [step] |
| 255 | 259 |
| 256 def CheckForNewAnalysis(*_): | 260 def CheckForNewAnalysis(*_): |
| 257 step.wf_master_name = 'wf_m' | 261 step.wf_master_name = 'wf_m' |
| 258 step.wf_builder_name = 'wf_b' | 262 step.wf_builder_name = 'wf_b' |
| 259 step.wf_build_number = 100 | 263 step.wf_build_number = 100 |
| 260 step.wf_step_name = 'wf_s' | 264 step.wf_step_name = 'wf_s' |
| 261 return 1, step | 265 return 1, step |
| 262 | 266 |
| 267 normalized_test = TestInfo('wf_m', 'wf_b', 100, 'wf_s', 'flake') |
| 268 original_test = TestInfo('m', 'b', 80, 's', 'flake') |
| 263 with mock.patch.object( | 269 with mock.patch.object( |
| 264 flake_analysis_service, '_CheckForNewAnalysis', | 270 flake_analysis_service, '_CheckForNewAnalysis', |
| 265 side_effect=CheckForNewAnalysis) as ( | 271 side_effect=CheckForNewAnalysis) as ( |
| 266 mocked_CheckForNewAnalysis), mock.patch.object( | 272 mocked_CheckForNewAnalysis), mock.patch.object( |
| 267 flake_analysis_service.initialize_flake_pipeline, | 273 flake_analysis_service.initialize_flake_pipeline, |
| 268 'ScheduleAnalysisIfNeeded', return_value=None) as ( | 274 'ScheduleAnalysisIfNeeded', return_value=None) as ( |
| 269 mocked_ScheduleAnalysisIfNeeded), mock.patch.object( | 275 mocked_ScheduleAnalysisIfNeeded), mock.patch.object( |
| 270 flake_analysis_service.FlakeAnalysisRequest, | 276 flake_analysis_service.FlakeAnalysisRequest, |
| 271 'GetVersion', return_value=None) as mocked_GetVersion: | 277 'GetVersion', return_value=None) as mocked_GetVersion: |
| 272 self.assertFalse(flake_analysis_service.ScheduleAnalysisForFlake( | 278 self.assertFalse(flake_analysis_service.ScheduleAnalysisForFlake( |
| 273 request, 'test@chromium.org', True)) | 279 request, 'test@chromium.org', True)) |
| 274 mocked_CheckForNewAnalysis.assert_called_once_with(request) | 280 mocked_CheckForNewAnalysis.assert_called_once_with(request) |
| 275 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with( | 281 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with( |
| 276 'wf_m', 'wf_b', 100, 'wf_s', 'flake', | 282 normalized_test, original_test, bug_id=123, |
| 277 allow_new_analysis=True, manually_triggered=False, | 283 allow_new_analysis=True, manually_triggered=False, |
| 278 queue_name=constants.WATERFALL_ANALYSIS_QUEUE) | 284 queue_name=constants.WATERFALL_ANALYSIS_QUEUE) |
| 279 mocked_GetVersion.assert_not_called() | 285 mocked_GetVersion.assert_not_called() |
| OLD | NEW |