5802bd0ecc
Fixes the CreateObject service list-of-initial-values encoding and decoding by refactoring the data structure to be similar to WriteProperty. The implementation changes from using a linked list of property values to using a flat buffer approach with delayed decoding. Changes: * Refactored BACNET_CREATE_OBJECT_DATA structure to use an application_data buffer instead of a linked list for initial values * Added a new create_object_process() and create_object_initializer_list_process() functions to centralize object creation logic and error reporting * Updated all device implementations to use the new centralized creation functions * Enhanced the create-object example application to support command-line specification of initial property values * Added comprehensive test coverage for the new encoding/decoding and processing functions
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.