Merge branch 'fix/ci_win_kconfig' into 'master'

fix(Tools): failing Win CI tests

Closes IDF-10514 and IDF-10764

See merge request espressif/esp-idf!32446
This commit is contained in:
Marek Fiala 2024-08-22 00:28:48 +08:00
commit 46efcd09c7
5 changed files with 26 additions and 10 deletions

View File

@ -114,6 +114,8 @@ Note, `default_idf_env` sets up the environment based on the `IDF_PATH` environm
Copies IDF from `IDF_PATH` into a new temporary directory. `@pytest.mark.idf_copy('name prefix')` can be used to specify the name prefix of the temporary directory. Copies IDF from `IDF_PATH` into a new temporary directory. `@pytest.mark.idf_copy('name prefix')` can be used to specify the name prefix of the temporary directory.
The marker `@pytest.mark.idf_copy_with_space` can be used in combination with `idf_copy` fixture to create a temporary directory with a space in the name.
For the duration of the test, `IDF_PATH` environment variable is set to the newly created copy. For the duration of the test, `IDF_PATH` environment variable is set to the newly created copy.
```python ```python

View File

@ -133,7 +133,9 @@ def test_app_copy(func_work_dir: Path, request: FixtureRequest) -> typing.Genera
@pytest.fixture @pytest.fixture
def test_git_template_app(func_work_dir: Path, request: FixtureRequest) -> typing.Generator[Path, None, None]: def test_git_template_app(func_work_dir: Path, request: FixtureRequest) -> typing.Generator[Path, None, None]:
copy_to = request.node.name + '_app' # sanitize test name in case pytest.mark.parametrize was used
test_name_sanitized = request.node.name.replace('[', '_').replace(']', '')
copy_to = test_name_sanitized + '_app'
path_to = func_work_dir / copy_to path_to = func_work_dir / copy_to
logging.debug(f'cloning git-template app to {path_to}') logging.debug(f'cloning git-template app to {path_to}')
@ -156,7 +158,13 @@ def test_git_template_app(func_work_dir: Path, request: FixtureRequest) -> typin
@pytest.fixture @pytest.fixture
def idf_copy(func_work_dir: Path, request: FixtureRequest) -> typing.Generator[Path, None, None]: def idf_copy(func_work_dir: Path, request: FixtureRequest) -> typing.Generator[Path, None, None]:
copy_to = request.node.name + '_idf' # sanitize test name in case pytest.mark.parametrize was used
test_name_sanitized = request.node.name.replace('[', '_').replace(']', '')
copy_to = test_name_sanitized + '_idf'
# allow overriding the destination via pytest.mark.idf_copy_with_space so the destination contain space
mark_with_space = request.node.get_closest_marker('idf_copy_with_space')
if mark_with_space:
copy_to = test_name_sanitized + ' idf'
# allow overriding the destination via pytest.mark.idf_copy() # allow overriding the destination via pytest.mark.idf_copy()
mark = request.node.get_closest_marker('idf_copy') mark = request.node.get_closest_marker('idf_copy')

View File

@ -13,7 +13,9 @@ junit_family = xunit1
junit_logging = stdout junit_logging = stdout
junit_log_passing_tests = False junit_log_passing_tests = False
## !! When adding new markers, don't forget to update also the tools\test_build_system\README.md !!
markers = markers =
test_app_copy: specify relative path of the app to copy, and the prefix of the destination directory name test_app_copy: specify relative path of the app to copy, and the prefix of the destination directory name
idf_copy: specify the prefix of the destination directory where IDF should be copied idf_copy: specify the prefix of the destination directory where IDF should be copied
idf_copy_with_space: ensures that destination directory where IDF is copied contain space
force_temp_work_dir: force temporary folder as the working directory force_temp_work_dir: force temporary folder as the working directory

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD # SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
import logging import logging
import os import os
@ -9,7 +9,9 @@ from pathlib import Path
from typing import Iterator from typing import Iterator
import pytest import pytest
from test_build_system_helpers import IdfPyFunc, append_to_file, file_contains from test_build_system_helpers import append_to_file
from test_build_system_helpers import file_contains
from test_build_system_helpers import IdfPyFunc
@contextmanager @contextmanager
@ -77,6 +79,7 @@ def test_kconfig_deprecated_options(idf_py: IdfPyFunc, test_app_copy: Path) -> N
@pytest.mark.usefixtures('idf_copy') @pytest.mark.usefixtures('idf_copy')
@pytest.mark.idf_copy('test_kconfig_various_options')
def test_kconfig_multiple_and_target_specific_options(idf_py: IdfPyFunc, test_app_copy: Path) -> None: def test_kconfig_multiple_and_target_specific_options(idf_py: IdfPyFunc, test_app_copy: Path) -> None:
idf_path = Path(os.environ['IDF_PATH']) idf_path = Path(os.environ['IDF_PATH'])

