ci/lava: Add explicit fatal-error handler

Truth is relative in 2021, and Python's duck-typing means truthiness
isn't what you think it is. Use an explicit fatal-error handler to make
sure we crash out hard on failure, rather than hoping sys.exit() behaves
like you think it does, because it doesn't.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11309>
This commit is contained in:
Daniel Stone 2021-06-10 23:45:07 +01:00 committed by Marge Bot
parent 4082fe7ce2
commit 82631c7182
1 changed files with 9 additions and 10 deletions

View File

@ -39,13 +39,12 @@ from datetime import datetime
from lavacli.utils import loader
def log_msg(msg):
return "{}: {}".format(datetime.now(), msg)
def print_log(msg):
print(log_msg(msg))
print("{}: {}".format(datetime.now(), msg))
def fatal_err(msg):
print_log(msg)
sys.exit(1)
def generate_lava_yaml(args):
env = jinja2.Environment(loader = jinja2.FileSystemLoader(os.path.dirname(args.template)), trim_blocks=True, lstrip_blocks=True)
@ -101,13 +100,13 @@ def _call_proxy(fn, *args):
except xmlrpc.client.ProtocolError as err:
if n == retries:
traceback.print_exc()
sys.exit(log_msg("A protocol error occurred (Err {} {})".format(err.errcode, err.errmsg)))
fatal_err("A protocol error occurred (Err {} {})".format(err.errcode, err.errmsg))
else:
time.sleep(15)
pass
except xmlrpc.client.Fault as err:
traceback.print_exc()
sys.exit(log_msg("FATAL: Fault: {} (code: {})".format(err.faultString, err.faultCode)))
fatal_err("FATAL: Fault: {} (code: {})".format(err.faultString, err.faultCode))
def get_job_results(proxy, job_id, test_suite, test_case):
@ -128,11 +127,11 @@ def get_job_results(proxy, job_id, test_suite, test_case):
results_yaml = _call_proxy(proxy.results.get_testcase_results_yaml, job_id, test_suite, test_case)
results = yaml.load(results_yaml, Loader=loader(False))
if not results:
sys.exit(log_msg("LAVA: no result for test_suite '{}', test_case '{}'".format(test_suite, test_case)))
fatal_err("LAVA: no result for test_suite '{}', test_case '{}'".format(test_suite, test_case))
print_log("LAVA: result for test_suite '{}', test_case '{}': {}".format(test_suite, test_case, results[0]['result']))
if results[0]['result'] != 'pass':
sys.exit(log_msg("FAIL"))
fatal_err("FAIL")
return True
@ -174,7 +173,7 @@ def main(args):
if args.validate_only:
ret = validate_job(proxy, yaml_file)
if not ret:
sys.exit(log_msg("Error in LAVA job definition"))
fatal_err("Error in LAVA job definition")
print("LAVA job definition validated successfully")
return