blob: b0c13188cd184b8167abc31750acb5c5d67c8cb1 [file] [log] [blame]
Keyar Hood0f26dba2013-07-18 17:49:32 -07001#!/usr/bin/python
2#
3# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import datetime, unittest
8
9import mox
10
11import common
12# This must come before the import of utils in order to use the in memory
13# database.
14from autotest_lib.frontend import setup_django_readonly_environment
15from autotest_lib.frontend import setup_test_environment
16from autotest_lib.frontend.health import utils
17from autotest_lib.frontend.tko import models
18from django import test
19
20FAIL_STATUS = models.Status(status_idx=4, word='FAIL')
21GOOD_STATUS = models.Status(status_idx=6, word='GOOD')
22
23
24def add_statuses():
25 """
26 Save the statuses to the in-memory database.
27
28 These normally exist in the database and the code expects them. However, the
29 normal test database setup does not do this for us.
30 """
31 FAIL_STATUS.save()
32 GOOD_STATUS.save()
33
34
35class GetLastPassTimesTests(mox.MoxTestBase, test.TestCase):
36 """Tests the get_last_pass_times function."""
37
38 def setUp(self):
39 super(GetLastPassTimesTests, self).setUp()
40 setup_test_environment.set_up()
41 add_statuses()
42
43
44 def tearDown(self):
45 setup_test_environment.tear_down()
46 super(GetLastPassTimesTests, self).tearDown()
47
48
49 def test_return_most_recent_pass(self):
50 """The last time a test passed should be returned."""
51 # To add a test entry to the database, the test object has to
52 # be instantiated with various other model instances. We give these
53 # instances dummy id values.
54 job = models.Job(job_idx=1)
55 kernel = models.Kernel(kernel_idx=1)
56 machine = models.Machine(machine_idx=1)
57
58 early_pass = models.Test(job=job, status=GOOD_STATUS,
59 kernel=kernel, machine=machine,
60 test='test',
61 started_time=datetime.datetime(2012, 1, 1))
62 early_pass.save()
63 late_pass = models.Test(job=job, status=GOOD_STATUS,
64 kernel=kernel, machine=machine,
65 test='test',
66 started_time=datetime.datetime(2012, 1, 2))
67 late_pass.save()
68
69 results = utils.get_last_pass_times()
70
71 self.assertEquals(results, {'test': datetime.datetime(2012, 1, 2)})
72
73
74 def test_only_return_passing_tests(self):
75 """Tests that only tests that have passed at some point are returned."""
76 job = models.Job(job_idx=1)
77 kernel = models.Kernel(kernel_idx=1)
78 machine = models.Machine(machine_idx=1)
79
80 passing_test = models.Test(job=job, status=GOOD_STATUS,
81 kernel=kernel, machine=machine,
82 test='passing_test',
83 started_time=datetime.datetime(2012, 1, 1))
84 passing_test.save()
85 failing_test = models.Test(job=job, status=FAIL_STATUS,
86 kernel=kernel, machine=machine,
87 test='failing_test',
88 started_time=datetime.datetime(2012, 1, 1))
89 failing_test.save()
90
91 results = utils.get_last_pass_times()
92
93 self.assertEquals(results,
94 {'passing_test': datetime.datetime(2012, 1, 1)})
95
96
97 def test_return_all_passing_tests(self):
98 """This function returns all tests that passed at least once."""
99 job = models.Job(job_idx=1)
100 kernel = models.Kernel(kernel_idx=1)
101 machine = models.Machine(machine_idx=1)
102
103 test1 = models.Test(job=job, status=GOOD_STATUS,
104 kernel=kernel, machine=machine,
105 test='test1',
106 started_time=datetime.datetime(2012, 1, 1))
107 test1.save()
108 test2 = models.Test(job=job, status=GOOD_STATUS,
109 kernel=kernel, machine=machine,
110 test='test2',
111 started_time=datetime.datetime(2012, 1, 2))
112 test2.save()
113
114 results = utils.get_last_pass_times()
115
116 self.assertEquals(results, {'test1': datetime.datetime(2012, 1, 1),
117 'test2': datetime.datetime(2012, 1, 2)})
118
119
120if __name__ == '__main__':
121 unittest.main()