From ae1c4485caeb3d2736bb4b727c45ae96196786d4 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Mon, 24 Dec 2018 16:05:53 -0500 Subject: [PATCH] Fix inconsistent treatment of test status This commit is the follow on to change Ib84eb5e4b2da4847e86ff24c8bc5ba19a0df5b37 which fixed an unhandled condition when xfail or uxsuccess was in the passed in results stream. While that fixed the failure condition it neglected to update how we treat those test result statuses in all other cases. This commit does that by making sure we treat xfail and uxsuccess as success and failure respectively for aggregate counts. Change-Id: I1d2308d2c68f4f6b432ab733ead19a0167ba0b94 Story: 2000701 Task: 3176 --- subunit2sql/shell.py | 10 ++++++---- subunit2sql/tests/test_shell.py | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/subunit2sql/shell.py b/subunit2sql/shell.py index 9d8b87a..9e53ac4 100644 --- a/subunit2sql/shell.py +++ b/subunit2sql/shell.py @@ -120,8 +120,10 @@ def increment_counts(test, results): def get_run_totals(results): - success = len([x for x in results if results[x]['status'] == 'success']) - fails = len([x for x in results if results[x]['status'] == 'fail']) + success = len( + [x for x in results if results[x]['status'] in ['success', 'xfail']]) + fails = len( + [x for x in results if results[x]['status'] in ['fail', 'uxsuccess']]) skips = len([x for x in results if results[x]['status'] == 'skip']) totals = { 'success': success, @@ -184,10 +186,10 @@ def process_results(results, run_at=None, artifacts=None, run_id=None, for test in results: db_test = api.get_test_by_test_id(test, session) if not db_test: - if results[test]['status'] == 'success': + if results[test]['status'] in ['success', 'xfail']: success = 1 fails = 0 - elif results[test]['status'] == 'fail': + elif results[test]['status'] in ['fail', 'uxsuccess']: fails = 1 success = 0 else: diff --git a/subunit2sql/tests/test_shell.py b/subunit2sql/tests/test_shell.py index a844825..a5687d2 100644 --- a/subunit2sql/tests/test_shell.py +++ b/subunit2sql/tests/test_shell.py @@ -49,6 +49,33 @@ class TestShell(base.TestCase): self.assertEqual(totals['fails'], 16) self.assertEqual(totals['skips'], 50) + def test_run_totals_with_xfail_and_uxsuccess(self): + fake_results = {} + # Fake Success + for num in range(100): + test_name = 'fake_test_' + str(num) + fake_results[test_name] = {'status': 'success'} + # Fake skips + for num in range(50): + test_name = 'fake_test_skip_' + str(num) + fake_results[test_name] = {'status': 'skip'} + # Fake fails + for num in range(16): + test_name = 'fake_test_fail_' + str(num) + fake_results[test_name] = {'status': 'fail'} + # Fake xfail + for num in range(50): + test_name = 'fake_test_xfail_' + str(num) + fake_results[test_name] = {'status': 'xfail'} + # Fake uxsuccess + for num in range(16): + test_name = 'fake_test_unxsuccess_' + str(num) + fake_results[test_name] = {'status': 'uxsuccess'} + totals = shell.get_run_totals(fake_results) + self.assertEqual(totals['success'], 150) + self.assertEqual(totals['fails'], 32) + self.assertEqual(totals['skips'], 50) + def test_running_avg(self): fake_test = mock.MagicMock() fake_test.success = 150