blob: 3c3b3f16e6340d4d0d4589eb24362fd99ccff22c [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
Xixuan Wua5a29442017-10-11 11:03:02 -070054 def testInitBuildEventWithoutLastExecWithGAETesting(self):
55 """Test BuildEvent without last exec will be handled in testing on GAE."""
56 task_config = config_reader.TaskConfig(self.config)
57 last_exec_client = datastore_client.LastExecutionRecordStore()
58
59 with mock.patch('global_config.GAE_TESTING', return_value=True):
60 event = self._KLASS(
61 task_config.get_event_setting(self._KLASS.section_name()),
62 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
63 self.assertEqual(event.target_exec_utc, self.utc_now)
64 self.assertEqual(event.last_exec_utc, self.utc_now)
65 self.assertEqual(event.since_date, self.utc_now)
66 self.assertFalse(event.always_handle)
67 self.assertTrue(event.should_handle)
68
Xixuan Wu197b0652017-08-28 15:46:25 -070069 def testInitBuildEventWithValidLastExec(self):
70 """Test that init a Build Event with a valid last_exec_utc in datastore."""
71 task_config = config_reader.TaskConfig(self.config)
72 last_exec_utc = self.utc_now - datetime.timedelta(
73 hours=self._KLASS.LAST_EXEC_INTERVAL-1)
74 last_exec_client = datastore_client.LastExecutionRecordStore()
75 last_exec_client.set_last_execute_time(self._KLASS.KEYWORD, last_exec_utc)
76 event = self._KLASS(
77 task_config.get_event_setting(self._KLASS.section_name()),
78 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
79 self.assertEqual(event.target_exec_utc, self.utc_now)
80 self.assertEqual(event.last_exec_utc, last_exec_utc)
81 self.assertEqual(event.since_date, last_exec_utc)
82 self.assertFalse(event.always_handle)
83 self.assertTrue(event.should_handle)
84
85 def testInitBuildEventWithOutdatedLastExec(self):
86 """Test that init a BuildEvent with a non-valid last_exec_utc."""
87 task_config = config_reader.TaskConfig(self.config)
88 last_exec_utc = self.utc_now - datetime.timedelta(
89 hours=self._KLASS.LAST_EXEC_INTERVAL+1)
90 last_exec_client = datastore_client.LastExecutionRecordStore()
91 last_exec_client.set_last_execute_time(self._KLASS.KEYWORD, last_exec_utc)
92 event = self._KLASS(
93 task_config.get_event_setting(self._KLASS.section_name()),
94 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
95 self.assertEqual(event.target_exec_utc, self.utc_now)
96 self.assertEqual(event.last_exec_utc, self.utc_now)
97 self.assertEqual(event.since_date, self.utc_now)
98 self.assertFalse(event.always_handle)
99 self.assertFalse(event.should_handle)
Xixuan Wua5a29442017-10-11 11:03:02 -0700100
101 def testInitBuildEventWithOutdatedLastExecWithGAETesting(self):
102 """Test BuildEvent with old last exec will be handled in testing on GAE."""
103 task_config = config_reader.TaskConfig(self.config)
104 last_exec_utc = self.utc_now - datetime.timedelta(
105 hours=self._KLASS.LAST_EXEC_INTERVAL+1)
106 last_exec_client = datastore_client.LastExecutionRecordStore()
107 last_exec_client.set_last_execute_time(self._KLASS.KEYWORD, last_exec_utc)
108
109 with mock.patch('global_config.GAE_TESTING', return_value=True):
110 event = self._KLASS(
111 task_config.get_event_setting(self._KLASS.section_name()),
112 last_exec_client.get_last_execute_time(self._KLASS.KEYWORD))
113 self.assertEqual(event.target_exec_utc, self.utc_now)
114 self.assertEqual(event.last_exec_utc, self.utc_now)
115 self.assertEqual(event.since_date, self.utc_now)
116 self.assertFalse(event.always_handle)
117 self.assertTrue(event.should_handle)