123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/usr/bin/env python2
- import argparse
- import sys
- import os
- import nose2
- import multiprocessing
- from infra.basetest import BRTest
- def main():
- parser = argparse.ArgumentParser(description='Run Buildroot tests')
- parser.add_argument('testname', nargs='*',
- help='list of test cases to execute')
- parser.add_argument('-l', '--list', action='store_true',
- help='list of available test cases')
- parser.add_argument('-a', '--all', action='store_true',
- help='execute all test cases')
- parser.add_argument('-s', '--stdout', action='store_true',
- help='log everything to stdout')
- parser.add_argument('-o', '--output',
- help='output directory')
- parser.add_argument('-d', '--download',
- help='download directory')
- parser.add_argument('-k', '--keep',
- help='keep build directories',
- action='store_true')
- parser.add_argument('-t', '--testcases', type=int, default=1,
- help='number of testcases to run simultaneously')
- parser.add_argument('-j', '--jlevel', type=int,
- help='BR2_JLEVEL to use for each testcase')
- parser.add_argument('--timeout-multiplier', type=int, default=1,
- help='increase timeouts (useful for slow machines)')
- args = parser.parse_args()
- script_path = os.path.realpath(__file__)
- test_dir = os.path.dirname(script_path)
- if args.stdout:
- BRTest.logtofile = False
- if args.list:
- print "List of tests"
- nose2.discover(argv=[script_path,
- "-s", test_dir,
- "-v",
- "--collect-only"],
- plugins=["nose2.plugins.collect"])
- return 0
- if args.download is None:
- args.download = os.getenv("BR2_DL_DIR")
- if args.download is None:
- print "Missing download directory, please use -d/--download"
- print ""
- parser.print_help()
- return 1
- BRTest.downloaddir = os.path.abspath(args.download)
- if args.output is None:
- print "Missing output directory, please use -o/--output"
- print ""
- parser.print_help()
- return 1
- if not os.path.exists(args.output):
- os.mkdir(args.output)
- BRTest.outputdir = os.path.abspath(args.output)
- if args.all is False and len(args.testname) == 0:
- print "No test selected"
- print ""
- parser.print_help()
- return 1
- BRTest.keepbuilds = args.keep
- if args.testcases != 1:
- if args.testcases < 1:
- print "Invalid number of testcases to run simultaneously"
- print ""
- parser.print_help()
- return 1
- # same default BR2_JLEVEL as package/Makefile.in
- br2_jlevel = 1 + multiprocessing.cpu_count()
- each_testcase = br2_jlevel / args.testcases
- if each_testcase < 1:
- each_testcase = 1
- BRTest.jlevel = each_testcase
- if args.jlevel:
- if args.jlevel < 0:
- print "Invalid BR2_JLEVEL to use for each testcase"
- print ""
- parser.print_help()
- return 1
- # the user can override the auto calculated value
- BRTest.jlevel = args.jlevel
- if args.timeout_multiplier < 1:
- print "Invalid multiplier for timeout values"
- print ""
- parser.print_help()
- return 1
- BRTest.timeout_multiplier = args.timeout_multiplier
- nose2_args = ["-v",
- "-N", str(args.testcases),
- "-s", test_dir,
- "-c", os.path.join(test_dir, "conf/unittest.cfg")]
- if len(args.testname) != 0:
- nose2_args += args.testname
- nose2.discover(argv=nose2_args)
- if __name__ == "__main__":
- sys.exit(main())
|