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

Side by Side Diff: appengine/findit/waterfall/test/suspected_cl_util_test.py

Issue 2230103002: [Findit] Pipeline change to save suspected cls to data store. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@0808-resubmit-suspected_cl_model
Patch Set: rebase 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
(Empty)
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
3 # found in the LICENSE file.
4
5 import datetime
6
7 from common import time_util
8 from common.waterfall import failure_type
9 from model import analysis_approach_type
10 from model import suspected_cl_status
11 from model.base_build_model import BaseBuildModel
12 from model.wf_suspected_cl import WfSuspectedCL
13 from waterfall import suspected_cl_util
14 from waterfall.test import wf_testcase
15
16
17 class SuspectedCLUtilTest(wf_testcase.WaterfallTestCase):
18
19 def testCreateWfSuspectedCL(self):
20 approach = analysis_approach_type.HEURISTIC
21 master_name = 'm'
22 builder_name = 'b'
23 build_number = 123
24 compile_failure_type = failure_type.COMPILE
25 repo_name = 'chromium'
26 revision = 'r1'
27 commit_position = 1
28 failures = {'compile': []}
29 top_score = 5
30
31 mocked_utcnow = datetime.datetime(2016, 10, 4, 0, 0, 0)
32 self.MockUTCNow(mocked_utcnow)
33
34 self.assertIsNone(WfSuspectedCL.Get(repo_name, revision))
35
36 suspected_cl_util.UpdateSuspectedCL(
37 repo_name, revision, commit_position, approach, master_name,
38 builder_name, build_number, compile_failure_type, failures, top_score)
39
40 expected_builds = {
41 BaseBuildModel.CreateBuildId(master_name, builder_name, build_number ):{
42 'approaches': [approach],
43 'failure_type': compile_failure_type,
44 'failures': failures,
45 'status': None,
46 'top_score': top_score
47 }
48 }
49
50 suspected_cl = WfSuspectedCL.Get(repo_name, revision)
51
52 self.assertIsNotNone(suspected_cl)
53 self.assertEqual(
54 [analysis_approach_type.HEURISTIC], suspected_cl.approaches)
55 self.assertEqual([compile_failure_type], suspected_cl.failure_type)
56 self.assertEqual(expected_builds, suspected_cl.builds)
57 self.assertEqual(mocked_utcnow, suspected_cl.identified_time)
58 self.assertEqual(mocked_utcnow, suspected_cl.updated_time)
59
60 def testUpdateWfSuspectedCLAddAnotherApproach(self):
61 approach = analysis_approach_type.TRY_JOB
62 master_name = 'm'
63 builder_name = 'b'
64 build_number = 122
65 test_failure_type = failure_type.TEST
66 repo_name = 'chromium'
67 revision = 'r2'
68 commit_position = 2
69 failures = {'step_1': ['test1', 'test2']}
70 top_score = None
71
72 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
73 suspected_cl.approaches = [analysis_approach_type.HEURISTIC]
74 suspected_cl.builds = {
75 BaseBuildModel.CreateBuildId(
76 master_name, builder_name, build_number ): {
77 'approaches': [analysis_approach_type.HEURISTIC],
78 'failure_type': test_failure_type,
79 'failures': failures,
80 'status': None,
81 'top_score': 4
82 }
83 }
84 suspected_cl.failure_type = [test_failure_type]
85 suspected_cl.put()
86
87 suspected_cl_util.UpdateSuspectedCL(
88 repo_name, revision, commit_position, approach, master_name,
89 builder_name, build_number, test_failure_type, failures, top_score)
90
91 expected_builds = {
92 BaseBuildModel.CreateBuildId(
93 master_name, builder_name, build_number ): {
94 'approaches': [
95 analysis_approach_type.HEURISTIC,
96 analysis_approach_type.TRY_JOB],
97 'failure_type': test_failure_type,
98 'failures': failures,
99 'status': None,
100 'top_score': 4
101 }
102 }
103
104 expected_approaches = [
105 analysis_approach_type.HEURISTIC,
106 analysis_approach_type.TRY_JOB]
107
108 suspected_cl = WfSuspectedCL.Get(repo_name, revision)
109
110 self.assertIsNotNone(suspected_cl)
111 self.assertEqual(expected_approaches, suspected_cl.approaches)
112 self.assertEqual([test_failure_type], suspected_cl.failure_type)
113 self.assertEqual(expected_builds, suspected_cl.builds)
114
115 def testUpdateWfSuspectedCLAddSameBuild(self):
116 approach = analysis_approach_type.HEURISTIC
117 master_name = 'm'
118 builder_name = 'b'
119 build_number = 122
120 test_failure_type = failure_type.TEST
121 repo_name = 'chromium'
122 revision = 'r2'
123 commit_position = 2
124 failures = {'step_1': ['test1', 'test2']}
125 top_score = 4
126
127 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
128 suspected_cl.approaches = [analysis_approach_type.HEURISTIC]
129 suspected_cl.builds = {
130 BaseBuildModel.CreateBuildId(
131 master_name, builder_name, build_number ): {
132 'approaches': [analysis_approach_type.HEURISTIC],
133 'failure_type': test_failure_type,
134 'failures': failures,
135 'status': None,
136 'top_score': 4
137 }
138 }
139 suspected_cl.failure_type = [test_failure_type]
140 suspected_cl.put()
141
142 suspected_cl_util.UpdateSuspectedCL(
143 repo_name, revision, commit_position, approach, master_name,
144 builder_name, build_number, test_failure_type, failures, top_score)
145
146 expected_builds = {
147 BaseBuildModel.CreateBuildId(
148 master_name, builder_name, build_number ): {
149 'approaches': [analysis_approach_type.HEURISTIC],
150 'failure_type': test_failure_type,
151 'failures': failures,
152 'status': None,
153 'top_score': 4
154 }
155 }
156
157 expected_approaches = [analysis_approach_type.HEURISTIC]
158
159 suspected_cl = WfSuspectedCL.Get(repo_name, revision)
160
161 self.assertIsNotNone(suspected_cl)
162 self.assertEqual(expected_approaches, suspected_cl.approaches)
163 self.assertEqual([test_failure_type], suspected_cl.failure_type)
164 self.assertEqual(expected_builds, suspected_cl.builds)
165
166 def testUpdateWfSuspectedCLAddAnotherHeuristic(self):
167 approach = analysis_approach_type.HEURISTIC
168 master_name = 'm'
169 builder_name = 'b'
170 build_number = 122
171 test_failure_type = failure_type.TEST
172 repo_name = 'chromium'
173 revision = 'r2'
174 commit_position = 2
175 failures = {'step_1': ['test1', 'test2']}
176 top_score = 4
177
178 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
179 suspected_cl.approaches = [analysis_approach_type.HEURISTIC]
180 suspected_cl.builds = {
181 BaseBuildModel.CreateBuildId(
182 master_name, builder_name, build_number-1): {
183 'approaches': [analysis_approach_type.HEURISTIC],
184 'failure_type': test_failure_type,
185 'failures': {'step': ['test']},
186 'status': suspected_cl_status.CORRECT,
187 'top_score': 4
188 },
189 BaseBuildModel.CreateBuildId(
190 master_name, builder_name, build_number - 2): {
191 'approaches': [analysis_approach_type.HEURISTIC],
192 'failure_type': test_failure_type,
193 'failures': failures,
194 'status': suspected_cl_status.CORRECT,
195 'top_score': 4
196 }
197 }
198 suspected_cl.failure_type = [test_failure_type]
199 suspected_cl.put()
200
201 suspected_cl_util.UpdateSuspectedCL(
202 repo_name, revision, commit_position, approach, master_name,
203 builder_name, build_number, test_failure_type, failures, top_score)
204
205 expected_builds = {
206 BaseBuildModel.CreateBuildId(
207 master_name, builder_name, build_number-1): {
208 'approaches': [analysis_approach_type.HEURISTIC],
209 'failure_type': test_failure_type,
210 'failures': {'step': ['test']},
211 'status': suspected_cl_status.CORRECT,
212 'top_score': 4
213 },
214 BaseBuildModel.CreateBuildId(
215 master_name, builder_name, build_number - 2): {
216 'approaches': [analysis_approach_type.HEURISTIC],
217 'failure_type': test_failure_type,
218 'failures': failures,
219 'status': suspected_cl_status.CORRECT,
220 'top_score': 4
221 },
222 BaseBuildModel.CreateBuildId(
223 master_name, builder_name, build_number): {
224 'approaches': [analysis_approach_type.HEURISTIC],
225 'failure_type': test_failure_type,
226 'failures': failures,
227 'status': suspected_cl_status.CORRECT,
228 'top_score': 4
229 }
230 }
231
232 suspected_cl = WfSuspectedCL.Get(repo_name, revision)
233
234 self.assertIsNotNone(suspected_cl)
235 self.assertEqual(
236 [analysis_approach_type.HEURISTIC], suspected_cl.approaches)
237 self.assertEqual([test_failure_type], suspected_cl.failure_type)
238 self.assertEqual(expected_builds, suspected_cl.builds)
239
240 def testGetCLInfo(self):
241 self.assertEqual(['chromium', 'rev1'],
242 suspected_cl_util.GetCLInfo('chromium/rev1'))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698