mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-16 12:02:11 +02:00
84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import subprocess
|
|
import time
|
|
from threading import Event, Thread
|
|
|
|
import netifaces
|
|
|
|
|
|
def run_server(server_stop, port, server_ip, client_ip):
|
|
print('Starting PPP server on port: {}'.format(port))
|
|
try:
|
|
arg_list = [
|
|
'sudo', 'pppd', port, '115200',
|
|
'{}:{}'.format(server_ip, client_ip), 'modem', 'local', 'noauth',
|
|
'debug', 'nocrtscts', 'nodetach', '+ipv6'
|
|
]
|
|
p = subprocess.Popen(arg_list, stdout=subprocess.PIPE, bufsize=1)
|
|
while not server_stop.is_set():
|
|
if p.poll() is not None:
|
|
if p.poll() == 16:
|
|
print('[PPPD:] Terminated: hang-up received')
|
|
break
|
|
else:
|
|
raise ValueError(
|
|
'ENV_TEST_FAILURE: PPP terminated unexpectedly with {}'
|
|
.format(p.poll()))
|
|
line = p.stdout.readline()
|
|
if line:
|
|
print('[PPPD:]{}'.format(line.rstrip()))
|
|
time.sleep(0.1)
|
|
except Exception as e:
|
|
print(e)
|
|
raise ValueError('ENV_TEST_FAILURE: Error running PPP server')
|
|
finally:
|
|
p.terminate()
|
|
print('PPP server stopped')
|
|
|
|
|
|
def test_examples_protocol_pppos_connect(dut):
|
|
"""
|
|
steps:
|
|
1. starts PPP server
|
|
2. get DUT as PPP client to connect to the server
|
|
3. run unit test FW
|
|
"""
|
|
|
|
# Look for test case symbolic names
|
|
try:
|
|
server_ip = dut.app.sdkconfig.get('TEST_APP_PPP_SERVER_IP')
|
|
client_ip = dut.app.sdkconfig.get('TEST_APP_PPP_CLIENT_IP')
|
|
except Exception:
|
|
print(
|
|
'ENV_TEST_FAILURE: Some mandatory configuration not found in sdkconfig'
|
|
)
|
|
raise
|
|
|
|
# the PPP test env uses two ttyUSB's: one for ESP32 board, another one for ppp server
|
|
# use the other port for PPP server than the DUT/ESP
|
|
port = '/dev/ttyUSB0' if dut.serial.port == '/dev/ttyUSB1' else '/dev/ttyUSB1'
|
|
# Start the PPP server
|
|
server_stop = Event()
|
|
t = Thread(target=run_server,
|
|
args=(server_stop, port, server_ip, client_ip))
|
|
t.start()
|
|
try:
|
|
ppp_server_timeout = time.time() + 30
|
|
while 'ppp0' not in netifaces.interfaces():
|
|
print(
|
|
"PPP server haven't yet setup its netif, list of active netifs:{}"
|
|
.format(netifaces.interfaces()))
|
|
time.sleep(0.5)
|
|
if time.time() > ppp_server_timeout:
|
|
raise ValueError(
|
|
'ENV_TEST_FAILURE: PPP server failed to setup ppp0 interface within timeout'
|
|
)
|
|
|
|
dut.expect('All tests passed')
|
|
finally:
|
|
server_stop.set()
|
|
t.join()
|