blob: b0c13188cd184b8167abc31750acb5c5d67c8cb1 [file] [log] [blame]
#!/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()