Closes #26
This commit is contained in:
1 parent
a258abf7be
commit
a702cffd93
5 files changed
+97
No files matched your search
@@ -2,3 +2,5 @@
|
||||
.project_rules
|
||||
AGENTS.md
|
||||
build
|
||||
|
||||
/build-ci/
|
||||
@@ -1355,6 +1355,18 @@ source lists live in `tests/parser_tests.pri` and `tests/decoder_tests.pri`.
|
||||
When building a consumer separately, pass
|
||||
`DBC_CORE_BUILD_DIR=/absolute/path/to/build/core` to qmake.
|
||||
|
||||
### Local core regression checks
|
||||
|
||||
Run `bash tests/run_core_ci.sh release` or `bash tests/run_core_ci.sh sanitize`
|
||||
to build the core archive with Qt 6.8.2, run all six core QtTest suites (parser,
|
||||
decoder, coverage, lifetime, validation, and pipeline/builder integration), and
|
||||
run both the qmake and standalone Qt-free tree tests. The sanitizer mode uses
|
||||
AddressSanitizer and UndefinedBehaviorSanitizer, with leak detection enabled by
|
||||
default and fatal sanitizer errors.
|
||||
|
||||
See [Local regression checks](tests/README.md#local-regression-checks) for
|
||||
prerequisites and environment overrides. No automatic CI workflow is configured.
|
||||
|
||||
### Build core without Qt libraries
|
||||
|
||||
From the repository root:
|
||||
|
||||
@@ -8,6 +8,15 @@ existing Git tag; subsequent changes are listed as unreleased.
|
||||
|
||||
### 2026-10-23
|
||||
|
||||
#### Testing
|
||||
|
||||
- Add local Release and ASan/UBSan commands in `tests/run_core_ci.sh` for the
|
||||
core archive, all six core regression suites, and qmake/standalone tree tests,
|
||||
with separate build directories and fatal test/sanitizer failures.
|
||||
- Verify clean Release and ASan/UBSan builds: each passed 2,397 QtTest checks
|
||||
without skips plus qmake and standalone tree tests. Local leak checking is
|
||||
blocked by ptrace. Validate shell syntax and build-failure propagation.
|
||||
|
||||
#### Fixed
|
||||
|
||||
- Read attribute definitions, defaults, and assignments across physical lines.
|
||||
|
||||
@@ -45,6 +45,39 @@ make check
|
||||
`dbc_validation_test.cpp`, and `dbc_pipeline_test.cpp`.
|
||||
`../core/core.pri` supplies the library include path and linkage.
|
||||
|
||||
## Local regression checks
|
||||
|
||||
`run_core_ci.sh` builds the core archive, runs all six QtTest suites and the
|
||||
qmake tree target with `make check`, then compiles and runs the standalone C++17
|
||||
tree/builder test without Qt. A failed command returns a nonzero status. The
|
||||
`sanitize` mode applies ASan/UBSan flags to core, tests, and the standalone
|
||||
executable, with leak detection enabled by default and sanitizer errors fatal.
|
||||
The optional adapter is not built. No automatic CI workflow is configured.
|
||||
|
||||
From the repository root, with Qt 6.8.2 available:
|
||||
|
||||
```sh
|
||||
bash tests/run_core_ci.sh release
|
||||
bash tests/run_core_ci.sh sanitize
|
||||
```
|
||||
|
||||
Build directories default to `build-ci/release` and `build-ci/sanitize`; an
|
||||
optional second argument selects another directory. Always use separate build
|
||||
directories for the two modes. `QMAKE`, `CXX`, and `JOBS` override the qmake
|
||||
executable, standalone compiler, and build parallelism (default 4). Generate the
|
||||
locale as described below and set `LOCPATH` locally to run without locale skips.
|
||||
On hosts where LeakSanitizer cannot work under a tracer, run with
|
||||
`ASAN_OPTIONS=detect_leaks=0:halt_on_error=1`; this disables local leak checking
|
||||
only. Test output is written to the terminal.
|
||||
|
||||
Validation of this script used clean builds in `/tmp/dbc-ci-release`
|
||||
and `/tmp/dbc-ci-sanitize` with Qt 6.8.2 and the generated German locale. Each
|
||||
mode passed 2,397 QtTest checks with no failures or skips, the qmake tree test,
|
||||
and the standalone tree test. The sanitizer run used `detect_leaks=0` because
|
||||
an explicit leak-enabled run failed with LeakSanitizer's ptrace restriction.
|
||||
Shell syntax, invalid-mode handling, and nonzero propagation of a failed qmake
|
||||
command were also checked.
|
||||
|
||||
## Decoder coverage
|
||||
|
||||
Coverage includes Motorola bit numbering within and across bytes, unaligned
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build core and run the local regression checks.
|
||||
set -euo pipefail
|
||||
|
||||
mode=${1:-release}
|
||||
source_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
build_dir=${2:-"$source_dir/build-ci/$mode"}
|
||||
qmake_args=()
|
||||
compiler_flags=()
|
||||
|
||||
case "$mode" in
|
||||
release)
|
||||
qmake_args+=(CONFIG+=release CONFIG-=debug)
|
||||
compiler_flags+=(-O2)
|
||||
;;
|
||||
sanitize)
|
||||
qmake_args+=(CONFIG+=debug CONFIG-=release
|
||||
'QMAKE_CXXFLAGS+=-fsanitize=address,undefined -fno-omit-frame-pointer'
|
||||
'QMAKE_LFLAGS+=-fsanitize=address,undefined')
|
||||
compiler_flags+=(-g -fsanitize=address,undefined -fno-omit-frame-pointer)
|
||||
export ASAN_OPTIONS=${ASAN_OPTIONS:-detect_leaks=1:halt_on_error=1}
|
||||
export UBSAN_OPTIONS=${UBSAN_OPTIONS:-halt_on_error=1:print_stacktrace=1}
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [release|sanitize] [build-directory]" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
export QT_FATAL_WARNINGS=${QT_FATAL_WARNINGS:-1}
|
||||
mkdir -p -- "$build_dir"
|
||||
cd -- "$build_dir"
|
||||
"${QMAKE:-qmake6}" "$source_dir/dbc.pro" "${qmake_args[@]}"
|
||||
make -j"${JOBS:-4}"
|
||||
make check
|
||||
|
||||
# Also verify that the tree and its builder compile and run without Qt.
|
||||
"${CXX:-c++}" -std=c++17 "${compiler_flags[@]}" -I"$source_dir/core" \
|
||||
"$source_dir/tests/tree_node_test.cpp" "$source_dir/core/tree_node.cpp" \
|
||||
"$source_dir/core/dbc_tree_builder.cpp" -o dbc_tree_standalone_test
|
||||
./dbc_tree_standalone_test
|
||||
Reference in new issue
Block a user