Merge branch 'ci/add_download_custom_apps_fixture' into 'master'

test: fix custom additional app for multicore test cases

Closes IDFCI-1948

See merge request espressif/esp-idf!28507
This commit is contained in:
Fu Hanxi 2024-01-17 16:44:17 +08:00
commit c1ee790341
3 changed files with 29 additions and 11 deletions

View File

@ -123,6 +123,11 @@ class BuildReportDownloader:
def download_app(
self, app_build_path: str, artifact_type: ArtifactType = ArtifactType.BUILD_DIR_WITHOUT_MAP_AND_ELF_FILES
) -> None:
if app_build_path not in self.app_presigned_urls_dict:
raise ValueError(f'No presigned url found for {app_build_path}. '
f'Usually this should not happen, please re-trigger a pipeline.'
f'If this happens again, please report this bug to the CI channel.')
url = self.app_presigned_urls_dict[app_build_path][artifact_type.value]
logging.debug('Downloading app from %s', url)

View File

@ -1,14 +1,16 @@
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import glob
import os
import typing as t
from datetime import timedelta
from zipfile import ZIP_DEFLATED, ZipFile
from zipfile import ZIP_DEFLATED
from zipfile import ZipFile
import minio
from artifacts_handler import ArtifactType, get_minio_client, getenv
from artifacts_handler import ArtifactType
from artifacts_handler import get_minio_client
from artifacts_handler import getenv
from idf_build_apps import App
from idf_build_apps.utils import rmdir
from idf_ci_utils import IDF_PATH
@ -103,7 +105,7 @@ class AppUploader:
try:
self._client.stat_object(getenv('IDF_S3_BUCKET'), obj_name)
except minio.error.S3Error as e:
raise SystemExit(
raise RuntimeError(
f'No such file on minio server: {obj_name}. '
f'Probably the build failed or the artifacts got expired. '
f'Full error message: {str(e)}'
@ -112,7 +114,7 @@ class AppUploader:
self._client.fget_object(getenv('IDF_S3_BUCKET'), obj_name, zip_filename)
print(f'Downloaded to {zip_filename}')
except minio.error.S3Error as e:
raise SystemExit('Shouldn\'t happen, please report this bug in the CI channel' + str(e))
raise RuntimeError('Shouldn\'t happen, please report this bug in the CI channel' + str(e))
with ZipFile(zip_filename, 'r') as zr:
zr.extractall()

View File

@ -1,9 +1,10 @@
# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import os
import pytest
from artifacts_handler import ArtifactType
from idf_ci_utils import IDF_PATH
from pytest_embedded import Dut
@ -12,12 +13,17 @@ from pytest_embedded import Dut
@pytest.mark.esp32p4
@pytest.mark.generic
@pytest.mark.parametrize('config', ['multicore'], indirect=True)
def test_multicore_app_and_unicore_bootloader(dut: Dut) -> None:
def test_multicore_app_and_unicore_bootloader(dut: Dut, app_downloader) -> None: # type: ignore
dut.expect('Multicore bootloader')
dut.expect('Multicore app')
dut.expect('App is running')
path_to_unicore_build = os.path.join(dut.app.app_path, f'build_{dut.target}_unicore')
if app_downloader:
app_downloader.download_app(
os.path.relpath(path_to_unicore_build, IDF_PATH), ArtifactType.BUILD_DIR_WITHOUT_MAP_AND_ELF_FILES
)
dut.serial.bootloader_flash(path_to_unicore_build)
dut.expect('Unicore bootloader')
dut.expect('Multicore app')
@ -29,13 +35,18 @@ def test_multicore_app_and_unicore_bootloader(dut: Dut) -> None:
@pytest.mark.esp32p4
@pytest.mark.generic
@pytest.mark.parametrize('config', ['unicore'], indirect=True)
def test_unicore_app_and_multicore_bootloader(dut: Dut) -> None:
def test_unicore_app_and_multicore_bootloader(dut: Dut, app_downloader) -> None: # type: ignore
dut.expect('Unicore bootloader')
dut.expect('Unicore app')
dut.expect('App is running')
path_to_unicore_build = os.path.join(dut.app.app_path, f'build_{dut.target}_multicore')
dut.serial.bootloader_flash(path_to_unicore_build)
path_to_multicore_build = os.path.join(dut.app.app_path, f'build_{dut.target}_multicore')
if app_downloader:
app_downloader.download_app(
os.path.relpath(path_to_multicore_build, IDF_PATH), ArtifactType.BUILD_DIR_WITHOUT_MAP_AND_ELF_FILES
)
dut.serial.bootloader_flash(path_to_multicore_build)
dut.expect('Multicore bootloader')
dut.expect('Unicore app')
dut.expect('App is running')