View File

@ -21,7 +21,7 @@ def clean_app_dir(app_path: Path) -> None:
shutil.rmtree(app_path / 'build', ignore_errors=True) shutil.rmtree(app_path / 'build', ignore_errors=True)
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
def test_spaces_bundle1(idf_copy: Path) -> None: def test_spaces_bundle1(idf_copy: Path) -> None:
logging.info('Running test spaces bundle 1') logging.info('Running test spaces bundle 1')
# test spiffsgen # test spiffsgen
@ -32,7 +32,7 @@ def test_spaces_bundle1(idf_copy: Path) -> None:
run_idf_py('-DIDF_TARGET=esp32s2', 'build', workdir=(idf_copy / 'examples' / 'system' / 'ulp' / 'ulp_riscv' / 'gpio')) run_idf_py('-DIDF_TARGET=esp32s2', 'build', workdir=(idf_copy / 'examples' / 'system' / 'ulp' / 'ulp_riscv' / 'gpio'))
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
def test_spaces_bundle2(idf_copy: Path) -> None: def test_spaces_bundle2(idf_copy: Path) -> None:
logging.info('Running test spaces bundle 2') logging.info('Running test spaces bundle 2')
# test flash_encryption # test flash_encryption
@ -41,7 +41,7 @@ def test_spaces_bundle2(idf_copy: Path) -> None:
run_idf_py('build', workdir=(idf_copy / 'examples' / 'protocols' / 'https_x509_bundle')) run_idf_py('build', workdir=(idf_copy / 'examples' / 'protocols' / 'https_x509_bundle'))
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
def test_spaces_bundle3(idf_copy: Path) -> None: def test_spaces_bundle3(idf_copy: Path) -> None:
logging.info('Running test spaces bundle 3') logging.info('Running test spaces bundle 3')
secure_boot_app_path = (idf_copy / 'tools' / 'test_apps' / 'security' / 'secure_boot') secure_boot_app_path = (idf_copy / 'tools' / 'test_apps' / 'security' / 'secure_boot')
@ -62,12 +62,13 @@ def test_spaces_bundle3(idf_copy: Path) -> None:
workdir=secure_boot_app_path) workdir=secure_boot_app_path)
@pytest.mark.xfail(sys.platform == 'win32', reason='Bug with reproducible build')
# Use this bundle for tests which can be done with the default build_test_app # Use this bundle for tests which can be done with the default build_test_app
@pytest.mark.parametrize('dummy_', [ @pytest.mark.parametrize('dummy_', [
# Dummy parameter with a space in it, used so that the test directory name contains a space # Dummy parameter with a space in it, used so that the test directory name contains a space
pytest.param('test spaces') pytest.param('test spaces')
]) ])
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
@pytest.mark.usefixtures('idf_copy') @pytest.mark.usefixtures('idf_copy')
def test_spaces_bundle4(dummy_: str, idf_py: IdfPyFunc, test_app_copy: Path) -> None: def test_spaces_bundle4(dummy_: str, idf_py: IdfPyFunc, test_app_copy: Path) -> None:
logging.info(f'Running test spaces bundle 4 in {test_app_copy}') logging.info(f'Running test spaces bundle 4 in {test_app_copy}')
@ -83,7 +84,7 @@ def test_spaces_bundle4(dummy_: str, idf_py: IdfPyFunc, test_app_copy: Path) ->
@pytest.mark.skipif(sys.platform == 'win32', reason='Unix test') @pytest.mark.skipif(sys.platform == 'win32', reason='Unix test')
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
def test_install_export_unix(idf_copy: Path) -> None: def test_install_export_unix(idf_copy: Path) -> None:
logging.info('install and export setup scripts') logging.info('install and export setup scripts')
env = dict(**os.environ) env = dict(**os.environ)
@ -100,7 +101,7 @@ def test_install_export_unix(idf_copy: Path) -> None:
@pytest.mark.skipif(sys.platform != 'win32', reason='Windows test') @pytest.mark.skipif(sys.platform != 'win32', reason='Windows test')
@pytest.mark.idf_copy('esp idf with spaces') @pytest.mark.idf_copy_with_space
def test_install_export_win(idf_copy: Path) -> None: def test_install_export_win(idf_copy: Path) -> None:
logging.info('install and export setup scripts') logging.info('install and export setup scripts')
env = dict(**os.environ) env = dict(**os.environ)