Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: appengine/findit/waterfall/flake/test/flake_analysis_service_test.py

Issue 2411893002: [Findit] Adding metadata for manually vs automatically triggered flake analyses (Closed)
Patch Set: Addressing comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.test import wf_testcase 13 from waterfall.test import wf_testcase
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))
23 step2.swarmed = False 24 step2.swarmed = False
24 step2.supported = False 25 step2.supported = False
25 request.build_steps = [step1, step2] 26 request.build_steps = [step1, step2]
26 27
27 self.assertEqual( 28 self.assertEqual(
28 (False, False, None), 29 (False, False, None),
29 flake_analysis_service._CheckFlakeSwarmedAndSupported(request)) 30 flake_analysis_service._CheckFlakeSwarmedAndSupported(request))
30 31
31
32 def testNeedNewAnalysisWhenNoPreviousOneAndNotStepLevelFlake(self): 32 def testNeedNewAnalysisWhenNoPreviousOneAndNotStepLevelFlake(self):
33 request = FlakeAnalysisRequest.Create('flake', False, 123) 33 request = FlakeAnalysisRequest.Create('flake', False, 123)
34 step1 = BuildStep.Create('m', 'b1', 10, 's', datetime(2016, 10, 01)) 34 step1 = BuildStep.Create('m', 'b1', 10, 's', datetime(2016, 10, 01))
35 step1.swarmed = False 35 step1.swarmed = False
36 step1.supported = False 36 step1.supported = False
37 step2 = BuildStep.Create('m', 'b2', 10, 's', datetime(2016, 10, 01)) 37 step2 = BuildStep.Create('m', 'b2', 10, 's', datetime(2016, 10, 01))
38 step2.swarmed = True 38 step2.swarmed = True
39 step2.supported = True 39 step2.supported = True
40 request.build_steps = [step1, step2] 40 request.build_steps = [step1, step2]
41 41
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 self.assertEqual(1, version) 186 self.assertEqual(1, version)
187 self.assertIsNotNone(step) 187 self.assertIsNotNone(step)
188 self.assertEqual(80, step.build_number) 188 self.assertEqual(80, step.build_number)
189 189
190 def testUnauthorizedAccess(self): 190 def testUnauthorizedAccess(self):
191 request = FlakeAnalysisRequest.Create('flake', False, 123) 191 request = FlakeAnalysisRequest.Create('flake', False, 123)
192 step = BuildStep.Create('m', 'b2', 80, 's', datetime(2016, 10, 20)) 192 step = BuildStep.Create('m', 'b2', 80, 's', datetime(2016, 10, 20))
193 request.build_steps = [step] 193 request.build_steps = [step]
194 194
195 self.assertIsNone(flake_analysis_service.ScheduleAnalysisForFlake( 195 self.assertIsNone(flake_analysis_service.ScheduleAnalysisForFlake(
196 request, 'test@chromium.org', False)) 196 request, 'test@chromium.org', False, triggering_sources.FINDIT_UI))
197 197
198 @mock.patch.object( 198 @mock.patch.object(
199 flake_analysis_service, '_CheckForNewAnalysis', return_value= (0, None)) 199 flake_analysis_service, '_CheckForNewAnalysis', return_value=(0, None))
200 @mock.patch.object( 200 @mock.patch.object(
201 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep') 201 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep')
202 def testAuthorizedAccessButNoNewAnalysisNeeded(self, _mock1, _mock2): 202 def testAuthorizedAccessButNoNewAnalysisNeeded(self, _mock1, _mock2):
203 request = FlakeAnalysisRequest.Create('flake', False, 123) 203 request = FlakeAnalysisRequest.Create('flake', False, 123)
204 step = BuildStep.Create('m', 'b2', 80, 's', datetime(2016, 10, 20)) 204 step = BuildStep.Create('m', 'b2', 80, 's', datetime(2016, 10, 20))
205 request.build_steps = [step] 205 request.build_steps = [step]
206 206
207 self.assertFalse(flake_analysis_service.ScheduleAnalysisForFlake( 207 self.assertFalse(flake_analysis_service.ScheduleAnalysisForFlake(
208 request, 'test@chromium.org', True)) 208 request, 'test@chromium.org', True, triggering_sources.FINDIT_UI))
209 209
210 @mock.patch.object( 210 @mock.patch.object(
211 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep') 211 flake_analysis_service.step_mapper, 'FindMatchingWaterfallStep')
212 def testAuthorizedAccessAndNewAnalysisNeededAndTriggered(self, _mock): 212 def testAuthorizedAccessAndNewAnalysisNeededAndTriggered(self, _mock):
213 step = BuildStep.Create('m', 'b', 80, 's', datetime(2016, 10, 20)) 213 step = BuildStep.Create('m', 'b', 80, 's', datetime(2016, 10, 20))
214 request = FlakeAnalysisRequest.Create('flake', False, 123) 214 request = FlakeAnalysisRequest.Create('flake', False, 123)
215 request.build_steps = [step] 215 request.build_steps = [step]
216 user_email = 'test@chromium.org'
217 triggering_source = triggering_sources.FINDIT_UI
216 218
217 def CheckForNewAnalysis(*_): 219 def CheckForNewAnalysis(*_):
218 step.wf_master_name = 'wf_m' 220 step.wf_master_name = 'wf_m'
219 step.wf_builder_name = 'wf_b' 221 step.wf_builder_name = 'wf_b'
220 step.wf_build_number = 100 222 step.wf_build_number = 100
221 step.wf_step_name = 'wf_s' 223 step.wf_step_name = 'wf_s'
222 return 1, step 224 return 1, step
223 225
224 mocked_analysis = mock.Mock(key='key') 226 mocked_analysis = mock.Mock(key='key')
225 mocked_request = mock.Mock() 227 mocked_request = mock.Mock()
226 228
227 with mock.patch.object( 229 with mock.patch.object(
228 flake_analysis_service, '_CheckForNewAnalysis', 230 flake_analysis_service, '_CheckForNewAnalysis',
229 side_effect=CheckForNewAnalysis) as ( 231 side_effect=CheckForNewAnalysis) as (
230 mocked_CheckForNewAnalysis), mock.patch.object( 232 mocked_CheckForNewAnalysis), mock.patch.object(
231 flake_analysis_service.initialize_flake_pipeline, 233 flake_analysis_service.initialize_flake_pipeline,
232 'ScheduleAnalysisIfNeeded', return_value=mocked_analysis) as ( 234 'ScheduleAnalysisIfNeeded', return_value=mocked_analysis) as (
233 mocked_ScheduleAnalysisIfNeeded), mock.patch.object( 235 mocked_ScheduleAnalysisIfNeeded), mock.patch.object(
234 flake_analysis_service.FlakeAnalysisRequest, 236 flake_analysis_service.FlakeAnalysisRequest,
235 'GetVersion', return_value=mocked_request) as mocked_GetVersion: 237 'GetVersion', return_value=mocked_request) as (
238 mocked_GetVersion):
236 self.assertTrue(flake_analysis_service.ScheduleAnalysisForFlake( 239 self.assertTrue(flake_analysis_service.ScheduleAnalysisForFlake(
237 request, 'test@chromium.org', True)) 240 request, user_email, True, triggering_source))
238 mocked_CheckForNewAnalysis.assert_called_once_with(request) 241 mocked_CheckForNewAnalysis.assert_called_once_with(request)
239 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with( 242 mocked_ScheduleAnalysisIfNeeded.assert_called_once_with(
240 'wf_m', 'wf_b', 100, 'wf_s', 'flake', 243 'wf_m', 'wf_b', 100, 'wf_s', 'flake',
241 allow_new_analysis=True, manually_triggered=False, 244 allow_new_analysis=True, manually_triggered=False,
245 user_email=user_email, triggering_source=triggering_source,
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]
259 user_email = 'test@chromium.org'
260 triggering_source = triggering_sources.FINDIT_UI
255 261
256 def CheckForNewAnalysis(*_): 262 def CheckForNewAnalysis(*_):
257 step.wf_master_name = 'wf_m' 263 step.wf_master_name = 'wf_m'
258 step.wf_builder_name = 'wf_b' 264 step.wf_builder_name = 'wf_b'
259 step.wf_build_number = 100 265 step.wf_build_number = 100
260 step.wf_step_name = 'wf_s' 266 step.wf_step_name = 'wf_s'
261 return 1, step 267 return 1, step
262 268
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, user_email, True, triggering_sources.FINDIT_UI))
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 'wf_m', 'wf_b', 100, 'wf_s', 'flake',
277 allow_new_analysis=True, manually_triggered=False, 283 allow_new_analysis=True, manually_triggered=False,
284 user_email=user_email, triggering_source=triggering_source,
278 queue_name=constants.WATERFALL_ANALYSIS_QUEUE) 285 queue_name=constants.WATERFALL_ANALYSIS_QUEUE)
279 mocked_GetVersion.assert_not_called() 286 mocked_GetVersion.assert_not_called()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698