mirror of
https://github.com/systemd/systemd.git
synced 2024-11-30 22:03:41 +08:00
62 lines
1.7 KiB
Python
Executable File
62 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import dataclasses
|
|
import glob
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
try:
|
|
import colorama as c
|
|
GREEN = c.Fore.GREEN
|
|
YELLOW = c.Fore.YELLOW
|
|
RED = c.Fore.RED
|
|
RESET_ALL = c.Style.RESET_ALL
|
|
BRIGHT = c.Style.BRIGHT
|
|
except ImportError:
|
|
GREEN = YELLOW = RED = RESET_ALL = BRIGHT = ''
|
|
|
|
@dataclasses.dataclass
|
|
class Total:
|
|
total:int
|
|
good:int = 0
|
|
skip:int = 0
|
|
fail:int = 0
|
|
|
|
def argument_parser():
|
|
p = argparse.ArgumentParser()
|
|
p.add_argument('-u', '--unsafe', action='store_true',
|
|
help='run "unsafe" tests too')
|
|
return p
|
|
|
|
opts = argument_parser().parse_args()
|
|
|
|
tests = glob.glob('/usr/lib/systemd/tests/test-*')
|
|
if opts.unsafe:
|
|
tests += glob.glob('/usr/lib/systemd/tests/unsafe/test-*')
|
|
|
|
total = Total(total=len(tests))
|
|
for test in tests:
|
|
name = os.path.basename(test)
|
|
|
|
ex = subprocess.run(test, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
if ex.returncode == 0:
|
|
print(f'{GREEN}PASS: {name}{RESET_ALL}')
|
|
total.good += 1
|
|
elif ex.returncode == 77:
|
|
print(f'{YELLOW}SKIP: {name}{RESET_ALL}')
|
|
total.skip += 1
|
|
else:
|
|
print(f'{RED}FAIL: {name}{RESET_ALL}')
|
|
total.fail += 1
|
|
|
|
# stdout/stderr might not be valid unicode, let's just dump it to the terminal.
|
|
# Also let's reset the style afterwards, in case our output sets something.
|
|
sys.stdout.buffer.write(ex.stdout)
|
|
print(f'{RESET_ALL}{BRIGHT}')
|
|
sys.stdout.buffer.write(ex.stderr)
|
|
print(f'{RESET_ALL}')
|
|
|
|
print(f'{BRIGHT}OK: {total.good} SKIP: {total.skip} FAIL: {total.fail}{RESET_ALL}')
|
|
sys.exit(total.fail > 0)
|