pytest_sntp.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Apache-2.0
  3. import datetime
  4. import logging
  5. from typing import Any, Tuple
  6. import pytest
  7. from common_test_methods import get_env_config_variable
  8. from pytest_embedded import Dut
  9. @pytest.mark.esp32
  10. @pytest.mark.wifi_ap
  11. def test_get_time_from_sntp_server(dut: Dut) -> None:
  12. dut.expect('Time is not set yet. Connecting to WiFi and getting time over NTP.')
  13. if dut.app.sdkconfig.get('EXAMPLE_WIFI_SSID_PWD_FROM_STDIN') is True:
  14. dut.expect('Please input ssid password:')
  15. env_name = 'wifi_ap'
  16. ap_ssid = get_env_config_variable(env_name, 'ap_ssid')
  17. ap_password = get_env_config_variable(env_name, 'ap_password')
  18. dut.write(f'{ap_ssid} {ap_password}')
  19. dut.expect('IPv4 address:')
  20. dut.expect('Initializing and starting SNTP')
  21. dut.expect('Notification of a time synchronization event')
  22. TIME_FORMAT = '%a %b %d %H:%M:%S %Y'
  23. TIME_FORMAT_REGEX = r'\w+\s+\w+\s+\d{1,2}\s+\d{2}:\d{2}:\d{2} \d{4}'
  24. TIME_DIFF = datetime.timedelta(seconds=10 + 2) # cpu spends 10 seconds in deep sleep
  25. NY_time = None
  26. SH_time = None
  27. def check_time(prev_NY_time: Any, prev_SH_time: Any) -> Tuple[Any, Any]:
  28. NY_str = dut.expect(r'The current date/time in New York is: ({})'.format(TIME_FORMAT_REGEX))[1].decode()
  29. SH_str = dut.expect(r'The current date/time in Shanghai is: ({})'.format(TIME_FORMAT_REGEX))[1].decode()
  30. logging.info('New York: "{}"'.format(NY_str))
  31. logging.info('Shanghai: "{}"'.format(SH_str))
  32. dut.expect('Entering deep sleep for 10 seconds')
  33. logging.info('Sleeping...')
  34. new_NY_time = datetime.datetime.strptime(NY_str, TIME_FORMAT)
  35. new_SH_time = datetime.datetime.strptime(SH_str, TIME_FORMAT)
  36. # The initial time is not checked because datetime has problems with timezones
  37. assert not prev_NY_time or new_NY_time - prev_NY_time < TIME_DIFF
  38. assert not prev_SH_time or new_SH_time - prev_SH_time < TIME_DIFF
  39. return (new_NY_time, new_SH_time)
  40. NY_time, SH_time = check_time(NY_time, SH_time)
  41. for i in range(2, 4):
  42. dut.expect('example: Boot count: {}'.format(i), timeout=30)
  43. NY_time, SH_time = check_time(NY_time, SH_time)