blob: 9178b231fc420cd33b2bfe854a07b227854ece02 [file] [log] [blame]
Xixuan Wu197b0652017-08-28 15:46:25 -07001# Copyright 2017 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Module for build_event unittests."""
6
7import datetime
8import unittest
9
10import build_event
11import config_reader
12import datastore_client
13import mock
14import time_converter
15
16from google.appengine.ext import ndb
17from google.appengine.ext import testbed
18
19
20class BuildEventTestCase(unittest.TestCase):
21
22 _KLASS = build_event.NewBuild
23
24 def setUp(self):
25 mock_utc_now = mock.patch('time_converter.utc_now')
26 self._mock_utc_now = mock_utc_now.start()
27 self.addCleanup(mock_utc_now.stop)
28
29 self.testbed = testbed.Testbed()
30 self.testbed.activate()
31 self.addCleanup(self.testbed.deactivate)
32 self.testbed.init_datastore_v3_stub()
33 self.testbed.init_memcache_stub()
34 ndb.get_context().clear_cache()
35
36 self.config = config_reader.ConfigReader(None)
37 self.utc_now = datetime.datetime(2017, 8, 1, 2, 15,
38 tzinfo=time_converter.UTC_TZ)
39 self._mock_utc_now.return_value = self.utc_now
40
41 def testInitBuildEventWithoutLastExec(self):
42 """Test that init a Build Event without last_exec_utc in datastore."""
43 task_config = config_reader.TaskConfig(self.config)
44 last_exec_client = datastore_client.LastExecutionRecordStore()
45 event = self._KLASS(
46 task_config.get_event_setting(self._KLASS.section_name()),
47 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
48 self.assertEqual(event.target_exec_utc, self.utc_now)
49 self.assertEqual(event.last_exec_utc, self.utc_now)
50 self.assertEqual(event.since_date, self.utc_now)
51 self.assertFalse(event.always_handle)
52 self.assertFalse(event.should_handle)
53
54 def testInitBuildEventWithValidLastExec(self):
55 """Test that init a Build Event with a valid last_exec_utc in datastore."""
56 task_config = config_reader.TaskConfig(self.config)
57 last_exec_utc = self.utc_now - datetime.timedelta(
58 hours=self._KLASS.LAST_EXEC_INTERVAL-1)
59 last_exec_client = datastore_client.LastExecutionRecordStore()
60 last_exec_client.set_last_execute_time(self._KLASS.KEYWORD, last_exec_utc)
61 event = self._KLASS(
62 task_config.get_event_setting(self._KLASS.section_name()),
63 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
64 self.assertEqual(event.target_exec_utc, self.utc_now)
65 self.assertEqual(event.last_exec_utc, last_exec_utc)
66 self.assertEqual(event.since_date, last_exec_utc)
67 self.assertFalse(event.always_handle)
68 self.assertTrue(event.should_handle)
69
70 def testInitBuildEventWithOutdatedLastExec(self):
71 """Test that init a BuildEvent with a non-valid last_exec_utc."""
72 task_config = config_reader.TaskConfig(self.config)
73 last_exec_utc = self.utc_now - datetime.timedelta(
74 hours=self._KLASS.LAST_EXEC_INTERVAL+1)
75 last_exec_client = datastore_client.LastExecutionRecordStore()
76 last_exec_client.set_last_execute_time(self._KLASS.KEYWORD, last_exec_utc)
77 event = self._KLASS(
78 task_config.get_event_setting(self._KLASS.section_name()),
79 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
80 self.assertEqual(event.target_exec_utc, self.utc_now)
81 self.assertEqual(event.last_exec_utc, self.utc_now)
82 self.assertEqual(event.since_date, self.utc_now)
83 self.assertFalse(event.always_handle)
84 self.assertFalse(event.should_handle)