esp-idf/tools/test_apps/phy/phy_tsens/pytest_phy_tsens.py

193 lines
6.4 KiB
Python
Raw Normal View History

# SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import random
import string
from typing import Tuple
import pexpect
import pytest
from pytest_embedded import Dut
def run_phy_tsens_test(dut: Tuple[Dut, Dut]) -> None:
ap_dut = dut[0]
sta_dut = dut[1]
ap_dut.write('tsens_init')
sta_dut.write('tsens_init')
ap_dut.expect('Enable temperature sensor')
sta_dut.expect('Enable temperature sensor')
ap_dut.write('wifi_init')
sta_dut.write('wifi_init')
ap_dut.expect('initialize_wifi DONE')
sta_dut.expect('initialize_wifi DONE')
# check tsens read after wifi_init
for _dut in [ap_dut, sta_dut]:
_dut.write('tsens_read')
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
_dut.write('tsens_read')
temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert -5 < float(temp_val) - float(temp_val2) < 5
# start tsens read background task
for _dut in [ap_dut, sta_dut]:
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
# check wifi connect
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
ap_dut.write(f'ap_set {ssid} {password}')
ap_dut.expect('set ap config OK')
sta_dut.write(f'sta_connect {ssid} {password}')
sta_dut.expect('STA_GOT_IP')
data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
assert 'DISCONNECT' not in data
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
# check tsens read again after wifi connected
for _dut in [ap_dut, sta_dut]:
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
def run_phy_tsens_test_init_wifi_first(dut: Tuple[Dut, Dut]) -> None:
ap_dut = dut[0]
sta_dut = dut[1]
ap_dut.write('tsens_init')
sta_dut.write('tsens_init')
ap_dut.expect('Enable temperature sensor')
sta_dut.expect('Enable temperature sensor')
ap_dut.write('wifi_init')
sta_dut.write('wifi_init')
ap_dut.expect('initialize_wifi DONE')
sta_dut.expect('initialize_wifi DONE')
# check tsens read after wifi_init
for _dut in [ap_dut, sta_dut]:
_dut.write('tsens_read')
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
_dut.write('tsens_read')
temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert -5 < float(temp_val) - float(temp_val2) < 5
# start tsens read background task
for _dut in [ap_dut, sta_dut]:
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
# check wifi connect
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
ap_dut.write(f'ap_set {ssid} {password}')
ap_dut.expect('set ap config OK')
sta_dut.write(f'sta_connect {ssid} {password}')
sta_dut.expect('STA_GOT_IP')
data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
assert 'DISCONNECT' not in data
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
# check tsens read again after wifi connected
for _dut in [ap_dut, sta_dut]:
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
def run_phy_tsens_test_with_light_sleep(dut: Tuple[Dut, Dut]) -> None:
ap_dut = dut[0]
sta_dut = dut[1]
ap_dut.write('wifi_init')
sta_dut.write('wifi_init')
ap_dut.expect('initialize_wifi DONE')
sta_dut.expect('initialize_wifi DONE')
ap_dut.write('tsens_init')
sta_dut.write('tsens_init')
ap_dut.expect('Enable temperature sensor')
sta_dut.expect('Enable temperature sensor')
# start tsens read background task
for _dut in [ap_dut, sta_dut]:
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
# check wifi connect
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
ap_dut.write(f'ap_set {ssid} {password}')
ap_dut.expect('set ap config OK')
sta_dut.write(f'sta_connect {ssid} {password}')
sta_dut.expect('STA_GOT_IP')
sta_dut.write('light_sleep enable')
data = sta_dut.expect(pexpect.TIMEOUT, timeout=30).decode(errors='ignore')
assert 'DISCONNECT' not in data
assert 'LIGHT_SLEEP_ENABLED,OK' in data
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
# check tsens read again after wifi connected
for _dut in [ap_dut, sta_dut]:
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
assert 0 < float(temp_val) < 70
@pytest.mark.esp32c3
@pytest.mark.esp32c6
@pytest.mark.esp32s2
@pytest.mark.esp32s3
@pytest.mark.wifi_two_dut
@pytest.mark.parametrize('count', [2], indirect=True)
def test_phy_tsens_coexist(dut: Tuple[Dut, Dut]) -> None:
for _dut in dut:
_dut.expect('esp>')
run_phy_tsens_test(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_init_wifi_first(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_with_light_sleep(dut)
@pytest.mark.esp32c2
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, config, baud',
[
(2, 'c2_xtal26m', '74880'),
],
indirect=True,
)
def test_phy_tsens_coexist_c2_xtal26m(dut: Tuple[Dut, Dut]) -> None:
for _dut in dut:
_dut.expect('esp>')
run_phy_tsens_test(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_init_wifi_first(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_with_light_sleep(dut)