binary_search_tool_tester.py revision d7444b7a6d96440d0229d898401a59f141576381
1#!/usr/bin/python2
2
3# Copyright 2012 Google Inc. All Rights Reserved.
4"""Tests for bisecting tool."""
5
6__author__ = 'shenhan@google.com (Han Shen)'
7
8import os
9import random
10import sys
11import unittest
12
13from utils import command_executer
14from binary_search_tool import binary_search_state
15
16import common
17import gen_obj
18
19
20class BisectingUtilsTest(unittest.TestCase):
21
22  def setUp(self):
23    """Generate [100-1000] object files, and 1-5% of which are bad ones."""
24    obj_num = random.randint(100, 1000)
25    bad_obj_num = random.randint(obj_num / 100, obj_num / 20)
26    if bad_obj_num == 0:
27      bad_obj_num = 1
28    gen_obj.Main(['--obj_num', str(obj_num), '--bad_obj_num', str(bad_obj_num)])
29
30  def tearDown(self):
31    """Cleanup temp files."""
32    os.remove(common.OBJECTS_FILE)
33    os.remove(common.WORKING_SET_FILE)
34    print 'Deleted "{0}" and "{1}"'.format(common.OBJECTS_FILE,
35                                           common.WORKING_SET_FILE)
36
37  def runTest(self):
38    args = ['--get_initial_items', './gen_init_list.py', '--switch_to_good',
39            './switch_to_good.py', '--switch_to_bad', './switch_to_bad.py',
40            '--test_script', './is_good.py', '--prune', '--file_args']
41    binary_search_state.Main(args)
42
43    _, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
44        'tail -n 10 logs/binary_search_state.py.out')
45    ls = out.splitlines()
46    for l in ls:
47      t = l.find('Bad items are: ')
48      if t > 0:
49        bad_ones = l[(t + len('Bad items are: ')):].split()
50        objects_file = common.ReadObjectsFile()
51        for b in bad_ones:
52          self.assertEqual(objects_file[int(b)], 1)
53
54
55def Main(argv):
56  num_tests = 2
57  if len(argv) > 1:
58    num_tests = int(argv[1])
59
60  suite = unittest.TestSuite()
61  for _ in range(0, num_tests):
62    suite.addTest(BisectingUtilsTest())
63  runner = unittest.TextTestRunner()
64  runner.run(suite)
65
66
67if __name__ == '__main__':
68  Main(sys.argv)
69