Merge branch 'bugfix/fix_ota_example_tests' into 'master'

Fix OTA example test to fix CI failures

See merge request espressif/esp-idf!18690
This commit is contained in:
Harshit Malpani 2022-07-06 12:55:14 +08:00
commit 495d35949d
4 changed files with 620 additions and 625 deletions

View File

@ -28,15 +28,6 @@ def get_my_ip() -> str:
return my_ip return my_ip
def get_server_status(host_ip: str, port: int) -> bool:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_status = sock.connect_ex((host_ip, port))
sock.close()
if server_status == 0:
return True
return False
def https_request_handler() -> Callable[...,http.server.BaseHTTPRequestHandler]: def https_request_handler() -> Callable[...,http.server.BaseHTTPRequestHandler]:
""" """
Returns a request handler class that handles broken pipe exception Returns a request handler class that handles broken pipe exception
@ -123,18 +114,18 @@ def test_examples_protocol_advanced_https_ota_example(dut: Dut) -> None:
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
# Number of iterations to validate OTA # Number of iterations to validate OTA
iterations = 3 iterations = 3
server_port = 8001 server_port = 8001
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
for i in range(iterations): for i in range(iterations):
dut.expect('Loaded app from partition at offset', timeout=30) dut.expect('Loaded app from partition at offset', timeout=60)
try: try:
ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30) ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30)
print('Connected to AP with IP: {}'.format(ip_address)) print('Connected to AP with IP: {}'.format(ip_address))
@ -145,6 +136,7 @@ def test_examples_protocol_advanced_https_ota_example(dut: Dut) -> None:
print('writing to device: {}'.format('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)) print('writing to device: {}'.format('https://' + host_ip + ':' + str(server_port) + '/' + bin_name))
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)
finally:
thread1.terminate() thread1.terminate()
@ -163,6 +155,7 @@ def test_examples_protocol_advanced_https_ota_example_truncated_bin(dut: Dut) ->
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code if bin is truncated 4. Check working of code if bin is truncated
""" """
try:
server_port = 8001 server_port = 8001
# Original binary file generated after compilation # Original binary file generated after compilation
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
@ -179,7 +172,6 @@ def test_examples_protocol_advanced_https_ota_example_truncated_bin(dut: Dut) ->
binary_file = os.path.join(dut.app.binary_path, truncated_bin_name) binary_file = os.path.join(dut.app.binary_path, truncated_bin_name)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -199,6 +191,7 @@ def test_examples_protocol_advanced_https_ota_example_truncated_bin(dut: Dut) ->
os.remove(binary_file) os.remove(binary_file)
except OSError: except OSError:
pass pass
finally:
thread1.terminate() thread1.terminate()
@ -217,6 +210,7 @@ def test_examples_protocol_advanced_https_ota_example_truncated_header(dut: Dut)
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code if headers are not sent completely 4. Check working of code if headers are not sent completely
""" """
try:
server_port = 8001 server_port = 8001
# Original binary file generated after compilation # Original binary file generated after compilation
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
@ -233,7 +227,6 @@ def test_examples_protocol_advanced_https_ota_example_truncated_header(dut: Dut)
binary_file = os.path.join(dut.app.binary_path, truncated_bin_name) binary_file = os.path.join(dut.app.binary_path, truncated_bin_name)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -253,6 +246,7 @@ def test_examples_protocol_advanced_https_ota_example_truncated_header(dut: Dut)
os.remove(binary_file) os.remove(binary_file)
except OSError: except OSError:
pass pass
finally:
thread1.terminate() thread1.terminate()
@ -271,6 +265,7 @@ def test_examples_protocol_advanced_https_ota_example_random(dut: Dut) -> None:
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code for random binary file 4. Check working of code for random binary file
""" """
try:
server_port = 8001 server_port = 8001
# Random binary file to be generated # Random binary file to be generated
random_bin_name = 'random.bin' random_bin_name = 'random.bin'
@ -287,7 +282,6 @@ def test_examples_protocol_advanced_https_ota_example_random(dut: Dut) -> None:
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -307,6 +301,7 @@ def test_examples_protocol_advanced_https_ota_example_random(dut: Dut) -> None:
os.remove(binary_file) os.remove(binary_file)
except OSError: except OSError:
pass pass
finally:
thread1.terminate() thread1.terminate()
@ -325,6 +320,7 @@ def test_examples_protocol_advanced_https_ota_example_invalid_chip_id(dut: Dut)
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code for random binary file 4. Check working of code for random binary file
""" """
try:
server_port = 8001 server_port = 8001
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
# Random binary file to be generated # Random binary file to be generated
@ -343,7 +339,6 @@ def test_examples_protocol_advanced_https_ota_example_invalid_chip_id(dut: Dut)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -363,6 +358,7 @@ def test_examples_protocol_advanced_https_ota_example_invalid_chip_id(dut: Dut)
os.remove(random_binary_file) os.remove(random_binary_file)
except OSError: except OSError:
pass pass
finally:
thread1.terminate() thread1.terminate()
@ -385,18 +381,21 @@ def test_examples_protocol_advanced_https_ota_example_chunked(dut: Dut) -> None:
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
chunked_server = start_chunked_server(dut.app.binary_path, 8070) chunked_server = start_chunked_server(dut.app.binary_path, 8070)
try:
dut.expect('Loaded app from partition at offset', timeout=30) dut.expect('Loaded app from partition at offset', timeout=30)
try: try:
ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30) ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30)
print('Connected to AP with IP: {}'.format(ip_address)) print('Connected to AP with IP: {}'.format(ip_address))
except pexpect.exceptions.TIMEOUT: except pexpect.exceptions.TIMEOUT:
raise ValueError('ENV_TEST_FAILURE: Cannot connect to AP') raise ValueError('ENV_TEST_FAILURE: Cannot connect to AP')
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
print('writing to device: {}'.format('https://' + host_ip + ':8070/' + bin_name)) print('writing to device: {}'.format('https://' + host_ip + ':8070/' + bin_name))
dut.write('https://' + host_ip + ':8070/' + bin_name) dut.write('https://' + host_ip + ':8070/' + bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
finally:
chunked_server.kill() chunked_server.kill()
@ -415,6 +414,7 @@ def test_examples_protocol_advanced_https_ota_example_redirect_url(dut: Dut) ->
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
server_port = 8001 server_port = 8001
# Port to which the request should be redirected # Port to which the request should be redirected
redirection_server_port = 8081 redirection_server_port = 8081
@ -423,7 +423,6 @@ def test_examples_protocol_advanced_https_ota_example_redirect_url(dut: Dut) ->
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -448,6 +447,7 @@ def test_examples_protocol_advanced_https_ota_example_redirect_url(dut: Dut) ->
dut.write('https://' + host_ip + ':' + str(redirection_server_port) + '/' + bin_name) dut.write('https://' + host_ip + ':' + str(redirection_server_port) + '/' + bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
thread2.terminate() thread2.terminate()
thread3.terminate() thread3.terminate()
@ -470,6 +470,7 @@ def test_examples_protocol_advanced_https_ota_example_anti_rollback(dut: Dut) ->
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of anti_rollback feature 4. Check working of anti_rollback feature
""" """
try:
dut.serial.erase_flash() dut.serial.erase_flash()
dut.serial.flash() dut.serial.flash()
server_port = 8001 server_port = 8001
@ -489,7 +490,6 @@ def test_examples_protocol_advanced_https_ota_example_anti_rollback(dut: Dut) ->
binary_file = os.path.join(dut.app.binary_path, anti_rollback_bin_name) binary_file = os.path.join(dut.app.binary_path, anti_rollback_bin_name)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -520,6 +520,7 @@ def test_examples_protocol_advanced_https_ota_example_anti_rollback(dut: Dut) ->
os.remove(binary_file) os.remove(binary_file)
except OSError: except OSError:
pass pass
finally:
thread1.terminate() thread1.terminate()
@ -537,6 +538,7 @@ def test_examples_protocol_advanced_https_ota_example_partial_request(dut: Dut)
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
server_port = 8001 server_port = 8001
# Size of partial HTTP request # Size of partial HTTP request
request_size = 16384 request_size = 16384
@ -547,7 +549,6 @@ def test_examples_protocol_advanced_https_ota_example_partial_request(dut: Dut)
http_requests = int((bin_size / request_size) - 1) http_requests = int((bin_size / request_size) - 1)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -567,6 +568,7 @@ def test_examples_protocol_advanced_https_ota_example_partial_request(dut: Dut)
dut.expect('Connection closed', timeout=60) dut.expect('Connection closed', timeout=60)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -586,12 +588,12 @@ def test_examples_protocol_advanced_https_ota_example_nimble_gatts(dut: Dut) ->
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Reboot with the new OTA image 4. Reboot with the new OTA image
""" """
try:
server_port = 8001 server_port = 8001
# File to be downloaded. This file is generated after compilation # File to be downloaded. This file is generated after compilation
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -610,6 +612,7 @@ def test_examples_protocol_advanced_https_ota_example_nimble_gatts(dut: Dut) ->
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -629,12 +632,12 @@ def test_examples_protocol_advanced_https_ota_example_bluedroid_gatts(dut: Dut)
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Reboot with the new OTA image 4. Reboot with the new OTA image
""" """
try:
server_port = 8001 server_port = 8001
# File to be downloaded. This file is generated after compilation # File to be downloaded. This file is generated after compilation
bin_name = 'advanced_https_ota.bin' bin_name = 'advanced_https_ota.bin'
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -654,6 +657,7 @@ def test_examples_protocol_advanced_https_ota_example_bluedroid_gatts(dut: Dut)
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -688,20 +692,23 @@ def test_examples_protocol_advanced_https_ota_example_openssl_aligned_bin(dut: D
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
chunked_server = start_chunked_server(dut.app.binary_path, 8070) chunked_server = start_chunked_server(dut.app.binary_path, 8070)
try:
dut.expect('Loaded app from partition at offset', timeout=30) dut.expect('Loaded app from partition at offset', timeout=30)
try: try:
ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30) ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30)
print('Connected to AP with IP: {}'.format(ip_address)) print('Connected to AP with IP: {}'.format(ip_address))
except pexpect.exceptions.TIMEOUT: except pexpect.exceptions.TIMEOUT:
raise ValueError('ENV_TEST_FAILURE: Cannot connect to AP') raise ValueError('ENV_TEST_FAILURE: Cannot connect to AP')
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
print('writing to device: {}'.format('https://' + host_ip + ':8070/' + aligned_bin_name)) print('writing to device: {}'.format('https://' + host_ip + ':8070/' + aligned_bin_name))
dut.write('https://' + host_ip + ':8070/' + aligned_bin_name) dut.write('https://' + host_ip + ':8070/' + aligned_bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting Advanced OTA example', timeout=30) dut.expect('Starting Advanced OTA example', timeout=30)
chunked_server.kill()
try: try:
os.remove(aligned_bin_name) os.remove(aligned_bin_name)
except OSError: except OSError:
pass pass
finally:
chunked_server.kill()

View File

@ -74,15 +74,6 @@ def get_my_ip() -> str:
return my_ip return my_ip
def get_server_status(host_ip: str, port: int) -> bool:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_status = sock.connect_ex((host_ip, port))
sock.close()
if server_status == 0:
return True
return False
def create_file(server_file: str, file_data: str) -> None: def create_file(server_file: str, file_data: str) -> None:
with open(server_file, 'w+') as file: with open(server_file, 'w+') as file:
file.write(file_data) file.write(file_data)
@ -149,6 +140,7 @@ def test_examples_protocol_native_ota_example(dut: Dut) -> None:
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
server_port = 8002 server_port = 8002
# No. of times working of application to be validated # No. of times working of application to be validated
iterations = 3 iterations = 3
@ -156,7 +148,6 @@ def test_examples_protocol_native_ota_example(dut: Dut) -> None:
bin_name = 'native_ota.bin' bin_name = 'native_ota.bin'
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -172,6 +163,7 @@ def test_examples_protocol_native_ota_example(dut: Dut) -> None:
print('writing to device: {}'.format('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)) print('writing to device: {}'.format('https://' + host_ip + ':' + str(server_port) + '/' + bin_name))
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + bin_name)
finally:
thread1.terminate() thread1.terminate()
@ -187,6 +179,7 @@ def test_examples_protocol_native_ota_example_truncated_bin(dut: Dut) -> None:
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code if bin is truncated 4. Check working of code if bin is truncated
""" """
try:
server_port = 8002 server_port = 8002
# Original binary file generated after compilation # Original binary file generated after compilation
bin_name = 'native_ota.bin' bin_name = 'native_ota.bin'
@ -205,7 +198,6 @@ def test_examples_protocol_native_ota_example_truncated_bin(dut: Dut) -> None:
binary_file = os.path.join(dut.app.binary_path, truncated_bin_name) binary_file = os.path.join(dut.app.binary_path, truncated_bin_name)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -222,6 +214,7 @@ def test_examples_protocol_native_ota_example_truncated_bin(dut: Dut) -> None:
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + truncated_bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + truncated_bin_name)
dut.expect('native_ota_example: Image validation failed, image is corrupted', timeout=20) dut.expect('native_ota_example: Image validation failed, image is corrupted', timeout=20)
os.remove(binary_file) os.remove(binary_file)
finally:
thread1.terminate() thread1.terminate()
@ -237,6 +230,7 @@ def test_examples_protocol_native_ota_example_truncated_header(dut: Dut) -> None
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code if headers are not sent completely 4. Check working of code if headers are not sent completely
""" """
try:
server_port = 8002 server_port = 8002
# Original binary file generated after compilation # Original binary file generated after compilation
bin_name = 'native_ota.bin' bin_name = 'native_ota.bin'
@ -254,7 +248,6 @@ def test_examples_protocol_native_ota_example_truncated_header(dut: Dut) -> None
binary_file = os.path.join(dut.app.binary_path, truncated_bin_name) binary_file = os.path.join(dut.app.binary_path, truncated_bin_name)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -271,6 +264,7 @@ def test_examples_protocol_native_ota_example_truncated_header(dut: Dut) -> None
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + truncated_bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + truncated_bin_name)
dut.expect('native_ota_example: received package is not fit len', timeout=20) dut.expect('native_ota_example: received package is not fit len', timeout=20)
os.remove(binary_file) os.remove(binary_file)
finally:
thread1.terminate() thread1.terminate()
@ -286,6 +280,7 @@ def test_examples_protocol_native_ota_example_random(dut: Dut) -> None:
3. Fetch OTA image over HTTPS 3. Fetch OTA image over HTTPS
4. Check working of code for random binary file 4. Check working of code for random binary file
""" """
try:
server_port = 8002 server_port = 8002
# Random binary file to be generated # Random binary file to be generated
random_bin_name = 'random.bin' random_bin_name = 'random.bin'
@ -302,7 +297,6 @@ def test_examples_protocol_native_ota_example_random(dut: Dut) -> None:
fo.close() fo.close()
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -319,6 +313,7 @@ def test_examples_protocol_native_ota_example_random(dut: Dut) -> None:
dut.write('https://' + host_ip + ':' + str(server_port) + '/' + random_bin_name) dut.write('https://' + host_ip + ':' + str(server_port) + '/' + random_bin_name)
dut.expect('esp_ota_ops: OTA image has invalid magic byte', timeout=20) dut.expect('esp_ota_ops: OTA image has invalid magic byte', timeout=20)
os.remove(binary_file) os.remove(binary_file)
finally:
thread1.terminate() thread1.terminate()
@ -338,6 +333,7 @@ def test_examples_protocol_native_ota_example_chunked(dut: Dut) -> None:
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
chunked_server = start_chunked_server(dut.app.binary_path, 8070) chunked_server = start_chunked_server(dut.app.binary_path, 8070)
try:
dut.expect('Loaded app from partition at offset', timeout=30) dut.expect('Loaded app from partition at offset', timeout=30)
try: try:
ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30) ip_address = dut.expect(r' (sta|eth) ip: ([^,]+),', timeout=30)
@ -350,6 +346,7 @@ def test_examples_protocol_native_ota_example_chunked(dut: Dut) -> None:
dut.write('https://' + host_ip + ':8070/' + bin_name) dut.write('https://' + host_ip + ':8070/' + bin_name)
dut.expect('Loaded app from partition at offset', timeout=60) dut.expect('Loaded app from partition at offset', timeout=60)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
chunked_server.kill()
os.remove(os.path.join(dut.app.binary_path, 'server_cert.pem')) os.remove(os.path.join(dut.app.binary_path, 'server_cert.pem'))
os.remove(os.path.join(dut.app.binary_path, 'server_key.pem')) os.remove(os.path.join(dut.app.binary_path, 'server_key.pem'))
finally:
chunked_server.kill()

