blob: a5106486e768c5c7dccf65d97e8232fd235bda34 [file] [log] [blame]
# Copyright (c) 2023 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
import logging
import os
from pathlib import Path
import pytest
from twister_harness.log import configure_logging
from twister_harness.twister_harness_config import TwisterHarnessConfig
logger = logging.getLogger(__name__)
pytest_plugins = (
'twister_harness.fixtures.dut'
)
def pytest_addoption(parser: pytest.Parser):
twister_harness_group = parser.getgroup('Twister harness')
twister_harness_group.addoption(
'--twister-harness',
action='store_true',
default=False,
help='Activate Twister harness plugin'
)
parser.addini(
'twister_harness',
'Activate Twister harness plugin',
type='bool'
)
twister_harness_group.addoption(
'-O',
'--outdir',
metavar='PATH',
dest='output_dir',
help='Output directory for logs. If not provided then use '
'--build-dir path as default.'
)
twister_harness_group.addoption(
'--platform',
help='Choose specific platform'
)
twister_harness_group.addoption(
'--device-type',
choices=('native', 'qemu', 'hardware', 'unit', 'custom'),
help='Choose type of device (hardware, qemu, etc.)'
)
twister_harness_group.addoption(
'--device-serial',
help='Serial device for accessing the board '
'(e.g., /dev/ttyACM0)'
)
twister_harness_group.addoption(
'--device-serial-baud',
type=int,
default=115200,
help='Serial device baud rate (default 115200)'
)
twister_harness_group.addoption(
'--runner',
help='use the specified west runner (pyocd, nrfjprog, etc)'
)
twister_harness_group.addoption(
'--device-id',
help='ID of connected hardware device (for example 000682459367)'
)
twister_harness_group.addoption(
'--device-product',
help='Product name of connected hardware device (for example "STM32 STLink")'
)
twister_harness_group.addoption(
'--device-serial-pty',
metavar='PATH',
help='Script for controlling pseudoterminal. '
'E.g --device-testing --device-serial-pty=<script>'
)
twister_harness_group.addoption(
'--west-flash-extra-args',
help='Extend parameters for west flash. '
'E.g. --west-flash-extra-args="--board-id=foobar,--erase" '
'will translate to "west flash -- --board-id=foobar --erase"'
)
twister_harness_group.addoption(
'--flashing-timeout',
type=int,
default=60,
help='Set timeout for the device flash operation in seconds.'
)
twister_harness_group.addoption(
'--build-dir',
dest='build_dir',
metavar='PATH',
help='Directory with built application.'
)
twister_harness_group.addoption(
'--binary-file',
metavar='PATH',
help='Path to file which should be flashed.'
)
twister_harness_group.addoption(
'--pre-script',
metavar='PATH'
)
twister_harness_group.addoption(
'--post-script',
metavar='PATH'
)
twister_harness_group.addoption(
'--post-flash-script',
metavar='PATH'
)
def pytest_configure(config: pytest.Config):
if config.getoption('help'):
return
if not (config.getoption('twister_harness') or config.getini('twister_harness')):
return
validate_options(config)
if config.option.output_dir is None:
config.option.output_dir = config.option.build_dir
config.option.output_dir = _normalize_path(config.option.output_dir)
# create output directory if not exists
os.makedirs(config.option.output_dir, exist_ok=True)
configure_logging(config)
config.twister_harness_config = TwisterHarnessConfig.create(config) # type: ignore
def validate_options(config: pytest.Config) -> None:
"""Verify if user provided proper options"""
# TBD
def _normalize_path(path: str | Path) -> str:
path = os.path.expanduser(os.path.expandvars(path))
path = os.path.normpath(os.path.abspath(path))
return path