ecu-tests/docs/02_configuration_resolution.md

2.6 KiB

Configuration Resolution: What is read and when

This document explains how configuration is loaded, merged, and provided to tests and interfaces.

Sources and precedence

From highest to lowest precedence:

  1. In-code overrides (if load_config(..., overrides=...) is used)
  2. Environment variable ECU_TESTS_CONFIG (absolute/relative path to YAML)
  3. config/test_config.yaml (if present under the workspace root)
  4. Built-in defaults

Data model (dataclasses)

  • EcuTestConfig
    • interface: InterfaceConfig
      • type: mock or babylin
      • channel: LIN channel index (0-based in SDK wrapper)
      • bitrate: LIN bitrate (e.g., 19200); usually defined by SDF
      • sdf_path: Path to SDF file (hardware; required for typical operation)
      • schedule_nr: Schedule number to start on connect (hardware)
      • node_name: Optional node identifier (informational)
      • dll_path, func_names: Legacy fields from the old ctypes adapter; not used with the SDK wrapper
    • flash: FlashConfig
      • enabled: whether to flash before tests
      • hex_path: path to HEX file

YAML examples

Minimal mock configuration (default):

interface:
  type: mock
  channel: 1
  bitrate: 19200
flash:
  enabled: false

Hardware (BabyLIN SDK wrapper) configuration:

interface:
  type: babylin
  channel: 0                    # 0-based channel index
  bitrate: 19200                # optional; typically driven by SDF
  node_name: "ECU_TEST_NODE"
  sdf_path: "./vendor/Example.sdf"
  schedule_nr: 0
flash:
  enabled: true
  hex_path: "firmware/ecu_firmware.hex"

Load flow

tests/conftest.py: config() fixture
  → load_config(workspace_root)
    → check env var ECU_TESTS_CONFIG
    → else check config/test_config.yaml
    → else use defaults
  → convert dicts to EcuTestConfig dataclasses
  → provide to other fixtures/tests

How tests and adapters consume config

  • lin fixture picks mock or babylin based on interface.type
  • Mock adapter uses bitrate and channel to simulate timing/behavior
  • BabyLIN adapter (SDK wrapper) uses sdf_path, schedule_nr, channel to open the device, load the SDF, and start a schedule. bitrate is informational unless explicitly applied via commands/SDF.
  • flash_ecu uses flash.enabled and flash.hex_path

Tips

  • Keep multiple YAMLs and switch via ECU_TESTS_CONFIG
  • Check path validity for sdf_path and hex_path before running hardware tests
  • Ensure vendor/BabyLIN_library.py and the platform-specific libraries from the SDK are available on PYTHONPATH
  • Use environment-specific YAML files for labs vs. CI