xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 1 | # 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 datastore unittests.""" |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 6 | # pylint: disable=g-tzinfo-replace,g-bad-import-order |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 7 | |
| 8 | import datetime |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 9 | import pytz |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 10 | import unittest |
| 11 | |
| 12 | import datastore_client |
| 13 | |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 14 | from google.appengine.ext import ndb |
| 15 | from google.appengine.ext import testbed |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 16 | |
| 17 | |
| 18 | class DatastoreTestCase(unittest.TestCase): |
| 19 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 20 | def setUp(self): |
| 21 | self.testbed = testbed.Testbed() |
| 22 | self.testbed.activate() |
| 23 | self.addCleanup(self.testbed.deactivate) |
| 24 | self.testbed.init_datastore_v3_stub() |
| 25 | self.testbed.init_memcache_stub() |
| 26 | ndb.get_context().clear_cache() |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 27 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 28 | def testSetLastExec(self): |
| 29 | last_exec_store = datastore_client.LastExecutionRecordStore() |
| 30 | exec_time = datetime.datetime(2017, 8, 1, 0) |
| 31 | last_exec_store.set_last_execute_time('nightly', exec_time) |
| 32 | self.assertEqual(last_exec_store.get_last_execute_time('nightly'), |
| 33 | exec_time.replace(tzinfo=pytz.utc)) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 34 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 35 | def testDeleteLastExec(self): |
| 36 | last_exec_store = datastore_client.LastExecutionRecordStore() |
| 37 | exec_time = datetime.datetime(2017, 8, 1, 0) |
| 38 | last_exec_store.set_last_execute_time('nightly', exec_time) |
| 39 | last_exec_store.del_last_execute_time('nightly') |
| 40 | self.assertEqual(last_exec_store.get_last_execute_time('nightly'), |
| 41 | None) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 42 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 43 | def testDeleteLastExecWithNonExistentKey(self): |
| 44 | last_exec_store = datastore_client.LastExecutionRecordStore() |
| 45 | last_exec_store.del_last_execute_time('nightly') |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 46 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 47 | def testGetAllLastExec(self): |
| 48 | last_exec_store = datastore_client.LastExecutionRecordStore() |
| 49 | exec_time = datetime.datetime(2017, 8, 1, 0) |
| 50 | event_types = ['nightly', 'weekly'] |
| 51 | exec_time_records = [datastore_client.LastExecutionRecord( |
| 52 | key=ndb.Key(datastore_client.LastExecutionRecord, e), |
| 53 | event_type=e, |
| 54 | exec_time=exec_time.replace(tzinfo=pytz.utc)) for e in event_types] |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 55 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 56 | for e in event_types: |
| 57 | last_exec_store.set_last_execute_time(e, exec_time) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 58 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 59 | last_exec_times = last_exec_store.get_all() |
| 60 | self.assertEqual(last_exec_times, exec_time_records) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 61 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 62 | def testDeleteAllLastExec(self): |
| 63 | last_exec_store = datastore_client.LastExecutionRecordStore() |
| 64 | exec_time = datetime.datetime(2017, 8, 1, 0) |
| 65 | event_types = ['nightly', 'weekly'] |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 66 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 67 | for e in event_types: |
| 68 | last_exec_store.set_last_execute_time(e, exec_time) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 69 | |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 70 | last_exec_store.delete_all() |
| 71 | for e in event_types: |
| 72 | self.assertEqual(last_exec_store.get_last_execute_time(e), None) |
xixuan | 8275317 | 2017-08-07 09:22:50 -0700 | [diff] [blame] | 73 | |
| 74 | if __name__ == '__main__': |
Xixuan Wu | 5d6063e | 2017-09-05 16:15:07 -0700 | [diff] [blame] | 75 | unittest.main() |