2 Star 0 Fork 0

chromium_develop/chromium_tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
bisect_test.py 2.76 KB
一键复制 编辑 原始数据 按行查看 历史
李想 提交于 3年前 . chromium origin init
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
import subprocess
bisect_builds = __import__('bisect-builds')
class FakeProcess:
called_num_times = 0
def __init__(self, returncode):
self.returncode = returncode
FakeProcess.called_num_times += 1
def communicate(self):
return ('', '')
class BisectTest(unittest.TestCase):
patched = []
max_rev = 10000
fake_process_return_code = 0
def monkey_patch(self, obj, name, new):
self.patched.append((obj, name, getattr(obj, name)))
setattr(obj, name, new)
def clear_patching(self):
for obj, name, old in self.patched:
setattr(obj, name, old)
self.patched = []
def setUp(self):
FakeProcess.called_num_times = 0
self.fake_process_return_code = 0
self.monkey_patch(bisect_builds.DownloadJob, 'Start', lambda *args: None)
self.monkey_patch(bisect_builds.DownloadJob, 'Stop', lambda *args: None)
self.monkey_patch(bisect_builds.DownloadJob, 'WaitFor', lambda *args: None)
self.monkey_patch(bisect_builds, 'UnzipFilenameToDir', lambda *args: None)
self.monkey_patch(
subprocess, 'Popen',
lambda *args, **kwargs: FakeProcess(self.fake_process_return_code))
self.monkey_patch(bisect_builds.PathContext, 'ParseDirectoryIndex',
lambda *args: range(self.max_rev))
def tearDown(self):
self.clear_patching()
def bisect(self, good_rev, bad_rev, evaluate, num_runs=1):
base_url = bisect_builds.CHROMIUM_BASE_URL
archive = 'linux'
asan = False
use_local_cache = False
context = bisect_builds.PathContext(base_url, archive, good_rev, bad_rev,
asan, use_local_cache)
(minrev, maxrev, _) = bisect_builds.Bisect(
context=context,
evaluate=evaluate,
num_runs=num_runs,
profile=None,
try_args=[])
return (minrev, maxrev)
def testBisectConsistentAnswer(self):
self.assertEqual(self.bisect(1000, 100, lambda *args: 'g'), (100, 101))
self.assertEqual(self.bisect(100, 1000, lambda *args: 'b'), (100, 101))
self.assertEqual(self.bisect(2000, 200, lambda *args: 'b'), (1999, 2000))
self.assertEqual(self.bisect(200, 2000, lambda *args: 'g'), (1999, 2000))
def testBisectMultipleRunsEarlyReturn(self):
self.fake_process_return_code = 1
self.assertEqual(self.bisect(1, 3, lambda *args: 'b', num_runs=10), (1, 2))
self.assertEqual(FakeProcess.called_num_times, 1)
def testBisectAllRunsWhenAllSucceed(self):
self.assertEqual(self.bisect(1, 3, lambda *args: 'b', num_runs=10), (1, 2))
self.assertEqual(FakeProcess.called_num_times, 10)
if __name__ == '__main__':
unittest.main()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chromium_develop/chromium_tools.git
git@gitee.com:chromium_develop/chromium_tools.git
chromium_develop
chromium_tools
chromium_tools
master

搜索帮助