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