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

Side by Side Diff: appengine/findit/waterfall/flake/test/initialize_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 import mock 5 import mock
6 6
7 from common import constants 7 from common import constants
8 from common.pipeline_wrapper import pipeline_handlers 8 from common.pipeline_wrapper import pipeline_handlers
9 from model import analysis_status 9 from model import analysis_status
10 from model.flake.master_flake_analysis import MasterFlakeAnalysis 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis
11 from waterfall.flake import initialize_flake_pipeline 11 from waterfall.flake import initialize_flake_pipeline
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 InitializeFlakePipelineTest(wf_testcase.WaterfallTestCase): 16 class InitializeFlakePipelineTest(wf_testcase.WaterfallTestCase):
16 17
17 def _CreateAndSaveMasterFlakeAnalysis( 18 def _CreateAndSaveMasterFlakeAnalysis(
18 self, master_name, builder_name, build_number, 19 self, master_name, builder_name, build_number,
19 step_name, test_name, status): 20 step_name, test_name, status):
20 analysis = MasterFlakeAnalysis.Create( 21 analysis = MasterFlakeAnalysis.Create(
21 master_name, builder_name, build_number, step_name, test_name) 22 master_name, builder_name, build_number, step_name, test_name)
22 analysis.status = status 23 analysis.status = status
23 analysis.Save() 24 analysis.Save()
24 25
25 def testAnalysisIsNotNeededWhenNoneExistsAndNotAllowedToSchedule(self): 26 def testAnalysisIsNotNeededWhenNoneExistsAndNotAllowedToSchedule(self):
26 master_name = 'm' 27 master_name = 'm'
27 builder_name = 'b 1' 28 builder_name = 'b 1'
28 build_number = 123 29 build_number = 123
29 step_name = 's' 30 step_name = 's'
30 test_name = 't' 31 test_name = 't'
31 32
33 test = TestInfo(
34 master_name, builder_name, build_number, step_name, test_name)
32 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis( 35 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis(
33 master_name, builder_name, build_number, step_name, test_name, None, 36 test, test, None, allow_new_analysis=False)
34 allow_new_analysis=False)
35 37
36 self.assertFalse(need_analysis) 38 self.assertFalse(need_analysis)
37 self.assertIsNone(analysis) 39 self.assertIsNone(analysis)
38 40
39 def testAnalysisIsNeededWhenNoneExistsAndAllowedToSchedule(self): 41 def testAnalysisIsNeededWhenNoneExistsAndAllowedToSchedule(self):
40 master_name = 'm' 42 master_name = 'm'
41 builder_name = 'b 1' 43 builder_name = 'b 1'
42 build_number = 123 44 build_number = 123
43 step_name = 's' 45 step_name = 's'
44 test_name = 't' 46 test_name = 't'
45 47
48 test = TestInfo(
49 master_name, builder_name, build_number, step_name, test_name)
46 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis( 50 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis(
47 master_name, builder_name, build_number, step_name, test_name, None, 51 test, test, None, allow_new_analysis=True)
48 allow_new_analysis=True)
49 52
50 self.assertTrue(need_analysis) 53 self.assertTrue(need_analysis)
51 self.assertIsNotNone(analysis) 54 self.assertIsNotNone(analysis)
52 55
53 def testAnalysisIsNeededForCrashedAnalysisWithForce(self): 56 def testAnalysisIsNeededForCrashedAnalysisWithForce(self):
54 master_name = 'm' 57 master_name = 'm'
55 builder_name = 'b 1' 58 builder_name = 'b 1'
56 build_number = 123 59 build_number = 123
57 step_name = 's' 60 step_name = 's'
58 test_name = 't' 61 test_name = 't'
59 self._CreateAndSaveMasterFlakeAnalysis( 62 self._CreateAndSaveMasterFlakeAnalysis(
60 master_name, builder_name, build_number, step_name, 63 master_name, builder_name, build_number, step_name,
61 test_name, status=analysis_status.ERROR) 64 test_name, status=analysis_status.ERROR)
62 65
66 test = TestInfo(
67 master_name, builder_name, build_number, step_name, test_name)
63 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis( 68 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis(
64 master_name, builder_name, build_number, step_name, test_name, None, 69 test, test, None, allow_new_analysis=True, force=True)
65 allow_new_analysis=True, force=True)
66 70
67 self.assertTrue(need_analysis) 71 self.assertTrue(need_analysis)
68 self.assertIsNotNone(analysis) 72 self.assertIsNotNone(analysis)
69 self.assertTrue(analysis.version_number > 1) 73 self.assertTrue(analysis.version_number > 1)
70 74
71 def testAnalysisIsNotNeededForIncompletedAnalysis(self): 75 def testAnalysisIsNotNeededForIncompletedAnalysis(self):
72 master_name = 'm' 76 master_name = 'm'
73 builder_name = 'b 1' 77 builder_name = 'b 1'
74 build_number = 123 78 build_number = 123
75 step_name = 's' 79 step_name = 's'
76 test_name = 't' 80 test_name = 't'
77 for status in [analysis_status.RUNNING, analysis_status.PENDING]: 81 for status in [analysis_status.RUNNING, analysis_status.PENDING]:
78 self._CreateAndSaveMasterFlakeAnalysis( 82 self._CreateAndSaveMasterFlakeAnalysis(
79 master_name, builder_name, build_number, 83 master_name, builder_name, build_number,
80 step_name, test_name, status=status) 84 step_name, test_name, status=status)
81 85
86 test = TestInfo(
87 master_name, builder_name, build_number, step_name, test_name)
82 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis( 88 need_analysis, analysis = initialize_flake_pipeline._NeedANewAnalysis(
83 master_name, builder_name, build_number, step_name, test_name, None, 89 test, test, None, allow_new_analysis=True, force=True)
84 allow_new_analysis=True, force=True)
85 90
86 self.assertFalse(need_analysis) 91 self.assertFalse(need_analysis)
87 self.assertIsNotNone(analysis) 92 self.assertIsNotNone(analysis)
88 93
89 @mock.patch( 94 @mock.patch(
90 'waterfall.flake.initialize_flake_pipeline.RecursiveFlakePipeline') 95 'waterfall.flake.initialize_flake_pipeline.RecursiveFlakePipeline')
91 def testStartPipelineForNewAnalysis(self, mocked_pipeline): 96 def testStartPipelineForNewAnalysis(self, mocked_pipeline):
92 master_name = 'm' 97 master_name = 'm'
93 builder_name = 'b' 98 builder_name = 'b'
94 build_number = 124 99 build_number = 124
95 step_name = 's' 100 step_name = 's'
96 test_name = 't' 101 test_name = 't'
97 102
103 test = TestInfo(
104 master_name, builder_name, build_number, step_name, test_name)
98 analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded( 105 analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded(
99 master_name, builder_name, build_number, 106 test, test, bug_id=None, allow_new_analysis=True, force=False,
100 step_name, test_name, allow_new_analysis=True, force=False,
101 queue_name=constants.DEFAULT_QUEUE) 107 queue_name=constants.DEFAULT_QUEUE)
102 108
103 self.assertIsNotNone(analysis) 109 self.assertIsNotNone(analysis)
104 mocked_pipeline.assert_has_calls( 110 mocked_pipeline.assert_has_calls(
105 [mock.call().StartOffPSTPeakHours(queue_name=constants.DEFAULT_QUEUE)]) 111 [mock.call().StartOffPSTPeakHours(queue_name=constants.DEFAULT_QUEUE)])
106 112
107 @mock.patch( 113 @mock.patch(
108 'waterfall.flake.recursive_flake_pipeline.RecursiveFlakePipeline') 114 'waterfall.flake.recursive_flake_pipeline.RecursiveFlakePipeline')
109 def testNotStartPipelineForNewAnalysis(self, mocked_pipeline): 115 def testNotStartPipelineForNewAnalysis(self, mocked_pipeline):
110 master_name = 'm' 116 master_name = 'm'
111 builder_name = 'b' 117 builder_name = 'b'
112 build_number = 124 118 build_number = 124
113 step_name = 's' 119 step_name = 's'
114 test_name = 't' 120 test_name = 't'
115 121
116 self._CreateAndSaveMasterFlakeAnalysis( 122 self._CreateAndSaveMasterFlakeAnalysis(
117 master_name, builder_name, build_number, step_name, test_name, 123 master_name, builder_name, build_number, step_name, test_name,
118 status=analysis_status.COMPLETED) 124 status=analysis_status.COMPLETED)
119 125
126 test = TestInfo(
127 master_name, builder_name, build_number, step_name, test_name)
120 analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded( 128 analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded(
121 master_name, builder_name, build_number, 129 test, test, queue_name=constants.DEFAULT_QUEUE)
122 step_name, test_name,
123 queue_name=constants.DEFAULT_QUEUE)
124 130
125 self.assertFalse(mocked_pipeline.called) 131 self.assertFalse(mocked_pipeline.called)
126 self.assertIsNotNone(analysis) 132 self.assertIsNotNone(analysis)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698