Test Spec: DBC Command Workflows¶
Document Control¶
| Field | Value |
|---|---|
| Status | Implemented |
| Related design spec | docs/design/dbc-command-workflows.md |
| Primary test area | CLI, DBC |
Test Objectives¶
Validate the shipped DBC-backed decode and encode workflows, including both library-level and CLI-level behavior.
Coverage Requirements¶
- loading a valid DBC fixture
- decode events from captured frames
- encode frame creation from named message/signals
- CLI decode and encode JSON behavior
- invalid DBC handling
Requirement Traceability¶
| Requirement ID | Covered by test IDs |
|---|---|
REQ-DBC-01 |
TEST-DBC-02, TEST-DBC-04 |
REQ-DBC-02 |
TEST-DBC-03, TEST-DBC-05 |
REQ-DBC-03 |
TEST-DBC-02, TEST-DBC-04 |
REQ-DBC-04 |
TEST-DBC-03, TEST-DBC-05 |
REQ-DBC-05 |
TEST-DBC-06 |
REQ-DBC-07 |
TEST-DBC-07 |
REQ-DBC-08 |
TEST-DBC-08, TEST-DBC-09, TEST-DBC-11 |
REQ-DBC-09 |
TEST-DBC-10 |
REQ-DBC-10 |
TEST-DBC-11 |
Representative Test Cases¶
TEST-DBC-01 — Load valid DBC fixture¶
Given the file `tests/fixtures/sample.dbc` is available
When the DBC loader reads the fixture directly
Then a known frame name shall resolve correctly from the loaded schema
Fixture: tests/fixtures/sample.dbc.
TEST-DBC-02 — Decode frames returns semantic events¶
Given the files `tests/fixtures/sample.candump` and `tests/fixtures/sample.dbc` are available
When the decode library processes the capture frames with the DBC schema
Then decoded-message events shall be returned for all known messages in the capture
Fixture: tests/fixtures/sample.candump, tests/fixtures/sample.dbc.
TEST-DBC-03 — Encode message returns frame¶
Given the file `tests/fixtures/sample.dbc` is available
When the encode library encodes a named message with signal assignments
Then the result shall include a frame and associated frame events
Fixture: tests/fixtures/sample.dbc.
TEST-DBC-04 — Decode CLI returns structured output¶
Given the files `tests/fixtures/sample.candump` and `tests/fixtures/sample.dbc` are available
When the operator runs `canarchy decode --file sample.candump --dbc sample.dbc --json`
Then the result shall include a matched message count
And the result shall include decoded-message events for known messages
Fixture: tests/fixtures/sample.candump, tests/fixtures/sample.dbc.
TEST-DBC-05 — Encode CLI returns structured frame¶
Given the file `tests/fixtures/sample.dbc` is available
When the operator runs `canarchy encode --dbc sample.dbc EngineStatus1 ... --json`
Then the result shall include the encoded frame
And the result shall include associated frame events
Fixture: tests/fixtures/sample.dbc.
TEST-DBC-06 — Invalid DBC returns decode error¶
Given the file `tests/fixtures/invalid.dbc` contains malformed DBC content
When the operator runs `canarchy decode --file sample.candump --dbc invalid.dbc --json`
Then the command shall exit with code `3`
And `errors[0].code` shall equal `"DBC_LOAD_FAILED"`
Fixture: tests/fixtures/invalid.dbc, tests/fixtures/sample.candump.
TEST-DBC-07 — Invalid signal assignment returns structured encode error¶
Given the file `tests/fixtures/sample.dbc` is available
When the operator runs `canarchy encode --dbc sample.dbc EngineStatus1 NotASignal=1 --json`
Then the command shall exit with code `3`
And `errors[0].code` shall equal `"DBC_SIGNAL_INVALID"`
Fixture: tests/fixtures/sample.dbc.
Fixtures And Environment¶
tests/fixtures/sample.dbctests/fixtures/invalid.dbctests/fixtures/sample.candump
Explicit Non-Coverage¶
- advanced DBC merge workflows
- live transmit of encoded frames
Traceability¶
This spec maps to the implemented DBC library and CLI behaviors currently covered in test_dbc.py.
TEST-DBC-08 — Encode resolves SAE PGN labels and displayed signal names¶
Given a J1939 DBC whose message EngineSpeed1 carries PGN 61444 and signal EngineSpeed (SPN 190)
When `canarchy encode --dbc <dbc> EEC1 "Engine Speed=1200" --json` is invoked
Then the frame shall encode against EngineSpeed1 with EngineSpeed = 1200
And `data.resolution.message.via` shall be `pgn_label` and the signal alias recorded
And warnings shall state both resolutions
Fixture: tests/fixtures/j1939_sample.dbc.
TEST-DBC-09 — Decode → encode round-trip by displayed names¶
Given a frame encoded from EngineSpeed1 with explicit signal values
When the frame is decoded and the decoded name/value pairs are re-encoded via the PGN label
Then the re-encoded frame bytes shall equal the original frame bytes
Fixture: tests/fixtures/j1939_sample.dbc.
TEST-DBC-10 — Encode defaults unsupplied signals and reports them¶
Given a message with three signals
When `encode` is invoked supplying only one signal
Then the remaining signals shall be defaulted and listed under `data.resolution.filled_signals`
And a warning shall direct the operator to review the defaults before transmitting
Fixture: tests/fixtures/j1939_sample.dbc.
TEST-DBC-11 — Name misses suggest close matches; PGN ambiguity is structured¶
Given a misspelled message or signal name
When `encode` is invoked
Then the `DBC_MESSAGE_NOT_FOUND` / `DBC_SIGNAL_INVALID` hint shall suggest the closest valid names
When a PGN label matches two messages and the supplied signals cannot break the tie
Then `DBC_MESSAGE_NOT_FOUND` shall list both candidate DBC message names
Fixture: tests/fixtures/j1939_sample.dbc.