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

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

Issue 554283003: Refactored bisect results dicts into a separate class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase AND Added tests for new classes Created 6 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
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 re 6 import re
7 import shutil 7 import shutil
8 import unittest 8 import unittest
9 9
10 import bisect_perf_regression 10 import bisect_perf_regression
11 import bisect_results
11 import source_control as source_control_module 12 import source_control as source_control_module
12 13
13 14
14 def _GetBisectPerformanceMetricsInstance(): 15 def _GetBisectPerformanceMetricsInstance():
15 """Returns an instance of the BisectPerformanceMetrics class.""" 16 """Returns an instance of the BisectPerformanceMetrics class."""
16 options_dict = { 17 options_dict = {
17 'debug_ignore_build': True, 18 'debug_ignore_build': True,
18 'debug_ignore_sync': True, 19 'debug_ignore_sync': True,
19 'debug_ignore_perf_test': True, 20 'debug_ignore_perf_test': True,
20 'command': 'fake_command', 21 'command': 'fake_command',
21 'metric': 'fake/metric', 22 'metric': 'fake/metric',
22 'good_revision': 280000, 23 'good_revision': 280000,
23 'bad_revision': 280005, 24 'bad_revision': 280005,
24 } 25 }
25 bisect_options = bisect_perf_regression.BisectOptions.FromDict(options_dict) 26 bisect_options = bisect_perf_regression.BisectOptions.FromDict(options_dict)
26 source_control = source_control_module.DetermineAndCreateSourceControl( 27 source_control = source_control_module.DetermineAndCreateSourceControl(
27 bisect_options) 28 bisect_options)
28 bisect_instance = bisect_perf_regression.BisectPerformanceMetrics( 29 bisect_instance = bisect_perf_regression.BisectPerformanceMetrics(
29 source_control, bisect_options) 30 source_control, bisect_options)
30 return bisect_instance 31 return bisect_instance
31 32
32 33
33 class BisectPerfRegressionTest(unittest.TestCase): 34 class BisectPerfRegressionTest(unittest.TestCase):
34 """Test case for other functions and classes in bisect-perf-regression.py.""" 35 """Test case for other functions and classes in bisect-perf-regression.py."""
35 36
37 def setUp(self):
38 self.cwd = os.getcwd()
39
40 def tearDown(self):
41 os.chdir(self.cwd)
42
36 def _AssertConfidence(self, score, bad_values, good_values): 43 def _AssertConfidence(self, score, bad_values, good_values):
37 """Checks whether the given sets of values have a given confidence score. 44 """Checks whether the given sets of values have a given confidence score.
38 45
39 The score represents our confidence that the two sets of values wouldn't 46 The score represents our confidence that the two sets of values wouldn't
40 be as different as they are just by chance; that is, that some real change 47 be as different as they are just by chance; that is, that some real change
41 occurred between the two sets of values. 48 occurred between the two sets of values.
42 49
43 Args: 50 Args:
44 score: Expected confidence score. 51 score: Expected confidence score.
45 bad_values: First list of numbers. 52 bad_values: First list of numbers.
46 good_values: Second list of numbers. 53 good_values: Second list of numbers.
47 """ 54 """
48 # ConfidenceScore takes a list of lists but these lists are flattened 55 # ConfidenceScore takes a list of lists but these lists are flattened
49 # inside the function. 56 # inside the function.
50 confidence = bisect_perf_regression.ConfidenceScore( 57 confidence = bisect_results.ConfidenceScore(
51 [[v] for v in bad_values], 58 [[v] for v in bad_values],
52 [[v] for v in good_values]) 59 [[v] for v in good_values])
53 self.assertEqual(score, confidence) 60 self.assertEqual(score, confidence)
54 61
55 def testConfidenceScore_ZeroConfidence(self): 62 def testConfidenceScore_ZeroConfidence(self):
56 # The good and bad sets contain the same values, so the confidence that 63 # The good and bad sets contain the same values, so the confidence that
57 # they're different should be zero. 64 # they're different should be zero.
58 self._AssertConfidence(0.0, [4, 5, 7, 6, 8, 7], [8, 7, 6, 7, 5, 4]) 65 self._AssertConfidence(0.0, [4, 5, 7, 6, 8, 7], [8, 7, 6, 7, 5, 4])
59 66
60 def testConfidenceScore_MediumConfidence(self): 67 def testConfidenceScore_MediumConfidence(self):
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 bisect_instance = _GetBisectPerformanceMetricsInstance() 289 bisect_instance = _GetBisectPerformanceMetricsInstance()
283 wk_rev = 'a94d028e0f2c77f159b3dac95eb90c3b4cf48c61' 290 wk_rev = 'a94d028e0f2c77f159b3dac95eb90c3b4cf48c61'
284 depot_path = os.path.join(bisect_perf_regression.SRC_DIR, 'third_party', 291 depot_path = os.path.join(bisect_perf_regression.SRC_DIR, 'third_party',
285 'WebKit') 292 'WebKit')
286 self.assertEqual( 293 self.assertEqual(
287 181660, 294 181660,
288 bisect_instance.source_control.GetCommitPosition(wk_rev, depot_path)) 295 bisect_instance.source_control.GetCommitPosition(wk_rev, depot_path))
289 296
290 def testUpdateDepsContent(self): 297 def testUpdateDepsContent(self):
291 bisect_instance = _GetBisectPerformanceMetricsInstance() 298 bisect_instance = _GetBisectPerformanceMetricsInstance()
292 deps_file = 'DEPS' 299 deps_file = os.path.join(bisect_perf_regression.SRC_DIR, 'DEPS')
293 # We are intentionally reading DEPS file contents instead of string literal 300 # We are intentionally reading DEPS file contents instead of string literal
294 # with few lines from DEPS because to check if the format we are expecting 301 # with few lines from DEPS because to check if the format we are expecting
295 # to search is not changed in DEPS content. 302 # to search is not changed in DEPS content.
296 # TODO (prasadv): Add a separate test to validate the DEPS contents with the 303 # TODO (prasadv): Add a separate test to validate the DEPS contents with the
297 # format that bisect script expects. 304 # format that bisect script expects.
298 deps_contents = bisect_perf_regression.ReadStringFromFile(deps_file) 305 deps_contents = bisect_perf_regression.ReadStringFromFile(deps_file)
299 deps_key = 'v8_revision' 306 deps_key = 'v8_revision'
300 depot = 'v8' 307 depot = 'v8'
301 git_revision = 'a12345789a23456789a123456789a123456789' 308 git_revision = 'a12345789a23456789a123456789a123456789'
302 updated_content = bisect_instance.UpdateDepsContents( 309 updated_content = bisect_instance.UpdateDepsContents(
303 deps_contents, depot, git_revision, deps_key) 310 deps_contents, depot, git_revision, deps_key)
304 self.assertIsNotNone(updated_content) 311 self.assertIsNotNone(updated_content)
305 ss = re.compile('["\']%s["\']: ["\']%s["\']' % (deps_key, git_revision)) 312 ss = re.compile('["\']%s["\']: ["\']%s["\']' % (deps_key, git_revision))
306 self.assertIsNotNone(re.search(ss, updated_content)) 313 self.assertIsNotNone(re.search(ss, updated_content))
307 314
308 315
316 class DepotDirectoryRegistryTest(unittest.TestCase):
317
318 def setUp(self):
319 self.old_src_dir = bisect_perf_regression.SRC_DIR
320 bisect_perf_regression.SRC_DIR = '/mock/src'
321 self.old_chdir = os.chdir
322 os.chdir = self.mockChdir
323 self.old_depot_names = bisect_perf_regression.DEPOT_NAMES
324 bisect_perf_regression.DEPOT_NAMES = ['mock_depot']
325 self.old_depot_deps_name = bisect_perf_regression.DEPOT_DEPS_NAME
326 bisect_perf_regression.DEPOT_DEPS_NAME = {'mock_depot': {'src': 'src/foo'}}
327
328 self.registry = bisect_perf_regression.DepotDirectoryRegistry()
329 self.cur_dir = None
330
331 def tearDown(self):
332 bisect_perf_regression.SRC_DIR = self.old_src_dir
333 os.chdir = self.old_chdir
334 bisect_perf_regression.DEPOT_NAMES = self.old_depot_names
335 bisect_perf_regression.DEPOT_DEPS_NAME = self.old_depot_deps_name
336
337 def mockChdir(self, new_dir):
338 self.cur_dir = new_dir
339
340 def testReturnsCorrectResultForChrome(self):
341 self.assertEqual(self.registry.GetDepotDir('chromium'), '/mock/src')
342
343 def testReturnsCorrectResultForChromeOS(self):
344 self.assertEqual(self.registry.GetDepotDir('cros'), '/mock/src/tools/cros')
345
346 def testUsesDepotSpecToInitializeRegistry(self):
347 self.assertEqual(self.registry.GetDepotDir('mock_depot'), '/mock/src/foo')
348
349 def testChangedTheDirectory(self):
350 self.registry.ChangeToDepotDir('mock_depot')
351 self.assertEqual(self.cur_dir, '/mock/src/foo')
352
353
309 if __name__ == '__main__': 354 if __name__ == '__main__':
310 unittest.main() 355 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698