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

Side by Side Diff: tools/auto_bisect/bisect_results_test.py

Issue 850013004: Obtain confidence score based off last known good and first known bad revision results. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing feedback Created 5 years, 10 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
« no previous file with comments | « tools/auto_bisect/bisect_results.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 os 5 import os
6 import unittest 6 import unittest
7 7
8 from bisect_results import BisectResults 8 from bisect_results import BisectResults
9 import source_control 9 import source_control
10 10
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 revision_states[1].passed = 0 151 revision_states[1].passed = 0
152 revision_states[2].passed = 1 152 revision_states[2].passed = 1
153 revision_states[3].passed = 1 153 revision_states[3].passed = 1
154 revision_states[4].passed = 1 154 revision_states[4].passed = 1
155 155
156 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry, 156 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
157 self.mock_opts, self.mock_warnings) 157 self.mock_opts, self.mock_warnings)
158 self.assertEqual(revision_states[2], results.first_working_revision) 158 self.assertEqual(revision_states[2], results.first_working_revision)
159 self.assertEqual(revision_states[1], results.last_broken_revision) 159 self.assertEqual(revision_states[1], results.last_broken_revision)
160 160
161 def testCorrectlyFindsBreakingRangeNotInOrder(self):
162 revision_states = self.mock_bisect_state.mock_revision_states
163 revision_states[0].passed = 0
164 revision_states[1].passed = 1
165 revision_states[2].passed = 0
166 revision_states[3].passed = 1
167 revision_states[4].passed = 1
168
169 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
170 self.mock_opts, self.mock_warnings)
171 self.assertEqual(revision_states[1], results.first_working_revision)
172 self.assertEqual(revision_states[2], results.last_broken_revision)
173
174 def testCorrectlyFindsBreakingRangeIncompleteBisect(self):
175 revision_states = self.mock_bisect_state.mock_revision_states
176 revision_states[0].passed = 0
177 revision_states[1].passed = 0
178 revision_states[2].passed = '?'
179 revision_states[3].passed = 1
180 revision_states[4].passed = 1
181
182 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
183 self.mock_opts, self.mock_warnings)
184 self.assertEqual(revision_states[3], results.first_working_revision)
185 self.assertEqual(revision_states[1], results.last_broken_revision)
186
187 def testFindBreakingRangeAllPassed(self):
188 revision_states = self.mock_bisect_state.mock_revision_states
189 revision_states[0].passed = 1
190 revision_states[1].passed = 1
191 revision_states[2].passed = 1
192 revision_states[3].passed = 1
193 revision_states[4].passed = 1
194
195 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
196 self.mock_opts, self.mock_warnings)
197 self.assertEqual(revision_states[0], results.first_working_revision)
198 self.assertIsNone(results.last_broken_revision)
199
200 def testFindBreakingRangeNonePassed(self):
201 revision_states = self.mock_bisect_state.mock_revision_states
202 revision_states[0].passed = 0
203 revision_states[1].passed = 0
204 revision_states[2].passed = 0
205 revision_states[3].passed = 0
206 revision_states[4].passed = 0
207
208 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
209 self.mock_opts, self.mock_warnings)
210 self.assertIsNone(results.first_working_revision)
211 self.assertEqual(revision_states[4], results.last_broken_revision)
212
161 def testCorrectlyComputesRegressionStatistics(self): 213 def testCorrectlyComputesRegressionStatistics(self):
162 revision_states = self.mock_bisect_state.mock_revision_states 214 revision_states = self.mock_bisect_state.mock_revision_states
163 revision_states[0].passed = 0 215 revision_states[0].passed = 0
164 revision_states[0].value = {'values': [1000, 999, 998]} 216 revision_states[0].value = {'values': [1000, 999, 998]}
165 revision_states[1].passed = 0 217 revision_states[1].passed = 0
166 revision_states[1].value = {'values': [980, 1000, 999]} 218 revision_states[1].value = {'values': [980, 1000, 999]}
167 revision_states[2].passed = 1 219 revision_states[2].passed = 1
168 revision_states[2].value = {'values': [50, 45, 55]} 220 revision_states[2].value = {'values': [50, 45, 55]}
169 revision_states[3].passed = 1 221 revision_states[3].passed = 1
170 revision_states[3].value = {'values': [45, 56, 45]} 222 revision_states[3].value = {'values': [45, 56, 45]}
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 self.assertEqual(1, len(results.warnings)) 272 self.assertEqual(1, len(results.warnings))
221 273
222 def testWarningForTooLowRetryLimit(self): 274 def testWarningForTooLowRetryLimit(self):
223 self.mock_opts.repeat_test_count = 1 275 self.mock_opts.repeat_test_count = 1
224 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry, 276 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
225 self.mock_opts, self.mock_warnings) 277 self.mock_opts, self.mock_warnings)
226 self.assertEqual(1, len(results.warnings)) 278 self.assertEqual(1, len(results.warnings))
227 279
228 def testWarningForTooLowConfidence(self): 280 def testWarningForTooLowConfidence(self):
229 revision_states = self.mock_bisect_state.mock_revision_states 281 revision_states = self.mock_bisect_state.mock_revision_states
230 revision_states[2].value = {'values': [95, 100, 90]} 282 revision_states[2].value = {'values': [95, 90, 90]}
231 revision_states[3].value = {'values': [95, 100, 90]} 283 revision_states[3].value = {'values': [95, 90, 90]}
232 revision_states[4].value = {'values': [95, 100, 90]} 284 revision_states[4].value = {'values': [95, 90, 90]}
233 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry, 285 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
234 self.mock_opts, self.mock_warnings) 286 self.mock_opts, self.mock_warnings)
235 self.assertGreater(results.confidence, 0) 287 self.assertGreater(results.confidence, 0)
236 self.assertEqual(1, len(results.warnings)) 288 self.assertEqual(1, len(results.warnings))
237 289
238 def testWarningForZeroConfidence(self): 290 def testWarningForZeroConfidence(self):
239 revision_states = self.mock_bisect_state.mock_revision_states 291 revision_states = self.mock_bisect_state.mock_revision_states
240 revision_states[2].value = {'values': [100, 105, 95]} 292 revision_states[2].value = {'values': [100, 105, 95]}
241 revision_states[3].value = {'values': [100, 105, 95]} 293 revision_states[3].value = {'values': [100, 105, 95]}
242 revision_states[4].value = {'values': [100, 105, 95]} 294 revision_states[4].value = {'values': [100, 105, 95]}
243 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry, 295 results = BisectResults(self.mock_bisect_state, self.mock_depot_registry,
244 self.mock_opts, self.mock_warnings) 296 self.mock_opts, self.mock_warnings)
245 self.assertEqual(0, results.confidence) 297 self.assertEqual(0, results.confidence)
246 self.assertEqual(1, len(results.warnings)) 298 self.assertEqual(1, len(results.warnings))
247 299
248 300
249 if __name__ == '__main__': 301 if __name__ == '__main__':
250 unittest.main() 302 unittest.main()
OLDNEW
« no previous file with comments | « tools/auto_bisect/bisect_results.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698