]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Add new job_status module
authorZack Cerza <zack.cerza@inktank.com>
Thu, 16 Oct 2014 18:46:21 +0000 (12:46 -0600)
committerZack Cerza <zack.cerza@inktank.com>
Thu, 16 Oct 2014 19:51:44 +0000 (13:51 -0600)
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 <zack.cerza@inktank.com>
teuthology/job_status.py [new file with mode: 0644]
teuthology/test/test_job_status.py [new file with mode: 0644]

diff --git a/teuthology/job_status.py b/teuthology/job_status.py
new file mode 100644 (file)
index 0000000..05ff80d
--- /dev/null
@@ -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 (file)
index 0000000..c81014f
--- /dev/null
@@ -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()