+ failed_parent_end.close()
+ return result, failed
+
+
+if __name__ == '__main__':
+
+ try:
+ verbose = int(os.getenv("V", 0))
+ except:
+ verbose = 0
+
+ default_test_timeout = 600 # 10 minutes
+ try:
+ test_timeout = int(os.getenv("TIMEOUT", default_test_timeout))
+ except:
+ test_timeout = default_test_timeout
+
+ try:
+ debug = os.getenv("DEBUG")
+ except:
+ debug = None
+
+ parser = argparse.ArgumentParser(description="VPP unit tests")
+ parser.add_argument("-f", "--failfast", action='count',
+ help="fast failure flag")
+ parser.add_argument("-d", "--dir", action='append', type=str,
+ help="directory containing test files "
+ "(may be specified multiple times)")
+ args = parser.parse_args()
+ failfast = True if args.failfast == 1 else False
+
+ suite = unittest.TestSuite()
+ cb = add_to_suite_callback(suite)
+ for d in args.dir:
+ print("Adding tests from directory tree %s" % d)
+ discover_tests(d, cb)
+
+ try:
+ retries = int(os.getenv("RETRIES"))
+ except:
+ retries = 0
+ if retries is None:
+ retries = 0
+ attempts = retries + 1
+ if attempts > 1:
+ print("Perform %s attempts to pass the suite..." % attempts)
+ if debug is None or debug.lower() not in ["gdb", "gdbserver"]:
+ while True:
+ result, failed = run_forked(suite)
+ attempts = attempts - 1
+ print("%s test(s) failed, %s attempt(s) left" %
+ (len(failed), attempts))
+ if len(failed) > 0 and attempts > 0:
+ suite = suite_from_failed(suite, failed)
+ continue
+ sys.exit(result)
+
+ # don't fork if debugging..
+ sys.exit(not VppTestRunner(verbosity=verbose,
+ failfast=failfast).run(suite).wasSuccessful())