Files
bacnet_stack/test
Hyeongjun Kim b9dc173c57 Support routed virtual device backup/restore reinitialization (#1320)
* Support routed virtual device backup restore reinitialization

Allow routed virtual devices to accept ReinitializeDevice so Backup and Restore
states can be handled per device. Gateway behavior remains unchanged, and
DeviceCommunicationControl remains disabled for virtual devices.

Virtual-device COLDSTART, WARMSTART, and ACTIVATE_CHANGES requests now return
OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED instead of being acknowledged.

* Cover routed device backup restore test variants

Add routed-device tests for ReinitializeDevice service approval, DCC blocking,
virtual-device unsupported reinitialize states, per-device Backup/Restore state,
and backup timeout countdown behavior.

Build device tests in four compile-time variants so BAC_ROUTING and
BACNET_BACKUP_RESTORE are covered in both enabled and disabled combinations.

* Keep routed device variant tests in CTest

Register each optional device test build as its own CTest build/run pair so BAC_ROUTING and BACNET_BACKUP_RESTORE variants keep the existing fixture-based build-before-run behavior without changing the top-level test CMake file.

Constraint: Top-level test/CMakeLists.txt remains unchanged to preserve the existing test registration convention
Confidence: high
Scope-risk: narrow
Tested: cmake -S test -B /tmp/bacnet-stack-test-cmake-pr1320
Tested: ctest --test-dir /tmp/bacnet-stack-test-cmake-pr1320 -R '^test_device(_.*)?$' --output-on-failure -j4
Not-tested: Full repository CTest suite

* Ensure Backup/Restore has real configuration-file storage

Centralize reinitialize state storage so routed devices and the default device use the same access path. Enforce BACNET_BACKUP_FILE_COUNT as a positive Backup/Restore invariant, while preserving BACNET_BACKUP_RESTORE guards for no-backup builds.

Constraint: BACNET_BACKUP_RESTORE performs backup and restore through Configuration_Files[0].
Rejected: Preserve BACNET_BACKUP_FILE_COUNT=0 support | it leaves only state/property handling without a usable backup file.
Confidence: high
Scope-risk: moderate
Directive: Guard no-backup builds with BACNET_BACKUP_RESTORE, not BACNET_BACKUP_FILE_COUNT.
Tested: ctest --test-dir test/build -R '^(build_device|test_device|build_device_backup_restore|test_device_backup_restore|build_device_bac_routing|test_device_bac_routing|build_device_bac_routing_backup_restore|test_device_bac_routing_backup_restore)$' --output-on-failure
Tested: cmake --build build --target server gateway gateway2 bacbasic
Not-tested: Runtime BACnet client backup/restore exchange

---------

Signed-off-by: kimhyeongjun <hjun1.kim@samsung.com>
Co-authored-by: OmX <omx@oh-my-codex.dev>
2026-04-30 09:05:14 -05:00
..

BACnet Stack Verification and Validation Testing

CMake and C99 are used for the verification and validation testing.

Testing in the Github workflow pipeline with Makefile

The Makefile 'test' recipe is used for the CMake recipe used in the pipeline.

The 'retest' can be used to re-build the test.

Changing to the test/build folder and running 'make test' can show more details about a failing build or failing test. Running the actual test by running ./test/build/bacnet/.../test_xyz has more detailed results of running the test.

Testing with VS Code with CMake extension and C/C++ build tools

  • Open the test/ folder as a workspace.
  • The folder structure follows the src/bacnet folder structure.
  • Configure the CMake extension to use the C/C++ build tools kit.
  • Configure the CMake extension to use the Debug build type.
  • Build each or 'all' project using the CMake extension.
  • Each unit or verification test can be build individually.
  • The LCOV Cmake recipe will create Line-of-Code Coverage that can be viewed in a browser starting at test/build/lcoverage/index.html
  • The CTest extension can also be used to run the tests.

Validation and Unit testing with ctest or ztest

  • The ctest suite is used from cmake managing the tests. Add new test files following the src/bacnet folder structure into the CMakeLists.txt file. Copy and existing test folder at the same folder depth to start.
  • The ztest framework (from Zephyr) has been ported to use in the tests and includes the fff mocking macros. The zassert_x() macros include a formatted print as the last argument so that print style debug can be used to show values that fail which aids in writing a test.
  • Tests can also be written without the zassert_x() macros by including assert.h and using the assert() macro.

Use pre-commit tools for changes and additions

  • This library uses 'pre-commit' tools to format the files.
  • Run pre-commit after staging a file and before committing to avoid pipeline build failures.
  • If a file fails pre-commit checking, the file will be re-formated correctly by the pre-commit tool. Add the fixed file to the staged files and run pre-commit again.