| 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 |