mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-28 03:23:14 +00:00
d6596eff3a
Replace howsmyssl.com with letsencrypt.org in the https_x509_bundle example. howsmyssl.com is a third-party server that is frequently unreachable from CI, causing flaky test failures. letsencrypt.org chains to the same ISRG Root X1 CA, so the custom certificate bundle validation coverage is identical. Since letsencrypt.org was already present in the full bundle URL list, remove the duplicate entry and reduce MAX_URLS from 9 to 8. All 6 unique root CAs in the stress test are still covered. For the QEMU stress test, increase per-connection timeout from 30s to 60s and final completion timeout from 60s to 180s. QEMU emulated network is 3-5x slower than real hardware for TLS handshakes. Add flaky markers to hardware tests to handle intermittent CI lab DHCP failures that affect all Ethernet-based tests.
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
|
import logging
|
|
import os
|
|
|
|
import pytest
|
|
from pytest_embedded import Dut
|
|
from pytest_embedded_idf.utils import idf_parametrize
|
|
|
|
|
|
@pytest.mark.ethernet
|
|
@pytest.mark.flaky(reruns=2, reruns_delay=5)
|
|
@idf_parametrize('target', ['esp32'], indirect=['target'])
|
|
def test_examples_protocol_https_x509_bundle(dut: Dut) -> None:
|
|
"""
|
|
steps: |
|
|
1. join AP
|
|
2. connect to multiple URLs
|
|
3. send http request
|
|
"""
|
|
# check and log bin size
|
|
binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin')
|
|
bin_size = os.path.getsize(binary_file)
|
|
logging.info(f'https_x509_bundle_bin_size : {bin_size // 1024}KB')
|
|
dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30)
|
|
# start test
|
|
num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode())
|
|
for _ in range(num_URLS):
|
|
dut.expect(r'Connection established to ([\s\S]*)', timeout=30)
|
|
dut.expect(f'Completed {num_URLS} connections', timeout=60)
|
|
|
|
|
|
@pytest.mark.ethernet
|
|
@pytest.mark.flaky(reruns=2, reruns_delay=5)
|
|
@pytest.mark.parametrize(
|
|
'config',
|
|
[
|
|
'ssldyn',
|
|
],
|
|
indirect=True,
|
|
)
|
|
@idf_parametrize('target', ['esp32'], indirect=['target'])
|
|
def test_examples_protocol_https_x509_bundle_dynamic_buffer(dut: Dut) -> None:
|
|
# test mbedtls dynamic resource
|
|
# check and log bin size
|
|
binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin')
|
|
bin_size = os.path.getsize(binary_file)
|
|
logging.info(f'https_x509_bundle_bin_size : {bin_size // 1024}KB')
|
|
dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30)
|
|
# start test
|
|
num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode())
|
|
dut.expect(r'Connection established to ([\s\S]*)', timeout=30)
|
|
dut.expect(f'Completed {num_URLS} connections', timeout=60)
|
|
|
|
|
|
@pytest.mark.qemu
|
|
@pytest.mark.parametrize(
|
|
'config',
|
|
[
|
|
'default_crt_bundle',
|
|
],
|
|
indirect=True,
|
|
)
|
|
@idf_parametrize('target', ['esp32'], indirect=['target'])
|
|
def test_examples_protocol_https_x509_bundle_default_crt_bundle_stress_test(dut: Dut) -> None:
|
|
# check and log bin size
|
|
binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin')
|
|
bin_size = os.path.getsize(binary_file)
|
|
logging.info(f'https_x509_bundle_bin_size : {bin_size // 1024}KB')
|
|
dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30)
|
|
# start test
|
|
num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode())
|
|
for _ in range(num_URLS):
|
|
dut.expect(r'Connection established to ([\s\S]*)', timeout=60)
|
|
dut.expect(f'Completed {num_URLS} connections', timeout=180)
|