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