blob: 7f3251a81be36936c6f5fc365a66c1b5cd2c9eda [file] [log] [blame]
# Copyright (c) 2023 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
import logging
from dataclasses import dataclass, field
from pathlib import Path
import pytest
logger = logging.getLogger(__name__)
@dataclass
class DeviceConfig:
platform: str = ''
type: str = ''
serial: str = ''
baud: int = 115200
runner: str = ''
id: str = ''
product: str = ''
serial_pty: str = ''
west_flash_extra_args: list[str] = field(default_factory=list, repr=False)
flashing_timeout: int = 60 # [s]
build_dir: Path | str = ''
binary_file: Path | str = ''
name: str = ''
pre_script: str = ''
post_script: str = ''
post_flash_script: str = ''
@dataclass
class TwisterHarnessConfig:
"""Store Twister harness configuration to have easy access in test."""
output_dir: Path = Path('twister_harness_out')
devices: list[DeviceConfig] = field(default_factory=list, repr=False)
@classmethod
def create(cls, config: pytest.Config) -> TwisterHarnessConfig:
"""Create new instance from pytest.Config."""
output_dir: Path = config.option.output_dir
devices = []
west_flash_extra_args: list[str] = []
if config.option.west_flash_extra_args:
west_flash_extra_args = [w.strip() for w in config.option.west_flash_extra_args.split(',')]
device_from_cli = DeviceConfig(
platform=config.option.platform,
type=config.option.device_type,
serial=config.option.device_serial,
baud=config.option.device_serial_baud,
runner=config.option.runner,
id=config.option.device_id,
product=config.option.device_product,
serial_pty=config.option.device_serial_pty,
west_flash_extra_args=west_flash_extra_args,
flashing_timeout=config.option.flashing_timeout,
build_dir=config.option.build_dir,
binary_file=config.option.binary_file,
pre_script=config.option.pre_script,
post_script=config.option.post_script,
post_flash_script=config.option.post_flash_script,
)
devices.append(device_from_cli)
return cls(
output_dir=output_dir,
devices=devices
)