82 lines
2.6 KiB
Markdown
82 lines
2.6 KiB
Markdown
# 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):
|
|
|
|
```yaml
|
|
interface:
|
|
type: mock
|
|
channel: 1
|
|
bitrate: 19200
|
|
flash:
|
|
enabled: false
|
|
```
|
|
|
|
Hardware (BabyLIN SDK wrapper) configuration:
|
|
|
|
```yaml
|
|
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
|
|
|
|
```text
|
|
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
|