Autotest: Refactor complete_failures slightly.
Move the get_last_pass_times functions to a common area as it will be useful
for future scripts. Also tests are looked up based on status name instead
of status id.
BUG=None
DEPLOY=None
TEST=Unittests and ran script manually to verify
Change-Id: I398237d0f11bef63492e10a1206387bb2058dc40
Reviewed-on: https://gerrit.chromium.org/gerrit/62570
Reviewed-by: Dennis Jeffrey <dennisjeffrey@chromium.org>
Tested-by: Keyar Hood <keyar@chromium.org>
Commit-Queue: Keyar Hood <keyar@chromium.org>
diff --git a/frontend/health/complete_failures_unittest.py b/frontend/health/complete_failures_unittest.py
index 0d90f9c..17eb209 100755
--- a/frontend/health/complete_failures_unittest.py
+++ b/frontend/health/complete_failures_unittest.py
@@ -14,13 +14,13 @@
from autotest_lib.frontend import setup_django_readonly_environment
from autotest_lib.frontend import setup_test_environment
import complete_failures
+from autotest_lib.frontend.health import utils
from autotest_lib.client.common_lib import mail
from autotest_lib.frontend.tko import models
from django import test
GOOD_STATUS_IDX = 6
-FAIL_STATUS_IDX = 4
# See complte_failurs_functional_tests.py for why we need this.
class MockDatetime(datetime.datetime):
@@ -176,111 +176,21 @@
self.assertFalse(complete_failures.is_valid_test_name(name))
-class GetLastPassTimesTests(mox.MoxTestBase, test.TestCase):
- """Tests the get_last_pass_times function."""
+class PrepareLastPassesTests(test.TestCase):
+ """Tests the prepare_last_passes function."""
def setUp(self):
- super(GetLastPassTimesTests, self).setUp()
- setup_test_environment.set_up()
-
+ super(PrepareLastPassesTests, self).setUp()
def tearDown(self):
- setup_test_environment.tear_down()
- super(GetLastPassTimesTests, self).tearDown()
-
-
- def test_return_most_recent_pass(self):
- """The last time a test passed should be returned."""
- # To add a test entry to the database, Django the test object to
- # be instantiated with various other model instances. We give these
- # instances dummy id values.
- job = models.Job(job_idx=1)
- kernel = models.Kernel(kernel_idx=1)
- machine = models.Machine(machine_idx=1)
- success_status = models.Status(status_idx=GOOD_STATUS_IDX)
-
- early_pass = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='test',
- started_time=datetime.datetime(2012, 1, 1))
- early_pass.save()
- late_pass = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='test',
- started_time=datetime.datetime(2012, 1, 2))
- late_pass.save()
-
- results = complete_failures.get_last_pass_times()
-
- self.assertEquals(results, {'test': datetime.datetime(2012, 1, 2)})
-
-
- def test_only_return_passing_tests(self):
- """Tests that only tests that have passed at some point are returned."""
- job = models.Job(job_idx=1)
- kernel = models.Kernel(kernel_idx=1)
- machine = models.Machine(machine_idx=1)
- success_status = models.Status(status_idx=GOOD_STATUS_IDX)
- fail_status = models.Status(status_idx=FAIL_STATUS_IDX)
-
- passing_test = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='passing_test',
- started_time=datetime.datetime(2012, 1, 1))
- passing_test.save()
- failing_test = models.Test(job=job, status=fail_status,
- kernel=kernel, machine=machine,
- test='failing_test',
- started_time=datetime.datetime(2012, 1, 1))
- failing_test.save()
-
- results = complete_failures.get_last_pass_times()
-
- self.assertEquals(results,
- {'passing_test': datetime.datetime(2012, 1, 1)})
-
-
- def test_return_all_passing_tests(self):
- """This function returns all tests that passed at least once."""
- job = models.Job(job_idx=1)
- kernel = models.Kernel(kernel_idx=1)
- machine = models.Machine(machine_idx=1)
- success_status = models.Status(status_idx=GOOD_STATUS_IDX)
-
- test1 = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='test1',
- started_time=datetime.datetime(2012, 1, 1))
- test1.save()
- test2 = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='test2',
- started_time=datetime.datetime(2012, 1, 2))
- test2.save()
-
- results = complete_failures.get_last_pass_times()
-
- self.assertEquals(results, {'test1': datetime.datetime(2012, 1, 1),
- 'test2': datetime.datetime(2012, 1, 2)})
-
+ super(PrepareLastPassesTests, self).tearDown()
def test_does_not_return_invalid_test_names(self):
"""Tests that tests with invalid test names are not returned."""
- job = models.Job(job_idx=1)
- kernel = models.Kernel(kernel_idx=1)
- machine = models.Machine(machine_idx=1)
- success_status = models.Status(status_idx=GOOD_STATUS_IDX)
- fail_status = models.Status(status_idx=FAIL_STATUS_IDX)
+ results = complete_failures.prepare_last_passes(['invalid_test/name'])
- invalid_test = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='invalid_test/name',
- started_time=datetime.datetime(2012, 1, 1))
- invalid_test.save()
+ self.assertEqual(results, {})
- results = complete_failures.get_last_pass_times()
-
- self.assertTrue(not results)
class GetRecentlyRanTestNamesTests(mox.MoxTestBase, test.TestCase):
@@ -356,38 +266,16 @@
self.assertEqual(len(results), 1)
- def test_does_not_return_invalid_test_names(self):
- """Tests that only tests with invalid test names are not returned."""
- job = models.Job(job_idx=1)
- kernel = models.Kernel(kernel_idx=1)
- machine = models.Machine(machine_idx=1)
- success_status = models.Status(status_idx=GOOD_STATUS_IDX)
-
- invalid_test = models.Test(job=job, status=success_status,
- kernel=kernel, machine=machine,
- test='invalid_test/name',
- started_time=self.datetime(2012, 1, 1))
- invalid_test.save()
-
- datetime.datetime.today().AndReturn(self.datetime(2012, 1, 2))
- complete_failures._DAYS_NOT_RUNNING_CUTOFF = 60
-
- self.mox.ReplayAll()
- results = complete_failures.get_recently_ran_test_names()
-
- self.assertTrue(not results)
-
-
class GetTestsToAnalyzeTests(mox.MoxTestBase):
"""Tests the get_tests_to_analyze function."""
def test_returns_recent_test_names(self):
"""Test should return all the test names in the database."""
- self.mox.StubOutWithMock(complete_failures, 'get_last_pass_times')
+ self.mox.StubOutWithMock(utils, 'get_last_pass_times')
self.mox.StubOutWithMock(complete_failures,
'get_recently_ran_test_names')
- complete_failures.get_last_pass_times().AndReturn({'passing_test':
+ utils.get_last_pass_times().AndReturn({'passing_test':
datetime.datetime(2012, 1 ,1),
'old_passing_test': datetime.datetime(2011, 1, 1)})
complete_failures.get_recently_ran_test_names().AndReturn(
@@ -403,11 +291,11 @@
def test_returns_failing_tests_with_min_datetime(self):
"""Test that never-passed tests are paired with datetime.min."""
- self.mox.StubOutWithMock(complete_failures, 'get_last_pass_times')
+ self.mox.StubOutWithMock(utils, 'get_last_pass_times')
self.mox.StubOutWithMock(complete_failures,
'get_recently_ran_test_names')
- complete_failures.get_last_pass_times().AndReturn({})
+ utils.get_last_pass_times().AndReturn({})
complete_failures.get_recently_ran_test_names().AndReturn({'test'})
self.mox.ReplayAll()