134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee#!/usr/bin/env python2 234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjeeimport argparse 334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjeeimport sys 434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjeedef main(): 634e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee desc = 'Crash simulator script, useful for testing the bisection tool.\ 734e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee bisection-tool.py --cmd "./pydir/bisection-test.py -c 2x3" \ 834e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee --end 1000 --timeout 60' 934e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee argparser = argparse.ArgumentParser(description=desc) 1034e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee argparser.add_argument('--include', '-i', default=[], dest='include', 1134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee action='append', 1234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee help='Include list, single values or ranges') 1334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee argparser.add_argument('--exclude', '-e', default=[], dest='exclude', 1434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee action='append', 1534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee help='Exclude list, single values or ranges') 1634e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee argparser.add_argument('--crash', '-c', default=[], dest='crash', 1734e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee action='append', 1834e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee help='Crash list, single values or x-separated combinations like 2x4') 1934e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 2034e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee args = argparser.parse_args() 2134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 2234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee included = {-1} 2334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for string in args.include: 2434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee include_range = string.split(':') 2534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee if len(include_range) == 1: 2634e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee included.add(int(include_range[0])) 2734e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee else: 2834e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for num in range(int(include_range[0]), int(include_range[1])): 2934e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee included.add(num) 3034e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 3134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for string in args.exclude: 3234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee exclude_range = string.split(':') 3334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee if len(exclude_range) == 1: 3434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee try: 3534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee included.remove(int(exclude_range[0])) 3634e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee except KeyError: 3734e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee pass # Exclude works without a matching include 3834e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee else: 3934e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for num in range(int(exclude_range[0]), int(exclude_range[1])): 4034e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee included.remove(num) 4134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 4234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for string in args.crash: 4334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee crash_combination = string.split('x') 4434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee fail = True 4534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee for crash in crash_combination: 4634e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee if not int(crash) in included: 4734e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee fail = False 4834e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee if fail: 4934e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee print 'Fail' 5034e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee exit(1) 5134e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee print 'Success' 5234e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee exit(0) 5334e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee 5434e88480eda520540d253fe1662e18d63551c033Manasij Mukherjeeif __name__ == '__main__': 5534e88480eda520540d253fe1662e18d63551c033Manasij Mukherjee main() 56