Cross-cutting tests

Cross-cutting reproducibility tests

Verify the build-time determinism quality goal (Build-time determinism (sam... (QG_0014)).

Test Case: Repeated codegen runs produce byte-identical output TEST_0680
status: open
verifies: QG_0014, REQ_0763

Run Builder::build() twice on the same input set in freshly-prepared OUT_DIR directories. Compare the two devices.rs files with sha256. Assert identical.

Test Case: Input-file ordering does not affect output TEST_0681
status: open

Same input set, glob returns files in two different orders (force the order via explicit Builder::file(path) calls). The two devices.rs outputs are byte-identical (catches HashMap-iteration-order nondeterminism in dedup or collision- handling).

Test Case: Layering integrity check (Cargo.toml audit) TEST_0682
status: open

CI shell check that walks each toolchain crate’s Cargo.toml and asserts the allowed-dependency matrix:

  • fieldbus-od-core: no ethercrab, no socketcan, no taktora-connector-*, no canopen-eds-rt.

  • canopen-eds: no canopen-eds-codegen, no canopen-eds-rt, no socketcan, no ethercrab.

  • canopen-eds-codegen: no canopen-eds-rt, no transport crates.

  • canopen-eds-build, canopen-eds-cli: no canopen-eds-rt.

  • canopen-eds-verify: no canopen-eds-codegen, no canopen-eds-rt, no transport crates.

Implemented with cargo metadata + jq; runs in the workspace CI job.

Cross-cutting traceability

Used filter: types(test)

ID

Title

Status

Verifies

TEST_0600

Identity, DictEntry, PdoEntry round-trip

open

REQ_0702

TEST_0601

fieldbus-od-core has no transport deps

open

REQ_0700

TEST_0602

fieldbus-od-core compiles under no_std + alloc

open

REQ_0701

TEST_0603

ethercat-esi re-exports lifted types

open

REQ_0703; REQ_0704

TEST_0610

parse() accepts a representative Maxon EPOS4 EDS

open

REQ_0720; REQ_0722; REQ_0726

TEST_0611

Parser compiles under no_std + alloc

open

REQ_0721

TEST_0612

Parser is independent of codegen and transport

open

REQ_0721

TEST_0613

Unknown sections survive as RawSection

open

REQ_0724

TEST_0614

Parse errors carry line and column

open

REQ_0723

TEST_0615

Liberal-quirk parsing emits warnings without failing

open

REQ_0725

TEST_0620

Name sanitisation handles EDS naming edge cases

open

REQ_0731

TEST_0621

Revision collision produces distinct idents

open

REQ_0732

TEST_0622

PDO entry dedup collapses structurally identical layouts

open

REQ_0733

TEST_0623

TokenStream emission, not string formatting

open

REQ_0730; REQ_0734

TEST_0624

One EDS file equals one device

open

REQ_0735

TEST_0630

EPOS4 backend output snapshot

open

REQ_0741; REQ_0742; REQ_0743; REQ_0744

TEST_0631

Generated registry covers every emitted device

open

REQ_0745

TEST_0632

Generated module compiles under no_std + alloc

open

REQ_0748

TEST_0633

Backend is the sole canopen-eds-rt consumer in the toolchain

open

REQ_0740

TEST_0634

Object-dictionary emission gated by feature flag

open

REQ_0747

TEST_0635

Dummy entries skipped in PDO struct fields

open

REQ_0744

TEST_0636

Bring-up SDO writes emitted from EDS

open

REQ_0746

TEST_0640

CanOpenDevice trait shape compiles for a hand-written device

open

REQ_0750; REQ_0754; REQ_0755

TEST_0641

CanOpenConfigurable async trait shape compiles

open

REQ_0751

TEST_0642

canopen-eds-rt is the trait home, not taktora-internal

open

REQ_0752

TEST_0643

PdoOut payload uses heapless::Vec<u8, 8>

open

REQ_0753

TEST_0644

RPDO rejected outside Operational state

open

REQ_0756

TEST_0650

Builder writes a parseable Rust file to OUT_DIR

open

REQ_0760; REQ_0761

TEST_0651

cargo rerun-if-changed emitted per EDS input

open

REQ_0762

TEST_0652

Output passes prettyplease formatting

open

REQ_0763

TEST_0653

Parser warnings surface as cargo:warning lines

open

REQ_0764

TEST_0660

cargo eds expand emits a single device's code

open

REQ_0770

TEST_0661

cargo eds list enumerates devices

open

REQ_0771

TEST_0662

CLI output matches build helper output byte-for-byte

open

REQ_0772

TEST_0670

Verifier passes on matching EDS + dump pair

open

REQ_0780

TEST_0671

Verifier reports the differing field

open

REQ_0781

TEST_0672

Verifier reuses canopen-eds parser

open

REQ_0782

TEST_0673

Verifier exit codes follow the documented matrix

open

REQ_0783

TEST_0674

Verifier rejects unknown schema version

open

REQ_0784

TEST_0680

Repeated codegen runs produce byte-identical output

open

QG_0014; REQ_0763

TEST_0681

Input-file ordering does not affect output

open

QG_0014; REQ_0732; REQ_0733

TEST_0682

Layering integrity check (Cargo.toml audit)

open

QG_0015; REQ_0721; REQ_0740