mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
94 lines
2.6 KiB
Python
Executable file
94 lines
2.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import print_function
|
|
from subprocess import call
|
|
import argparse
|
|
import glob
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
|
|
def find_tests():
|
|
tests = []
|
|
|
|
for test in glob.glob("*.t") + glob.glob("*.t.exe"):
|
|
if os.access(test, os.X_OK):
|
|
# Executables only
|
|
tests.append(test)
|
|
else:
|
|
log.debug("Ignored test %s as it is not executable", test)
|
|
|
|
log.info("Tests found: %s", len(tests))
|
|
|
|
return tests
|
|
|
|
|
|
def run_test(test):
|
|
log.warn("Running test %s %s times", test, cmd_args.repeat)
|
|
|
|
if not test.startswith(".{0}".format(os.path.sep)):
|
|
test = ".{0}{1}".format(os.path.sep, test)
|
|
|
|
for i in range(cmd_args.repeat):
|
|
exit = call([test], stdout=sys.stdout, stderr=sys.stderr)
|
|
|
|
if exit != 0:
|
|
log.error("Failed to run test %s on repetition %s", test, i)
|
|
break
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description="Run Taskwarrior tests repeatedly")
|
|
parser.add_argument('--logging', '-l', action="count", default=0,
|
|
help="Logging level. -lll is the highest level")
|
|
parser.add_argument('--repeat', metavar="N", type=int, default=100,
|
|
help="How many times to run each test (default: 100)")
|
|
parser.add_argument('--noprompt', action="store_true",
|
|
help="Do not prompt when running all tests")
|
|
parser.add_argument('test', nargs="*",
|
|
help="Test files to run repeatedly. Unspecified = all tests")
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
if cmd_args.test:
|
|
for test in cmd_args.test:
|
|
run_test(test)
|
|
else:
|
|
if not cmd_args.noprompt:
|
|
r = raw_input("No test was specified, are you sure you want to run all tests? (y/N)\n")
|
|
if not (r and r[0] in ["y", "Y"]):
|
|
return
|
|
|
|
log.info("Stress testing all tests")
|
|
for test in find_tests():
|
|
run_test(test)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cmd_args = parse_args()
|
|
|
|
if cmd_args.logging == 1:
|
|
level = logging.WARN
|
|
elif cmd_args.logging == 2:
|
|
level = logging.INFO
|
|
elif cmd_args.logging >= 3:
|
|
level = logging.DEBUG
|
|
else:
|
|
level = logging.ERROR
|
|
|
|
logging.basicConfig(
|
|
format="%(asctime)s - %(levelname)s - %(message)s",
|
|
level=level,
|
|
)
|
|
log = logging.getLogger(__name__)
|
|
|
|
log.debug("Parsed commandline arguments: %s", cmd_args)
|
|
|
|
try:
|
|
main()
|
|
except Exception as e:
|
|
log.exception(e)
|
|
sys.exit(1)
|