xref: /aosp_15_r20/external/autotest/site_utils/count_jobs_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li
3*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved.
4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
5*9c5db199SXin Li# found in the LICENSE file.
6*9c5db199SXin Li
7*9c5db199SXin Lifrom __future__ import absolute_import
8*9c5db199SXin Lifrom __future__ import division
9*9c5db199SXin Lifrom __future__ import print_function
10*9c5db199SXin Li
11*9c5db199SXin Lifrom datetime import timedelta, datetime
12*9c5db199SXin Liimport unittest
13*9c5db199SXin Lifrom unittest import mock
14*9c5db199SXin Li
15*9c5db199SXin Liimport common
16*9c5db199SXin Lifrom autotest_lib.frontend import setup_django_readonly_environment
17*9c5db199SXin Lifrom autotest_lib.frontend import setup_test_environment
18*9c5db199SXin Lifrom autotest_lib.frontend.afe import models
19*9c5db199SXin Lifrom autotest_lib.site_utils import count_jobs
20*9c5db199SXin Lifrom six.moves import range
21*9c5db199SXin Li
22*9c5db199SXin Li
23*9c5db199SXin Liclass TestCountJobs(unittest.TestCase):
24*9c5db199SXin Li    """Tests the count_jobs script's functionality.
25*9c5db199SXin Li    """
26*9c5db199SXin Li
27*9c5db199SXin Li    def setUp(self):
28*9c5db199SXin Li        super(TestCountJobs, self).setUp()
29*9c5db199SXin Li        setup_test_environment.set_up()
30*9c5db199SXin Li
31*9c5db199SXin Li
32*9c5db199SXin Li    def tearDown(self):
33*9c5db199SXin Li        super(TestCountJobs, self).tearDown()
34*9c5db199SXin Li        setup_test_environment.tear_down()
35*9c5db199SXin Li
36*9c5db199SXin Li
37*9c5db199SXin Li    def test_no_jobs(self):
38*9c5db199SXin Li        """Initially, there should be no jobs."""
39*9c5db199SXin Li        self.assertEqual(
40*9c5db199SXin Li            0,
41*9c5db199SXin Li            count_jobs.number_of_jobs_since(timedelta(days=999)))
42*9c5db199SXin Li
43*9c5db199SXin Li
44*9c5db199SXin Li    def test_count_jobs(self):
45*9c5db199SXin Li        """When n jobs are inserted, n jobs should be counted within a day range.
46*9c5db199SXin Li
47*9c5db199SXin Li        Furthermore, 0 jobs should be counted within 0 or (-1) days.
48*9c5db199SXin Li        """
49*9c5db199SXin Li        some_day = datetime.fromtimestamp(1450211914)  # a time grabbed from time.time()
50*9c5db199SXin Li        class FakeDatetime(datetime):
51*9c5db199SXin Li            """Always returns the same 'now' value"""
52*9c5db199SXin Li            @classmethod
53*9c5db199SXin Li            def now(self):
54*9c5db199SXin Li                """Return a fake 'now', rather than rely on the system's clock."""
55*9c5db199SXin Li                return some_day
56*9c5db199SXin Li        with mock.patch.object(count_jobs, 'datetime', FakeDatetime):
57*9c5db199SXin Li            for i in range(1, 24):
58*9c5db199SXin Li                 models.Job(created_on=some_day - timedelta(hours=i)).save()
59*9c5db199SXin Li                 for count, days in ((i, 1), (0, 0), (0, -1)):
60*9c5db199SXin Li                     self.assertEqual(
61*9c5db199SXin Li                        count,
62*9c5db199SXin Li                        count_jobs.number_of_jobs_since(timedelta(days=days)))
63*9c5db199SXin Li
64*9c5db199SXin Li
65*9c5db199SXin Liif __name__ == '__main__':
66*9c5db199SXin Li    unittest.main()
67