OLD | NEW |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |