AUTOTEST: Check recently ran tests for health.
complete_failures.py will now only check tests that have been ran recently.
BUG=chromium:253599
DEPLOY=none
TEST=Unittests plus ran script and manually verified.
Change-Id: I475a16fd1f4d4fb2330eb94884eea4b3285ef965
Reviewed-on: https://gerrit.chromium.org/gerrit/60113
Reviewed-by: Dennis Jeffrey <dennisjeffrey@chromium.org>
Commit-Queue: Keyar Hood <keyar@chromium.org>
Tested-by: Keyar Hood <keyar@chromium.org>
diff --git a/frontend/health/complete_failures_unittest.py b/frontend/health/complete_failures_unittest.py
index a08344c..bce06e7 100755
--- a/frontend/health/complete_failures_unittest.py
+++ b/frontend/health/complete_failures_unittest.py
@@ -22,6 +22,12 @@
GOOD_STATUS_IDX = 6
FAIL_STATUS_IDX = 4
+# See complte_failurs_functional_tests.py for why we need this.
+class MockDatetime(datetime.datetime):
+ """Used to mock out parts of datetime.datetime."""
+ pass
+
+
class EmailAboutTestFailureTests(mox.MoxTestBase):
"""
Test the core logic of the comlete_failures.py script.
@@ -38,11 +44,11 @@
# emails will be sent out during tests.
self.mox.StubOutWithMock(mail, 'send')
- self._orignal_too_late = complete_failures._DAYS_TO_BE_FAILING_TOO_LONG
+ self._orig_too_long = complete_failures._DAYS_TO_BE_FAILING_TOO_LONG
def tearDown(self):
- complete_failures._DAYS_TO_BE_FAILING_TOO_LONG = self._orignal_too_late
+ complete_failures._DAYS_TO_BE_FAILING_TOO_LONG = self._orig_too_long
super(EmailAboutTestFailureTests, self).tearDown()
@@ -272,40 +278,50 @@
self.assertTrue(not results)
-class GetAllTestNamesTests(mox.MoxTestBase, test.TestCase):
- """Tests the get_all_test_names function."""
+class GetRecentlyRanTestNamesTests(mox.MoxTestBase, test.TestCase):
+ """Tests the get_recently_ran_test_names function."""
def setUp(self):
- super(GetAllTestNamesTests, self).setUp()
+ super(GetRecentlyRanTestNamesTests, self).setUp()
+ self.mox.StubOutWithMock(MockDatetime, 'today')
+ self.datetime = datetime.datetime
+ datetime.datetime = MockDatetime
setup_test_environment.set_up()
+ self._orig_cutoff = complete_failures._DAYS_NOT_RUNNING_CUTOFF
def tearDown(self):
+ datetime.datetime = self.datetime
+ complete_failures._DAYS_NOT_RUNNING_CUTOFF = self._orig_cutoff
setup_test_environment.tear_down()
- super(GetAllTestNamesTests, self).tearDown()
+ super(GetRecentlyRanTestNamesTests, self).tearDown()
- def test_return_all_tests(self):
+ def test_return_all_recently_ran_tests(self):
"""Test that the function does as it says it does."""
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()
+ recent = models.Test(job=job, status=success_status,
+ kernel=kernel, machine=machine,
+ test='recent',
+ started_time=self.datetime(2012, 1, 1))
+ recent.save()
+ old = models.Test(job=job, status=success_status,
+ kernel=kernel, machine=machine,
+ test='old',
+ started_time=self.datetime(2011, 1, 2))
+ old.save()
- results = complete_failures.get_all_test_names()
+ datetime.datetime.today().AndReturn(self.datetime(2012, 1, 4))
+ complete_failures._DAYS_NOT_RUNNING_CUTOFF = 60
- self.assertEqual(set(results), set(['test1', 'test2']))
+ self.mox.ReplayAll()
+ results = complete_failures.get_recently_ran_test_names()
+
+ self.assertEqual(set(results), set(['recent']))
def test_returns_no_duplicate_names(self):
@@ -318,15 +334,19 @@
test = models.Test(job=job, status=success_status,
kernel=kernel, machine=machine,
test='test',
- started_time=datetime.datetime(2012, 1, 1))
+ started_time=self.datetime(2012, 1, 1))
test.save()
duplicate = models.Test(job=job, status=success_status,
kernel=kernel, machine=machine,
test='test',
- started_time=datetime.datetime(2012, 1, 2))
+ started_time=self.datetime(2012, 1, 2))
duplicate.save()
- results = complete_failures.get_all_test_names()
+ datetime.datetime.today().AndReturn(self.datetime(2012, 1, 3))
+ complete_failures._DAYS_NOT_RUNNING_CUTOFF = 60
+
+ self.mox.ReplayAll()
+ results = complete_failures.get_recently_ran_test_names()
self.assertEqual(len(results), 1)
@@ -341,10 +361,14 @@
invalid_test = models.Test(job=job, status=success_status,
kernel=kernel, machine=machine,
test='invalid_test/name',
- started_time=datetime.datetime(2012, 1, 1))
+ started_time=self.datetime(2012, 1, 1))
invalid_test.save()
- results = complete_failures.get_all_test_names()
+ 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)
@@ -352,29 +376,34 @@
class GetTestsToAnalyzeTests(mox.MoxTestBase):
"""Tests the get_tests_to_analyze function."""
- def test_returns_all_test_names(self):
+ 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(complete_failures, 'get_all_test_names')
+ self.mox.StubOutWithMock(complete_failures,
+ 'get_recently_ran_test_names')
complete_failures.get_last_pass_times().AndReturn({'passing_test':
- datetime.datetime(2012, 1 ,1)})
- complete_failures.get_all_test_names().AndReturn(['passing_test',
- 'failing_test'])
+ datetime.datetime(2012, 1 ,1),
+ 'old_passing_test': datetime.datetime(2011, 1, 1)})
+ complete_failures.get_recently_ran_test_names().AndReturn(
+ {'passing_test',
+ 'failing_test'})
self.mox.ReplayAll()
results = complete_failures.get_tests_to_analyze()
- self.assertEqual(set(results.keys()),
- set(['passing_test', 'failing_test']))
+ self.assertEqual(results,
+ {'passing_test': datetime.datetime(2012, 1, 1),
+ 'failing_test': datetime.datetime.min})
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(complete_failures, 'get_all_test_names')
+ self.mox.StubOutWithMock(complete_failures,
+ 'get_recently_ran_test_names')
complete_failures.get_last_pass_times().AndReturn({})
- complete_failures.get_all_test_names().AndReturn(['test'])
+ complete_failures.get_recently_ran_test_names().AndReturn({'test'})
self.mox.ReplayAll()
results = complete_failures.get_tests_to_analyze()