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

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

Issue 2438673004: [Findit] Post analysis results of flakes to bug filed by chromium-try-flakes. (Closed)
Patch Set: Add a config flag to enable/disable updating monorail bug. Created 4 years, 1 month 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 common.pipeline_wrapper import pipeline_handlers 9 from common.pipeline_wrapper import pipeline_handlers
10 from model import analysis_status 10 from model import analysis_status
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 rfp = RecursiveFlakePipeline( 156 rfp = RecursiveFlakePipeline(
157 master_name, builder_name, build_number, step_name, test_name, 157 master_name, builder_name, build_number, step_name, test_name,
158 analysis.version_number, master_build_number, 158 analysis.version_number, master_build_number,
159 flakiness_algorithm_results_dict=flakiness_algorithm_results_dict) 159 flakiness_algorithm_results_dict=flakiness_algorithm_results_dict)
160 160
161 rfp.start(queue_name=queue_name) 161 rfp.start(queue_name=queue_name)
162 self.execute_queued_tasks() 162 self.execute_queued_tasks()
163 163
164 @mock.patch.object( 164 @mock.patch.object(
165 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 165 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
166 def testNextBuildPipelineForNewRecursionFirstFlake(self, _mocked_eta_func): 166 @mock.patch.object(
167 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
168 def testNextBuildPipelineForNewRecursionFirstFlake(self, *_):
167 master_name = 'm' 169 master_name = 'm'
168 builder_name = 'b' 170 builder_name = 'b'
169 master_build_number = 100 171 master_build_number = 100
170 build_number = 100 172 build_number = 100
171 step_name = 's' 173 step_name = 's'
172 test_name = 't' 174 test_name = 't'
173 test_result_future = 'trf' 175 test_result_future = 'trf'
174 flakiness_algorithm_results_dict = { 176 flakiness_algorithm_results_dict = {
175 'flakes_in_a_row': 0, 177 'flakes_in_a_row': 0,
176 'stable_in_a_row': 0, 178 'stable_in_a_row': 0,
(...skipping 25 matching lines...) Expand all
202 204
203 NextBuildNumberPipeline.run( 205 NextBuildNumberPipeline.run(
204 NextBuildNumberPipeline(), master_name, builder_name, 206 NextBuildNumberPipeline(), master_name, builder_name,
205 master_build_number, build_number, step_name, test_name, 207 master_build_number, build_number, step_name, test_name,
206 analysis.version_number, test_result_future, 208 analysis.version_number, test_result_future,
207 flakiness_algorithm_results_dict) 209 flakiness_algorithm_results_dict)
208 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1) 210 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1)
209 211
210 @mock.patch.object( 212 @mock.patch.object(
211 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 213 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
212 def testNextBuildPipelineForNewRecursionFirstStable(self, _mocked_eta_func): 214 @mock.patch.object(
215 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
216 def testNextBuildPipelineForNewRecursionFirstStable(self, *_):
213 master_name = 'm' 217 master_name = 'm'
214 builder_name = 'b' 218 builder_name = 'b'
215 master_build_number = 100 219 master_build_number = 100
216 build_number = 100 220 build_number = 100
217 step_name = 's' 221 step_name = 's'
218 test_name = 't' 222 test_name = 't'
219 test_result_future = 'trf' 223 test_result_future = 'trf'
220 flakiness_algorithm_results_dict = { 224 flakiness_algorithm_results_dict = {
221 'flakes_in_a_row': 0, 225 'flakes_in_a_row': 0,
222 'stable_in_a_row': 0, 226 'stable_in_a_row': 0,
(...skipping 23 matching lines...) Expand all
246 250
247 NextBuildNumberPipeline.run( 251 NextBuildNumberPipeline.run(
248 NextBuildNumberPipeline(), master_name, builder_name, 252 NextBuildNumberPipeline(), master_name, builder_name,
249 master_build_number, build_number, step_name, 253 master_build_number, build_number, step_name,
250 test_name, analysis.version_number, test_result_future, 254 test_name, analysis.version_number, test_result_future,
251 flakiness_algorithm_results_dict) 255 flakiness_algorithm_results_dict)
252 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1) 256 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1)
253 257
254 @mock.patch.object( 258 @mock.patch.object(
255 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 259 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
256 def testNextBuildPipelineForNewRecursionFlakeInARow(self, _mocked_eta_func): 260 @mock.patch.object(
261 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
262 def testNextBuildPipelineForNewRecursionFlakeInARow(self, *_):
257 master_name = 'm' 263 master_name = 'm'
258 builder_name = 'b' 264 builder_name = 'b'
259 master_build_number = 100 265 master_build_number = 100
260 build_number = 100 266 build_number = 100
261 step_name = 's' 267 step_name = 's'
262 test_name = 't' 268 test_name = 't'
263 test_result_future = 'trf' 269 test_result_future = 'trf'
264 flakiness_algorithm_results_dict = { 270 flakiness_algorithm_results_dict = {
265 'flakes_in_a_row': 0, 271 'flakes_in_a_row': 0,
266 'stable_in_a_row': 4, 272 'stable_in_a_row': 4,
(...skipping 24 matching lines...) Expand all
291 297
292 NextBuildNumberPipeline.run( 298 NextBuildNumberPipeline.run(
293 NextBuildNumberPipeline(), master_name, builder_name, 299 NextBuildNumberPipeline(), master_name, builder_name,
294 master_build_number, build_number, step_name, 300 master_build_number, build_number, step_name,
295 test_name, analysis.version_number, test_result_future, 301 test_name, analysis.version_number, test_result_future,
296 flakiness_algorithm_results_dict) 302 flakiness_algorithm_results_dict)
297 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True) 303 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True)
298 304
299 @mock.patch.object( 305 @mock.patch.object(
300 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 306 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
301 def testNextBuildPipelineForNewRecursionStableInARow(self, _mocked_eta_func): 307 @mock.patch.object(
308 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
309 def testNextBuildPipelineForNewRecursionStableInARow(self, *_):
302 master_name = 'm' 310 master_name = 'm'
303 builder_name = 'b' 311 builder_name = 'b'
304 master_build_number = 100 312 master_build_number = 100
305 build_number = 100 313 build_number = 100
306 step_name = 's' 314 step_name = 's'
307 test_name = 't' 315 test_name = 't'
308 test_result_future = 'trf' 316 test_result_future = 'trf'
309 flakiness_algorithm_results_dict = { 317 flakiness_algorithm_results_dict = {
310 'flakes_in_a_row': 4, 318 'flakes_in_a_row': 4,
311 'stable_in_a_row': 0, 319 'stable_in_a_row': 0,
(...skipping 24 matching lines...) Expand all
336 344
337 NextBuildNumberPipeline.run( 345 NextBuildNumberPipeline.run(
338 NextBuildNumberPipeline(), master_name, builder_name, 346 NextBuildNumberPipeline(), master_name, builder_name,
339 master_build_number, build_number, step_name, 347 master_build_number, build_number, step_name,
340 test_name, analysis.version_number, test_result_future, 348 test_name, analysis.version_number, test_result_future,
341 flakiness_algorithm_results_dict) 349 flakiness_algorithm_results_dict)
342 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True) 350 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True)
343 351
344 @mock.patch.object( 352 @mock.patch.object(
345 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 353 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
346 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber( 354 @mock.patch.object(
347 self, _mocked_eta_func): 355 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
356 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self, *_):
348 master_name = 'm' 357 master_name = 'm'
349 builder_name = 'b' 358 builder_name = 'b'
350 master_build_number = 100 359 master_build_number = 100
351 build_number = 100 360 build_number = 100
352 step_name = 's' 361 step_name = 's'
353 test_name = 't' 362 test_name = 't'
354 test_result_future = 'trf' 363 test_result_future = 'trf'
355 flakiness_algorithm_results_dict = { 364 flakiness_algorithm_results_dict = {
356 'flakes_in_a_row': 0, 365 'flakes_in_a_row': 0,
357 'stable_in_a_row': 0, 366 'stable_in_a_row': 0,
(...skipping 29 matching lines...) Expand all
387 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 396 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
388 NextBuildNumberPipeline.run( 397 NextBuildNumberPipeline.run(
389 NextBuildNumberPipeline(), master_name, builder_name, 398 NextBuildNumberPipeline(), master_name, builder_name,
390 master_build_number, build_number, step_name, test_name, 399 master_build_number, build_number, step_name, test_name,
391 analysis.version_number, test_result_future, 400 analysis.version_number, test_result_future,
392 flakiness_algorithm_results_dict) 401 flakiness_algorithm_results_dict)
393 self.assertFalse(queue_name['x']) 402 self.assertFalse(queue_name['x'])
394 403
395 @mock.patch.object( 404 @mock.patch.object(
396 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 405 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
397 def testNextBuildPipelineForFailedSwarmingTask(self, _mocked_eta_func): 406 @mock.patch.object(
407 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
408 def testNextBuildPipelineForFailedSwarmingTask(self, *_):
398 master_name = 'm' 409 master_name = 'm'
399 builder_name = 'b' 410 builder_name = 'b'
400 master_build_number = 100 411 master_build_number = 100
401 build_number = 100 412 build_number = 100
402 step_name = 's' 413 step_name = 's'
403 test_name = 't' 414 test_name = 't'
404 test_result_future = 'trf' 415 test_result_future = 'trf'
405 flakiness_algorithm_results_dict = { 416 flakiness_algorithm_results_dict = {
406 'flakes_in_a_row': 0, 417 'flakes_in_a_row': 0,
407 'stable_in_a_row': 0, 418 'stable_in_a_row': 0,
(...skipping 29 matching lines...) Expand all
437 self.mock( 448 self.mock(
438 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 449 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
439 NextBuildNumberPipeline.run( 450 NextBuildNumberPipeline.run(
440 NextBuildNumberPipeline(), master_name, builder_name, 451 NextBuildNumberPipeline(), master_name, builder_name,
441 master_build_number, build_number, step_name, test_name, 1, 452 master_build_number, build_number, step_name, test_name, 1,
442 test_result_future, flakiness_algorithm_results_dict) 453 test_result_future, flakiness_algorithm_results_dict)
443 self.assertFalse(queue_name['x']) 454 self.assertFalse(queue_name['x'])
444 455
445 @mock.patch.object( 456 @mock.patch.object(
446 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 457 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
447 def testNextBuildPipelineForNewRecursionStabledFlakedOut( 458 @mock.patch.object(
448 self, _mocked_eta_func): 459 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
460 def testNextBuildPipelineForNewRecursionStabledFlakedOut(self, *_):
449 master_name = 'm' 461 master_name = 'm'
450 builder_name = 'b' 462 builder_name = 'b'
451 master_build_number = 100 463 master_build_number = 100
452 build_number = 100 464 build_number = 100
453 step_name = 's' 465 step_name = 's'
454 test_name = 't' 466 test_name = 't'
455 test_result_future = 'trf' 467 test_result_future = 'trf'
456 queue_name = constants.DEFAULT_QUEUE 468 queue_name = constants.DEFAULT_QUEUE
457 flakiness_algorithm_results_dict = { 469 flakiness_algorithm_results_dict = {
458 'flakes_in_a_row': 4, 470 'flakes_in_a_row': 4,
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 'upper_boundary': 110, 703 'upper_boundary': 110,
692 'lower_boundary_result': 'STABLE', 704 'lower_boundary_result': 'STABLE',
693 'sequential_run_index': 1 705 'sequential_run_index': 1
694 } 706 }
695 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 707 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
696 self.assertEqual(next_run, 102) 708 self.assertEqual(next_run, 102)
697 self.assertEqual(analysis.suspected_flake_build_number, None) 709 self.assertEqual(analysis.suspected_flake_build_number, None)
698 710
699 @mock.patch.object( 711 @mock.patch.object(
700 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None) 712 recursive_flake_pipeline, '_GetETAToStartAnalysis', return_value=None)
701 def testNextBuildPipelineStabledOutFlakedOutFirstTime(self, _mocked_eta_func): 713 @mock.patch.object(
714 recursive_flake_pipeline, '_UpdateBugWithResult', return_value=None)
715 def testNextBuildPipelineStabledOutFlakedOutFirstTime(self, *_):
702 master_name = 'm' 716 master_name = 'm'
703 builder_name = 'b' 717 builder_name = 'b'
704 master_build_number = 100 718 master_build_number = 100
705 build_number = 100 719 build_number = 100
706 step_name = 's' 720 step_name = 's'
707 test_name = 't' 721 test_name = 't'
708 test_result_future = 'trf' 722 test_result_future = 'trf'
709 flakiness_algorithm_results_dict = { 723 flakiness_algorithm_results_dict = {
710 'flakes_in_a_row': 0, 724 'flakes_in_a_row': 0,
711 'stable_in_a_row': 0, 725 'stable_in_a_row': 0,
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 analysis = MasterFlakeAnalysis.GetVersion( 888 analysis = MasterFlakeAnalysis.GetVersion(
875 master_name, builder_name, master_build_number, step_name, test_name) 889 master_name, builder_name, master_build_number, step_name, test_name)
876 self.assertEqual(analysis_status.COMPLETED, analysis.status) 890 self.assertEqual(analysis_status.COMPLETED, analysis.status)
877 891
878 def testUpdateAnalysisUponCompletionFound(self): 892 def testUpdateAnalysisUponCompletionFound(self):
879 analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') 893 analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't')
880 analysis.suspected_flake_build_number = 100 894 analysis.suspected_flake_build_number = 100
881 recursive_flake_pipeline._UpdateAnalysisStatusUponCompletion( 895 recursive_flake_pipeline._UpdateAnalysisStatusUponCompletion(
882 analysis, analysis_status.COMPLETED, None) 896 analysis, analysis_status.COMPLETED, None)
883 self.assertEqual(analysis.result_status, result_status.FOUND_UNTRIAGED) 897 self.assertEqual(analysis.result_status, result_status.FOUND_UNTRIAGED)
898
899 @mock.patch(
900 'waterfall.flake.recursive_flake_pipeline.PostCommentToBugPipeline')
901 def testNotUpdateBugWithResultWithoutAttachedBug(self, mocked_pipeline):
902 master_name = 'm'
903 builder_name = 'b'
904 master_build_number = 100
905 step_name = 's'
906 test_name = 't'
907 analysis = MasterFlakeAnalysis.Create(
908 master_name, builder_name, master_build_number, step_name, test_name)
909 analysis.algorithm_parameters = {'update_monorail_bug': True}
910 self.assertFalse(
911 recursive_flake_pipeline._UpdateBugWithResult(analysis, None))
912 mocked_pipeline.assert_not_called()
913
914 @mock.patch(
915 'waterfall.flake.recursive_flake_pipeline.PostCommentToBugPipeline')
916 def testNotUpdateBugWithResultIfDisabled(self, mocked_pipeline):
917 master_name = 'm'
918 builder_name = 'b'
919 master_build_number = 100
920 step_name = 's'
921 test_name = 't'
922 analysis = MasterFlakeAnalysis.Create(
923 master_name, builder_name, master_build_number, step_name, test_name)
924 analysis.bug_id = 123
925 analysis.algorithm_parameters = {'update_monorail_bug': False}
926 self.assertFalse(
927 recursive_flake_pipeline._UpdateBugWithResult(analysis, None))
928 mocked_pipeline.assert_not_called()
929
930 @mock.patch(
931 'waterfall.flake.recursive_flake_pipeline.PostCommentToBugPipeline')
932 def testUpdateBugWithResultWithAttachedBug(self, mocked_pipeline):
933 mocked_target = mock.Mock()
934 mocked_pipeline.attach_mock(mocked_target, 'target')
935 master_name = 'm'
936 builder_name = 'b'
937 master_build_number = 100
938 step_name = 's'
939 test_name = 't'
940 algorithm_parameters = {
941 'update_monorail_bug': True,
942 }
943 analysis = MasterFlakeAnalysis.Create(
944 master_name, builder_name, master_build_number, step_name, test_name)
945 analysis.algorithm_parameters = algorithm_parameters
946 analysis.bug_id = 123
947 analysis.original_master_name = 'om'
948 analysis.original_builder_name = 'ob'
949 analysis.original_step_name = 'os'
950 self.assertTrue(
951 recursive_flake_pipeline._UpdateBugWithResult(analysis, 'queue'))
952 calls = mocked_pipeline.mock_calls
953 self.assertEqual(2, len(calls))
954
955 _, args, __ = calls[0]
956 bug_id, comment, labels = args
957 self.assertEqual(123, bug_id)
958 self.assertEqual(['AnalyzedByFindit'], labels)
959 self.assertTrue('om / ob / os' in comment)
960
961 self.assertEqual(mock.call().start(queue_name='queue'), calls[1])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698