def test_parse_time(self): self.assertEqual(timeutil.parse_time("2020-08-27 00:19:23"), (2020, 8, 27, 0, 19, 23, 0, 0)) self.assertEqual(timeutil.parse_time("2020-08-27"), (2020, 8, 27, 0, 0, 0, 0, 0)) with self.assertRaises(ValueError): timeutil.parse_time("200x")
def test_clock_drift_reset_internal(self): check = main.CheckSchedule() tasks = check.runwith( itt=timeutil.parse_time("1970-01-01 00:30:10"), ett=timeutil.parse_time("2020-08-27 07:28:05"), sched_cfg=[ ["TakeMeasurement", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ]) # Do the task that we woke up for. # Otherwise it may never get done. self.assertEqual(tasks, [main.TakeMeasurement])
def test_clock_drift_wake_early(self): check = main.CheckSchedule() tasks = check.runwith( itt=timeutil.parse_time("2020-08-27 07:30:05"), ett=timeutil.parse_time("2020-08-27 07:28:05"), sched_cfg=[ ["TakeMeasurement", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ]) # Don't schedule anything. # We will sync RTCs and wake up again on time self.assertEqual(tasks, [])
def test_bad_task(self): check = main.CheckSchedule() tasks = check.runwith( itt=timeutil.parse_time("2020-08-27 07:30:05"), sched_cfg=[ ["TakeMeasurement_X", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ]) self.assertEqual(tasks, [])
def test_sleep_if_hw_not_initialized(self): main.hw = None sleep_until = main.SleepUntilScheduled() sleep_until.runwith( tt=timeutil.parse_time("2020-08-27 07:38:15"), sched_cfg=[ ["TakeMeasurement", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ])
def test_sleep_until_next_task(self): sleep_until = main.SleepUntilScheduled() sleep_until.runwith( tt=timeutil.parse_time("2020-08-27 07:38:15"), sched_cfg=[ ["TakeMeasurement", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ]) self.assertTrue(main.hw._prepare_for_shutdown_called, True) self.assertTrue(main.machine._deepsleep_called) self.assertEqual(main.machine._deepsleep_time_ms, 1305000)
def test_light_sleep_if_next_task_very_soon(self): sleep_until = main.SleepUntilScheduled() tasks = sleep_until.runwith( tt=timeutil.parse_time("2020-08-27 07:29:55"), sched_cfg=[ ["TakeMeasurement", 'minutes', 30, 0], ["Communicate", 'daily', 3, 15], ]) # Deep sleep is not really worth it for less than ~30 sec. # Instead, light sleep and then go back to checking the schedule. # Be sure to put this step back in the queue again, # since we didn't deep sleep and reset the device. self.assertEqual(main.hw._prepare_for_shutdown_called, False) self.assertEqual(main.machine._deepsleep_called, False) self.assertEqual(main.utime._sleep_ms_called, True) self.assertEqual(main.utime._sleep_ms_time_ms, 5000) self.assertEqual(tasks, [main.CheckSchedule, main.SleepUntilScheduled])
def test_mktime_localtime_known_time(self): tt = timeutil.parse_time("2020-08-27 01:53:24") ts = 1598493204 self.assertEqual(timeutil.localtime(ts)[0:6], tt[0:6]) self.assertEqual(timeutil.mktime(tt), ts)
def parse_time(iso): return timeutil.normalize(timeutil.parse_time(iso))