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/utils_unittests.py b/frontend/health/utils_unittests.py
new file mode 100755
index 0000000..b0c1318
--- /dev/null
+++ b/frontend/health/utils_unittests.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import datetime, unittest
+
+import mox
+
+import common
+# This must come before the import of utils in order to use the in memory
+# database.
+from autotest_lib.frontend import setup_django_readonly_environment
+from autotest_lib.frontend import setup_test_environment
+from autotest_lib.frontend.health import utils
+from autotest_lib.frontend.tko import models
+from django import test
+
+FAIL_STATUS = models.Status(status_idx=4, word='FAIL')
+GOOD_STATUS = models.Status(status_idx=6, word='GOOD')
+
+
+def add_statuses():
+ """
+ Save the statuses to the in-memory database.
+
+ These normally exist in the database and the code expects them. However, the
+ normal test database setup does not do this for us.
+ """
+ FAIL_STATUS.save()
+ GOOD_STATUS.save()
+
+
+class GetLastPassTimesTests(mox.MoxTestBase, test.TestCase):
+ """Tests the get_last_pass_times function."""
+
+ def setUp(self):
+ super(GetLastPassTimesTests, self).setUp()
+ setup_test_environment.set_up()
+ add_statuses()
+
+
+ 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, the test object has 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)
+
+ early_pass = models.Test(job=job, status=GOOD_STATUS,
+ kernel=kernel, machine=machine,
+ test='test',
+ started_time=datetime.datetime(2012, 1, 1))
+ early_pass.save()
+ late_pass = models.Test(job=job, status=GOOD_STATUS,
+ kernel=kernel, machine=machine,
+ test='test',
+ started_time=datetime.datetime(2012, 1, 2))
+ late_pass.save()
+
+ results = utils.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)
+
+ passing_test = models.Test(job=job, status=GOOD_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 = utils.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)
+
+ test1 = models.Test(job=job, status=GOOD_STATUS,
+ kernel=kernel, machine=machine,
+ test='test1',
+ started_time=datetime.datetime(2012, 1, 1))
+ test1.save()
+ test2 = models.Test(job=job, status=GOOD_STATUS,
+ kernel=kernel, machine=machine,
+ test='test2',
+ started_time=datetime.datetime(2012, 1, 2))
+ test2.save()
+
+ results = utils.get_last_pass_times()
+
+ self.assertEquals(results, {'test1': datetime.datetime(2012, 1, 1),
+ 'test2': datetime.datetime(2012, 1, 2)})
+
+
+if __name__ == '__main__':
+ unittest.main()