esp-idf/tools/test_idf_diag/test_idf_diag.py
Frantisek Hrbata bdc94935fa feat(diag): use the esp-idf-diag module as a backend
Replace the original diag implementation in idf.py with the new one in a
separate esp-idf-diag python package. The interface is kept the same as
it was. The simple idf.py diag test is also preserved.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2025-02-11 11:26:47 +01:00

76 lines
2.5 KiB
Python

#!/usr/bin/env python
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import logging
import os
import sys
from pathlib import Path
from shutil import copytree
from subprocess import PIPE
from subprocess import run
from subprocess import STDOUT
from tempfile import TemporaryDirectory
from typing import Any
from typing import Optional
from typing import Tuple
from typing import Union
IDF_PATH = Path(os.environ['IDF_PATH'])
IDF_PY_PATH = IDF_PATH / 'tools' / 'idf.py'
IDF_DIAG_PY_PATH = IDF_PATH / 'tools' / 'idf_diag.py'
HELLO_WORLD_PATH = IDF_PATH / 'examples' / 'get-started' / 'hello_world'
PathLike = Union[str, Path]
def run_cmd(*cmd: PathLike, cwd: Optional[PathLike]=None, check: bool=True, text: bool=True) -> Tuple[int, str]:
logging.info('running: {}'.format(' '.join([str(arg) for arg in cmd])))
p = run(cmd, stdout=PIPE, stderr=STDOUT, cwd=cwd, check=check, text=text)
return p.returncode, p.stdout
def run_idf_py(*args: PathLike, **kwargs: Any) -> Tuple[int, str]:
return run_cmd(sys.executable, IDF_PY_PATH, *args, **kwargs)
def test_idf_diag() -> None:
# Basic test, compile the hello_world example, generate a report directory, and archive it.
# temporary directories
tmpdir = TemporaryDirectory()
app_path = Path(tmpdir.name) / 'app'
report_path = Path(tmpdir.name) / 'report'
# build hello world example
logging.info('building testing hello_world example')
copytree(HELLO_WORLD_PATH, app_path)
run_idf_py('fullclean', cwd=app_path)
run_idf_py('build', cwd=app_path)
# create report
logging.info('creating report')
run_idf_py('diag', '--output', report_path, cwd=app_path)
# archive report
logging.info('creating report archive')
run_idf_py('diag', '--zip', report_path)
# list recipes
logging.info('list recipes')
run_idf_py('diag', '--list')
# check recipes
logging.info('check recipes')
run_idf_py('diag', '--check')
# check redaction
logging.info('check redaction')
idf_component_path = app_path / 'idf_component.yml'
idf_component_path.write_text('https://username:password@github.com/username/repository.git')
run_idf_py('diag', '--force', '--output', report_path, cwd=app_path)
idf_component_path.unlink()
with open(report_path / 'manager' / 'idf_component' / 'idf_component.yml', 'r') as f:
data = f.read()
assert 'https://[XXX]@github.com/username/repository.git' in data