View File

@ -26,13 +26,6 @@ def get_my_ip() -> str:
return my_ip return my_ip
def get_server_status(host_ip: str, port: int) -> bool:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_status = sock.connect_ex((host_ip, port))
sock.close()
return server_status == 0
def https_request_handler() -> Callable[...,http.server.BaseHTTPRequestHandler]: def https_request_handler() -> Callable[...,http.server.BaseHTTPRequestHandler]:
""" """
Returns a request handler class that handles broken pipe exception Returns a request handler class that handles broken pipe exception
@ -73,10 +66,10 @@ def start_https_server(ota_image_dir: str, server_ip: str, server_port: int) ->
@pytest.mark.esp32s3 @pytest.mark.esp32s3
@pytest.mark.ethernet_ota @pytest.mark.ethernet_ota
def test_examples_protocol_pre_encrypted_ota_example(dut: Dut) -> None: def test_examples_protocol_pre_encrypted_ota_example(dut: Dut) -> None:
try:
server_port = 8001 server_port = 8001
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, server_port) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, server_port))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -95,4 +88,5 @@ def test_examples_protocol_pre_encrypted_ota_example(dut: Dut) -> None:
dut.expect('Magic Verified', timeout=30) dut.expect('Magic Verified', timeout=30)
dut.expect('Reading RSA private key', timeout=30) dut.expect('Reading RSA private key', timeout=30)
dut.expect('upgrade successful. Rebooting', timeout=30) dut.expect('upgrade successful. Rebooting', timeout=30)
finally:
thread1.terminate() thread1.terminate()

