From a75a8ea57fde0d3af8d7e8b7ae596f2baaf4bb4e Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Thu, 16 Oct 2014 12:46:21 -0600 Subject: [PATCH] Add new job_status module Provides methods for getting and setting job status. This is necessary because we used to just use a boolean called 'success'. In order to stop reporting infrastructure errors as failures, we need more than just a boolean. Signed-off-by: Zack Cerza --- teuthology/job_status.py | 38 +++++++++++++++++++++ teuthology/test/test_job_status.py | 54 ++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 teuthology/job_status.py create mode 100644 teuthology/test/test_job_status.py diff --git a/teuthology/job_status.py b/teuthology/job_status.py new file mode 100644 index 0000000000..05ff80d715 --- /dev/null +++ b/teuthology/job_status.py @@ -0,0 +1,38 @@ +def get_status(summary): + """ + :param summary: The job summary dict. Normally ctx.summary + :returns: A status string like 'pass', 'fail', or 'dead' + """ + status = summary.get('status') + if status is not None: + return status + + success = summary.get('success') + if success is True: + status = 'pass' + elif success is False: + status = 'fail' + else: + status = None + return status + + +def set_status(summary, status): + """ + Sets summary['status'] to status, and summary['success'] to True if status + is 'pass'. If status is not 'pass', then 'success' is False. + + If status is None, do nothing. + + :param summary: The job summary dict. Normally ctx.summary + :param status: The job status, e.g. 'pass', 'fail', 'dead' + """ + if status is None: + return + + summary['status'] = status + if status == 'pass': + summary['success'] = True + else: + summary['success'] = False + diff --git a/teuthology/test/test_job_status.py b/teuthology/test/test_job_status.py new file mode 100644 index 0000000000..c81014f90b --- /dev/null +++ b/teuthology/test/test_job_status.py @@ -0,0 +1,54 @@ +from .. import job_status + + +class TestJobStatus(object): + def test_get_only_success_true(self): + summary = dict(success=True) + status = job_status.get_status(summary) + assert status == 'pass' + + def test_get_only_success_false(self): + summary = dict(success=False) + status = job_status.get_status(summary) + assert status == 'fail' + + def test_get_status_pass(self): + summary = dict(status='pass') + status = job_status.get_status(summary) + assert status == 'pass' + + def test_get_status_fail(self): + summary = dict(status='fail') + status = job_status.get_status(summary) + assert status == 'fail' + + def test_get_status_dead(self): + summary = dict(status='dead') + status = job_status.get_status(summary) + assert status == 'dead' + + def test_get_status_none(self): + summary = dict() + status = job_status.get_status(summary) + assert status is None + + def test_set_status_pass(self): + summary = dict() + job_status.set_status(summary, 'pass') + assert summary == dict(status='pass', success=True) + + def test_set_status_dead(self): + summary = dict() + job_status.set_status(summary, 'dead') + assert summary == dict(status='dead', success=False) + + def test_set_then_get_status_dead(self): + summary = dict() + job_status.set_status(summary, 'dead') + status = job_status.get_status(summary) + assert status == 'dead' + + def test_set_status_none(self): + summary = dict() + job_status.set_status(summary, None) + assert summary == dict() -- 2.39.5