예제 #1
0
    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")
예제 #2
0
 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])
예제 #3
0
 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, [])
예제 #4
0
 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, [])
예제 #5
0
    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],
                    ])
예제 #6
0
    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)
예제 #7
0
    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])
예제 #8
0
 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))