Add unit tests and fixes for increment_counts

This commit adds unit tests for the increment_counts function. In the
process of writing them several bugs in the function were fixed too.
This commit is contained in:
Matthew Treinish 2014-06-25 10:21:00 -04:00
parent 963f980ae0
commit 9dbaabf463
2 changed files with 65 additions and 5 deletions

View File

@ -69,12 +69,12 @@ def running_avg(test, values, result):
return values
def increment_counts(run, test, results, session):
def increment_counts(test, results):
test_values = {'run_count': test.run_count + 1}
status = results.get('status')
run = api.get_run_by_id(run.id, session)
if status == 'success':
test_values['success'] = test.success + 1
test_values = running_avg(test, test_values, results)
elif status == 'fail':
test_values['failure'] = test.failure + 1
elif status == 'skip':
@ -82,7 +82,6 @@ def increment_counts(run, test, results, session):
else:
msg = "Unknown test status %s" % status
raise exceptions.UnknownStatus(msg)
test_values = running_avg(test, test_values, results)
return test_values
@ -125,8 +124,7 @@ def process_results(results):
fails, run_time,
session)
else:
test_values = increment_counts(db_run, db_test, results[test],
session)
test_values = increment_counts(db_test, results[test])
# If skipped nothing to update
if test_values:
api.update_test(test_values, db_test.id, session)

View File

@ -17,6 +17,7 @@ import datetime
import mock
from subunit2sql import exceptions
from subunit2sql import shell
from subunit2sql.tests import base
@ -68,3 +69,64 @@ class TestShell(base.TestCase):
result = shell.running_avg(fake_test, fake_values, fake_result)
expected_avg = 50
self.assertEqual(expected_avg, result['run_time'])
def test_increment_counts_success(self):
fake_test = mock.MagicMock()
fake_test.run_count = 15
fake_test.success = 5
fake_test.run_time = 45.0
fake_result = {
'status': 'success',
'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0),
'end_time': datetime.datetime(1914, 6, 28, 10, 45, 50),
}
values = shell.increment_counts(fake_test, fake_result)
# Check to ensure counts incrememented properly
self.assertEqual(values['run_count'], 16)
self.assertEqual(values['success'], 6)
# Ensure run_time is updated on success
expected_avg = ((5 * 45.0) + 50) / 6
self.assertEqual(values['run_time'], expected_avg)
def test_increment_counts_failure(self):
fake_test = mock.MagicMock()
fake_test.run_count = 15
fake_test.success = 5
fake_test.failure = 10
fake_test.run_time = 45.0
fake_result = {
'status': 'fail',
'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0),
'end_time': datetime.datetime(1914, 6, 28, 10, 45, 50),
}
values = shell.increment_counts(fake_test, fake_result)
# Check to ensure counts incrememented properly
self.assertEqual(values['run_count'], 16)
self.assertEqual(values['failure'], 11)
# Avg runtime should only be updated on success
self.assertNotIn('run_time', values)
def test_increment_counts_skip(self):
fake_test = mock.MagicMock()
fake_test.run_count = 15
fake_test.success = 5
fake_test.failure = 10
fake_test.run_time = 45.0
fake_result = {
'status': 'skip',
'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0),
'end_time': datetime.datetime(1914, 6, 28, 10, 45, 2),
}
values = shell.increment_counts(fake_test, fake_result)
# No test counts incrememented with a skip
self.assertEqual(values, {})
def test_increment_counts_unknown_status(self):
fake_test = mock.MagicMock()
fake_result = {
'status': 'explody',
'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0),
'end_time': datetime.datetime(1914, 6, 28, 10, 45, 2),
}
self.assertRaises(exceptions.UnknownStatus,
shell.increment_counts, fake_test, fake_result)