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