View File

@ -72,15 +72,6 @@ def get_my_ip() -> str:
return my_ip return my_ip
def get_server_status(host_ip: str, server_port: int) -> bool:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_status = sock.connect_ex((host_ip, server_port))
sock.close()
if server_status == 0:
return True
return False
def start_https_server(ota_image_dir: str, server_ip: str, server_port: int, server_file: str = None, key_file: str = None) -> None: def start_https_server(ota_image_dir: str, server_ip: str, server_port: int, server_file: str = None, key_file: str = None) -> None:
os.chdir(ota_image_dir) os.chdir(ota_image_dir)
@ -136,10 +127,10 @@ def test_examples_protocol_simple_ota_example(dut: Dut) -> None:
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
sha256_bootloader, sha256_app = calc_all_sha256(dut) sha256_bootloader, sha256_app = calc_all_sha256(dut)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -158,6 +149,7 @@ def test_examples_protocol_simple_ota_example(dut: Dut) -> None:
dut.write('https://' + host_ip + ':8000/simple_ota.bin') dut.write('https://' + host_ip + ':8000/simple_ota.bin')
dut.expect('Loaded app from partition at offset 0x110000', timeout=60) dut.expect('Loaded app from partition at offset 0x110000', timeout=60)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -174,9 +166,9 @@ def test_examples_protocol_simple_ota_example_ethernet_with_spiram_config(dut: D
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -193,6 +185,7 @@ def test_examples_protocol_simple_ota_example_ethernet_with_spiram_config(dut: D
dut.write('https://' + host_ip + ':8000/simple_ota.bin') dut.write('https://' + host_ip + ':8000/simple_ota.bin')
dut.expect('Loaded app from partition at offset 0x110000', timeout=60) dut.expect('Loaded app from partition at offset 0x110000', timeout=60)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -210,12 +203,12 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption(dut: Dut) ->
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
# Erase flash # Erase flash
dut.serial.erase_flash() dut.serial.erase_flash()
dut.serial.flash() dut.serial.flash()
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -234,6 +227,7 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption(dut: Dut) ->
dut.expect('Loaded app from partition at offset 0x120000', timeout=60) dut.expect('Loaded app from partition at offset 0x120000', timeout=60)
dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10) dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -249,12 +243,12 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption_wifi(dut: Du
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
# start test # start test
# Erase flash # Erase flash
dut.serial.erase_flash() dut.serial.erase_flash()
dut.serial.flash() dut.serial.flash()
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -273,6 +267,7 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption_wifi(dut: Du
dut.expect('Loaded app from partition at offset 0x120000', timeout=60) dut.expect('Loaded app from partition at offset 0x120000', timeout=60)
dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10) dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -289,10 +284,10 @@ def test_examples_protocol_simple_ota_example_with_verify_app_signature_on_updat
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
sha256_bootloader, sha256_app = calc_all_sha256(dut) sha256_bootloader, sha256_app = calc_all_sha256(dut)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -315,6 +310,7 @@ def test_examples_protocol_simple_ota_example_with_verify_app_signature_on_updat
dut.expect('Loaded app from partition at offset 0x120000', timeout=20) dut.expect('Loaded app from partition at offset 0x120000', timeout=20)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()
@ -331,10 +327,10 @@ def test_examples_protocol_simple_ota_example_with_verify_app_signature_on_updat
2. Fetch OTA image over HTTPS 2. Fetch OTA image over HTTPS
3. Reboot with the new OTA image 3. Reboot with the new OTA image
""" """
try:
sha256_bootloader, sha256_app = calc_all_sha256(dut) sha256_bootloader, sha256_app = calc_all_sha256(dut)
# start test # start test
host_ip = get_my_ip() host_ip = get_my_ip()
if (get_server_status(host_ip, 8000) is False):
thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000)) thread1 = multiprocessing.Process(target=start_https_server, args=(dut.app.binary_path, host_ip, 8000))
thread1.daemon = True thread1.daemon = True
thread1.start() thread1.start()
@ -360,6 +356,7 @@ def test_examples_protocol_simple_ota_example_with_verify_app_signature_on_updat
dut.expect('Loaded app from partition at offset 0x120000', timeout=20) dut.expect('Loaded app from partition at offset 0x120000', timeout=20)
dut.expect('Starting OTA example', timeout=30) dut.expect('Starting OTA example', timeout=30)
finally:
thread1.terminate() thread1.terminate()