Zephyr eRPC tests
#################
This folder contains all the necessary files to test eRPC with Zephyr.
The folder contains two folders for dual core testing - `rpmsglite/` and PC-Board testing via UART - `uart/`.
To build images for the primary and secondary core, Zephyr requires the use of `sysbuild`. The primary `CMakeLists.txt` is
located in the unit test folder, while the `CMakeLists.txt` for the secondary core is
located in the nested `remote` folder. The `sysbuild.cmake` directs the Zephyr build system to
first build the secondary core and then link it to the primary image.
Directory structure
*******************
* **cmake/** CMake files used for building tests
* **rpmsglite/cmake/** CMake files for sysbuild and tests
* **uart/cmake/** CMake files for tests
* **rpmsglite/config/** Configuration files for both cores
* **uart/config/** Configuration files for UART tests
* **rpmsglite/test\_xxx/** Directories with tests. Contains primary and remote CMakeLists.txt, sysbuild.cmake and testcase.yaml
* **uart/test\_xxx/** Directories with tests. Contains CMakeLists.txt and testcase.yaml
Running tests
*************
Note: To generate eRPC code, CMake requires `erpcgen` executable to be in Path.
If you have already builded `erpcgen`, add it to the path. Windows:
.. code-block:: console
$env:PATH = $env:PATH + ';C:\path\to\erpc\erpcgen\' # Windows
All tests (RPMSG-Lite and UART) can be executed with Zephyr's Twister:
.. code-block:: console
west twister --device-testing --device-serial COM8 -T .\erpc\test\zephyr -p mimxrt1160_evk_cm7 --west-flash --west-runner=jlink
For executing tests on one core boards (mimxrt1060_evk):
.. code-block:: console
west twister --device-testing --device-serial COM8 -T .\erpc\test\zephyr\uart -p mimxrt1060_evkb
* `--device-testing` Run tests on device
* `--device-serial` Select port where is the device connected
* `-T` Path where Twister looks for test cases (testcase.yaml)
* `-p` Name of the device
* `--west-flash` is required to be able build sysbuild tests.
* `--west-runner` Runner used to flash board
Test's structure notes
######################
Each test suite has it's own `cmake/unit_test.cmake`. Each test has its own folder with a CMakeLists files that include `cmake/unit_test.cmake`, which includes
Zephyr and all necessary variables. These variables can be overridden in the test's CMakeLists file. Finally, the `zephyr/cmake/test.cmake`` file is included.
Ensure that all sources and includes are added to the test when included. If the client is involved, add the gtest as well.
`cmake/unit_test.cmake` has to define `ERPC_ROOT_DIR`, `ZEPHYR_TEST_CMAKE_DIR` and `ERPC_ROOT_DIR`.
Additionally `TRANSPORT` and `APP_TYPE` has to be specified in test's `CMakeLists.txt` or in `unit_test.cmake` before including `zephyr/cmake/variables.cmake`.
Variable
********
* **RPMSG_LITE_REMOTE_BOARD** Remote board selected based on build board
* **APP_TYPE** CLIENT/SERVER, specified in projects's CMakeLists
* **TRANSPORT** In this case always `zephyr_uart` or `zephyr_rpmsg_lite`
* **TEST_NAME** Name of the test - test_binary, ...
* **TEST_SOURCE_DIR** Source dir of the test implementation
* **TEST_COMMON_DIR** Common dir of the erpc test (`erpc/test/common``)
* **ERPC_NAME** Default `test`, can be overridden
* **ERPC_NAME_APP** Default ERPC_NAME, overridden
* **TEST_OUT_DIR** The binary directory where the test is builded
* **ERPC_OUT_ROOT_DIR** The root directory for the erpc shim code is generation
* **ERPC_OUT_DIR** Name of the directory where shim code is generated (Default: erpc_outputs)
* **TEST_ERPC_OUT_DIR** The directory where the erpc shim code is generated
* **GENERATE_ERPC_IDL_FILES** If FALSE, test.cmake file will not generate the shim code
* **IDL_FILE** IDL file that is used for generating
* **TEST_EXT_SOURCES** External sources that are added to the app
* **TEST_EXT_INCLUDES** External includes that are added to the app
Files
*****
* **cmake/test.cmake** Generate shim code, add sources and includes to the target, link Configuration files to erpc and rpmsg_lite
* **cmake/variables.cmake** Set default variables
* **{rpmsglite,uart}/cmake/unit_test.cmake** Main cmake for server and client, includes Zephyr package and variables.cmake
* **rpmsglite/cmake/sysbuild.cmake** Common sysbuild for all test. Has to be included from test's folder in file named **sysbuild.cmake**
* **rpmsglite/cmake/rpmsg_lite.cmake** Used in sysbuild.cmake to determinate remote board
* **{rpmsglite,uart}/test_xxx/testcase.yaml** Define test, so it can be discoverd by Twister
* **{rpmsglite,uart}/test_xxx/CMakeLists.cmake** CMake for the test
* **rpmsglite/test_xxx/sysbuild.cmake** Includes cmake/sysbuild.cmake. Used by Zephyr's sysbuild system
* **rpmsglite/test_xxx/remote/CMakeLists.cmake** CMake for the server